1、创建rbd使用的存储池。

admin节点需要安装ceph才能使用该命令,如果没有,也可以切换到ceph-node1节点去操作。

[cephfsd@ceph-admin ceph]$ ceph osd pool create rbd_data 64 64
pool 'rbd_data' created
[cephfsd@ceph-admin ceph]$ rbd pool init rbd_data
[cephfsd@ceph-admin ceph]$ ceph -s
cluster:
id: 6d3fd8ed-d630-48f7-aa8d-ed79da7a69eb
health: HEALTH_OK services:
mon: 1 daemons, quorum ceph-admin
mgr: ceph-admin(active)
mds: cephfs-1/1/1 up {0=ceph-node3=up:active}, 2 up:standby
osd: 3 osds: 3 up, 3 in data:
pools: 3 pools, 192 pgs
objects: 21 objects, 7.77KiB
usage: 3.00GiB used, 27.0GiB / 30.0GiB avail
pgs: 192 active+clean [cephfsd@ceph-admin ceph]$

注:

# 不能使用之前已经注册的pool。
[cephfsd@ceph-admin opt]$ sudo rbd pool init cephfs_data
rbd: pool already registered to a different application.
[cephfsd@ceph-admin opt]$

2、创建rbd

可以看到,rbd池的pg创建完成了,默认情况下,使用的pool是3副本配置,测试创建一块rbd试下

[cephfsd@ceph-admin ceph]$ rbd create testrbd --size=10G
rbd: error opening default pool 'rbd'
Ensure that the default pool has been created or specify an alternate pool name.
[cephfsd@ceph-admin ceph]
# 加上-p参数,指定pool的名字
[cephfsd@ceph-admin ceph]$ rbd create testrbd --size=10G -p rbd_data
或者
[cephfsd@ceph-admin ceph]$ rbd create rbd_data/testrbd --size=10G
[cephfsd@ceph-admin ceph]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
[cephfsd@ceph-admin ceph]$

3、映射rbd块设备到服务器。

# 在Ceph client端将该rbd镜像映射为本地设备时出错。
[cephfsd@ceph-admin ceph]$ sudo rbd map rbd_data/testrbd
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable rbd_data/testrbd object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
# 查看系统打印的信息
[cephfsd@ceph-admin ceph]$ dmesg | tail
[147187.581929] fuse init (API version 7.23)
[154167.356761] libceph: mon0 172.16.143.121:6789 session established
[154167.356931] libceph: client14124 fsid 6d3fd8ed-d630-48f7-aa8d-ed79da7a69eb
[171895.244253] rbd: loaded (major 252)
[174742.162661] libceph: mon0 172.16.143.121:6789 session established
[174742.162851] libceph: client14145 fsid 6d3fd8ed-d630-48f7-aa8d-ed79da7a69eb
[174742.166056] rbd: image testrbd: image uses unsupported features: 0x38
[175730.260351] libceph: mon0 172.16.143.121:6789 session established
[175730.260439] libceph: client14148 fsid 6d3fd8ed-d630-48f7-aa8d-ed79da7a69eb
[175730.263530] rbd: image testrbd: image uses unsupported features: 0x38
[cephfsd@ceph-admin ceph]$
# 查看系统内核版本
[cephfsd@ceph-admin ceph]$ uname -a
Linux ceph-admin 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
[cephfsd@ceph-admin ceph]$ ceph --version
ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)
# 再查看testrbd映像的特性
[cephfsd@ceph-admin ceph]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
[cephfsd@ceph-admin ceph]$

可以看到testrbd拥有特性:layering, exclusive-lock, object-map, fast-diff, deep-flatten

这些特性分别表示:

  • layering: 支持分层
  • striping: 支持条带化 v2
  • exclusive-lock: 支持独占锁
  • object-map: 支持对象映射(依赖 exclusive-lock )
  • fast-diff: 快速计算差异(依赖 object-map )
  • deep-flatten: 支持快照扁平化操作
  • journaling: 支持记录 IO 操作(依赖独占锁)

不过遗憾的是CentOS的3.10内核仅支持其中的layering feature,其他feature概不支持。我们需要手动disable这些features:

方法一:直接disable
# 禁止其他features
[cephfsd@ceph-admin ceph]$ rbd feature disable rbd_data/testrbd exclusive-lock, object-map, fast-diff, deep-flatten
[cephfsd@ceph-admin ceph]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
[cephfsd@ceph-admin ceph]$

禁用特性后,再次映射成功。

[cephfsd@ceph-admin ceph]$ sudo rbd map rbd_data/testrbd
/dev/rbd0
[cephfsd@ceph-admin ceph]$ ll /dev/rbd0
brw-rw----. 1 root disk 252, 0 Dec 6 17:09 /dev/rbd0
方法二:修改配置ceph.conf
# 不过每次这么来disable可是十分麻烦的,一劳永逸的方法是在各个cluster node的/etc/ceph/ceph.conf中加上这样一行配置:
rbd_default_features = 1 #仅是layering对应的bit码所对应的整数
# 设置完后,通过下面命令查看配置变化
[cephfsd@ceph-admin ceph]$ ceph --show-config|grep rbd|grep features
rbd_default_features =

方法三:修改format版本

经过查看ceph文档rbd 块镜像有支持两种格式:

--image-format format-id

format-id取值为1或2,默认为 2。

format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。

format 2 - 使用第二版 rbd 格式, librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。

这里把format指定为1之后,重新映射就好了。

# 注意:需要重新建立镜像。
[cephfsd@ceph-admin ceph]$ rbd create rbd_data/testrbd2 --size=1G --image-format 1
# 查看已经建立的rbd
[cephfsd@ceph-admin ceph]$ rbd ls -p rbd_data
testrbd2
testrbd
# 映射该rbd
[cephfsd@ceph-admin ceph]$ sudo rbd map rbd_data/testrbd2
/dev/rbd1
[cephfsd@ceph-admin ceph]$ ll /dev/rbd1
brw-rw----. 1 root disk 252, 16 Dec 6 17:32 /dev/rbd1

方法四:指定开启哪个features

# 创建rbd镜像时就指明需要的特性
[cephfsd@ceph-admin ceph]$ rbd create rbd_data/testrbd3 --size=1G --image-feature layering
[cephfsd@ceph-admin ceph]$ rbd ls -p rbd_data
testrbd2
testrbd
testrbd3
[cephfsd@ceph-admin ceph]$ rbd map rbd_data/testrbd3
rbd: sysfs write failed
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (13) Permission denied
[cephfsd@ceph-admin ceph]$ sudo rbd map rbd_data/testrbd3
/dev/rbd2
[cephfsd@ceph-admin ceph]$ ll /dev/rbd
rbd/ rbd0 rbd1 rbd2
[cephfsd@ceph-admin ceph]$ ll /dev/rbd2
brw-rw----. 1 root disk 252, 32 Dec 6 17:38 /dev/rbd2
[cephfsd@ceph-admin ceph]$
# ok,映射成功,故障解决!

禁用特性后,再次映射成功。

# 查看块映射map情况
[cephfsd@ceph-admin rbd]$ rbd showmapped
id pool image snap device
0 rbd_data testrbd - /dev/rbd0
1 rbd_data testrbd2 - /dev/rbd1
2 rbd_data testrbd3 - /dev/rbd2

4、格式化并挂载该rbd块

map后,我们就可以像格式化一个空image那样对其进行格式化了,这里格成ext4文件系统(格式化这一步大可不必,在后续小节中你会看到):

# 格式化该rbd设备
[cephfsd@ceph-admin ceph]$ sudo mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0 isize=512 agcount=16, agsize=163840 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=1024 swidth=1024 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
# 创建挂载目录
[cephfsd@ceph-admin ceph]$ sudo mkdir /mnt/rbd
# 开始挂载
[cephfsd@ceph-admin ceph]$ sudo mount /dev/rbd0 /mnt/rbd/
[cephfsd@ceph-admin ceph]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 484M 0 484M 0% /dev
tmpfs tmpfs 496M 0 496M 0% /dev/shm
tmpfs tmpfs 496M 39M 458M 8% /run
tmpfs tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 46G 1.9G 44G 5% /
/dev/sda1 xfs 497M 130M 368M 26% /boot
tmpfs tmpfs 100M 0 100M 0% /run/user/0
172.16.143.121:6789:/ ceph 8.5G 0 8.5G 0% /opt
/dev/rbd0 xfs 10G 33M 10G 1% /mnt/rbd
[cephfsd@ceph-admin ceph]$
# 挂载成功,写点东西进去
[cephfsd@ceph-admin rbd]$ sudo touch rbd_test
[cephfsd@ceph-admin rbd]$ ll
total 0
-rw-r--r--. 1 root root 0 Dec 6 18:38 rbd_test
[cephfsd@ceph-admin rbd]$ sudo vim rbd_test
[cephfsd@ceph-admin rbd]$ ll
total 4
-rw-r--r--. 1 root root 12 Dec 6 18:38 rbd_test
[cephfsd@ceph-admin rbd]$ cat rbd_test
adsga
rbd 0
[cephfsd@ceph-admin rbd]$

rbd其他命令

映射块设备

# 用 rbd 把映像名映射为内核模块。必须指定映像名、存储池名、和用户名。若 RBD 内核模块尚未加载, rbd 命令会自动加载。
sudo rbd map {pool-name}/{image-name} --id {user-name}
# 例如:
sudo rbd map rbd/myimage --id admin
# 如果你启用了 cephx 认证,还必须提供密钥,可以用密钥环或密钥文件指定密钥。
sudo rbd map rbd/myimage --id admin --keyring /path/to/keyring
sudo rbd map rbd/myimage --id admin --keyfile /path/to/fil

查看已经映射的块设备

rbd showmappe

取消块设备映射

sudo rbd unmap /dev/rbd/{poolname}/{imagename}

查看块设备映像

# 要列出 rbd 存储池中的块设备,可以用下列命令(即 rbd 是默认存储池名字):
rbd ls
# 用下列命令罗列某个特定存储池中的块设备,用存储池的名字替换 {poolname} :
rbd ls {poolname}
例如:
rbd ls swimmingpool

查看映像信息

# 用下列命令检索某个特定映像的信息,用映像名字替换 {image-name} :
rbd info {image-name}
# 例如:
rbd info foo
# 用下列命令检索某存储池内的映像的信息,用映像名字替换 {image-name} 、用存储池名字替换 {pool-name} :
rbd info {pool-name}/{image-name}
# 例如:
rbd info swimmingpool/bar

调整块设备映像大小

sudo rbd resize --size 512 test/foo --allow-shrink  #调小
sudo rbd resize --size 4096 test/foo #调大

删除块设备

sudo rbd rm test/foo

5、创建快照

[cephfsd@ceph-admin rbd]$ rbd snap create --snap mysnap rbd_data/testrbd
[cephfsd@ceph-admin rbd]$ rbd snap ls rbd_data/testrbd
SNAPID NAME SIZE TIMESTAMP
4 mysnap 10GiB Fri Dec 6 19:14:07 2019
[cephfsd@ceph-admin rbd]$

如上,创建了一个rbd_data/testrbd的快照,快照名叫mysnap。

6、回滚

# 回滚前先看一下现在是什么样子。
[cephfsd@ceph-admin rbd]$ ll
total 4
-rw-r--r--. 1 root root 0 Dec 6 19:17 abc
-rw-r--r--. 1 root root 12 Dec 6 18:38 rbd_test
# rbd_test是建快照之前就有的,把所有文件删除
[cephfsd@ceph-admin rbd]$ sudo rm -rf *
[cephfsd@ceph-admin rbd]$ ll
total 0
[cephfsd@ceph-admin rbd]$ df -TH
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 508M 0 508M 0% /dev
tmpfs tmpfs 520M 0 520M 0% /dev/shm
tmpfs tmpfs 520M 40M 480M 8% /run
tmpfs tmpfs 520M 0 520M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 49G 2.0G 47G 5% /
/dev/sda1 xfs 521M 136M 386M 26% /boot
tmpfs tmpfs 104M 0 104M 0% /run/user/0
172.16.143.121:6789:/ ceph 9.2G 0 9.2G 0% /opt
/dev/rbd0 xfs 11G 35M 11G 1% /mnt/rbd
# 卸载块
[cephfsd@ceph-admin rbd]$ sudo umount /dev/rbd0
umount: /mnt/rbd: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[cephfsd@ceph-admin rbd]$ pwd
/mnt/rbd
# 因为当前进入了这个块设备目录,所以无法卸载,先离开当前目录。
[cephfsd@ceph-admin rbd]$ cd
# 卸载成功
[cephfsd@ceph-admin ~]$ sudo umount /dev/rbd0
[cephfsd@ceph-admin ~]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 484M 0 484M 0% /dev
tmpfs tmpfs 496M 0 496M 0% /dev/shm
tmpfs tmpfs 496M 39M 458M 8% /run
tmpfs tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 46G 1.9G 44G 5% /
/dev/sda1 xfs 497M 130M 368M 26% /boot
tmpfs tmpfs 100M 0 100M 0% /run/user/0
172.16.143.121:6789:/ ceph 8.5G 0 8.5G 0% /opt
[cephfsd@ceph-admin ~]$ ll /mnt/rbd/
total 0
# 开始回滚
[cephfsd@ceph-admin ~]$ rbd snap rollback rbd_data/testrbd@mysnap
Rolling back to snapshot: 100% complete...done.
# 重新挂载
[cephfsd@ceph-admin ~]$ sudo mount /dev/rbd0 /mnt/rbd/
# 检查该文件是否和建立快照时一模一样
[cephfsd@ceph-admin ~]$ ll /mnt/rbd/
total 4
-rw-r--r--. 1 root root 12 Dec 6 18:38 rbd_test
[cephfsd@ceph-admin ~]$ cat /mnt/rbd/rbd_test
adsga
rbd 0
[cephfsd@ceph-admin ~]$

7、克隆

查看该块设备支不支持克隆,image-format必须为2

[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
# 如果不是,则需要在创建快照的时候就指定--image-format为2
rbd create rbd_data/testrbd4 --size 1G --image-format 2

把该块做成模板,需要先把该模板的快照设置成protect(重要)

# 设置快照为protect
[cephfsd@ceph-admin ~]$ rbd snap protect rbd_data/testrbd@mysnap
# 可以通过unprotect取消保护,但是这样就不能克隆了
[cephfsd@ceph-admin ~]$ rbd snap unprotect rbd_data/testrbd@mysnap
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd
rbd image 'testrbd':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.373e6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 16:06:55 2019
# 这里我们把它设置回来,设为protect
[cephfsd@ceph-admin ~]$ rbd snap protect rbd_data/testrbd@mysnap

卸载该块

[cephfsd@ceph-admin ~]$ sudo umount /dev/rbd0
[cephfsd@ceph-admin ~]$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 484M 0 484M 0% /dev
tmpfs tmpfs 496M 0 496M 0% /dev/shm
tmpfs tmpfs 496M 45M 452M 9% /run
tmpfs tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 46G 1.9G 44G 5% /
/dev/sda1 xfs 497M 130M 368M 26% /boot
tmpfs tmpfs 100M 0 100M 0% /run/user/0
172.16.143.121:6789:/ ceph 8.5G 0 8.5G 0% /opt
[cephfsd@ceph-admin ~]$

开始克隆

[cephfsd@ceph-admin ~]$ rbd clone rbd_data/testrbd@mysnap rbd_data/testrbd_clone
[cephfsd@ceph-admin ~]$ rbd -p rbd_data ls
testrbd2
testrbd
testrbd3
testrbd_clone
[cephfsd@ceph-admin ~]
# 可以看到多出了一个克隆出来的块testrbd_clone

查看区别

检查克隆出来的testrbd_clone和之前的testrbd有没有什么区别:

# 映射testrbd_clone
[cephfsd@ceph-admin ~]$ sudo rbd map rbd_data/testrbd_clone
/dev/rbd3
# 创建挂载目录
[cephfsd@ceph-admin ~]$ sudo mkdir /mnt/rbd_clone
# 挂载克隆的块
[cephfsd@ceph-admin ~]$ sudo mount /dev/rbd3 /mnt/rbd_clone/
# 查看克隆的块的详情
[cephfsd@ceph-admin ~]$ ll /mnt/rbd_clone/
total 4
-rw-r--r--. 1 root root 12 Dec 6 18:38 rbd_test
[cephfsd@ceph-admin ~]$ cat /mnt/rbd_clone/rbd_test
adsga
rbd 0
[cephfsd@ceph-admin ~]$
# 发现testrbd_clone和testrbd快照的内容是一模一样的,因为是从那个快照克隆过来的
# 查看 testrbd_clone信息
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd_clone
rbd image 'testrbd_clone':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.375f6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 19:56:21 2019
parent: rbd_data/testrbd@mysnap
overlap: 10GiB
[cephfsd@ceph-admin ~]$

flatten合并

父镜像与克隆镜像合并

这个时候的testrbd_clone还是依赖testrbd的镜像mysnap的,如果testrbd的mysnap被删除或者怎么样,testrbd_clone也不能够使用了,要想独立出去,就必须将父镜像的信息合并flattern到子镜像中

# 合并前
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd_clone
rbd image 'testrbd_clone':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.375f6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 19:56:21 2019
parent: rbd_data/testrbd@mysnap
overlap: 10GiB
[cephfsd@ceph-admin ~]$
# 开始flatten合并
[cephfsd@ceph-admin ~]$ rbd flatten rbd_data/testrbd_clone
Image flatten: 100% complete...done.
# 合并后,查看testrbd_clone发现已经没有parent信息了,因为已经独立了
[cephfsd@ceph-admin ~]$ rbd info rbd_data/testrbd_clone
rbd image 'testrbd_clone':
size 10GiB in 2560 objects
order 22 (4MiB objects)
block_name_prefix: rbd_data.375f6b8b4567
format: 2
features: layering
flags:
create_timestamp: Fri Dec 6 19:56:21 2019
[cephfsd@ceph-admin ~]$
# 此时就可以删除快照模板了
[cephfsd@ceph-admin ~]$ rbd snap unprotect rbd_data/testrbd@mysnap
[cephfsd@ceph-admin ~]$ rbd snap rm rbd_data/testrbd@mysnap
[cephfsd@ceph-admin ~]$ rbd snap ls rbd_data/testrbd
# 镜像模板已删除

8、k8s使用rbd作后端存储

参考下一篇文档:https://www.cnblogs.com/doublexi/p/15618609.html

引用:

参考:http://www.strugglesquirrel.com/2019/04/23/centos7%E9%83%A8%E7%BD%B2ceph/

http://docs.ceph.org.cn/rbd/rbd/

ceph块存储场景的更多相关文章

  1. 二十八. Ceph概述 部署Ceph集群 Ceph块存储

    client   :192.168.4.10 node1 :192.168.4.11 ndoe2 :192.168.4.12 node3 :192.168.4.13   1.实验环境 准备四台KVM虚 ...

  2. Ceph块存储介绍

    1. 块存储是什么 块存储简称RBD(RADOS Block Device),是一种有序的字节序块,也是在Ceph三大存储类型中最为常用的存储方式 ,Ceph的块存储是基于RADOS的,因此它也借助R ...

  3. Ceph 块存储

    任何普通的linux主机都可以充当ceph客户机,客户机通过网络与ceph存储集群交互以存储或检索用户数据.Ceph RBD支持已经添加到linux主线内核中,从2.6.34以及以后版本开始. === ...

  4. ceph对象存储场景

    安装ceph-radosgw [root@ceph-node1 ~]# cd /etc/ceph # 这里要注意ceph的源,要和之前安装的ceph集群同一个版本 [root@ceph-node1 c ...

  5. Ceph 块存储 创建的image 映射成块设备

    将创建的volume1映射成块设备 [root@mysql-server ceph]# rbd map rbd_pool/volume1 rbd: sysfs write failed RBD ima ...

  6. ceph rbd块存储挂载及文件存储建立

    一.rbd块存储挂载 1 创建一个OSD pool # ceph osd pool create rbd1 128 查询存储空间使用 # ceph df GLOBAL: SIZE AVAIL RAW ...

  7. 我们为什么选择Ceph来建立块存储

    我们为什么选择Ceph来建立块存储?国内知名黑客组织东方联盟是这样回答的,卷管理器的大小和增长受到管理程序的驱动器补充的限制,与其他Droplet共享.一旦Droplet被摧毁,储存就会被释放.术语“ ...

  8. 3.Ceph 基础篇 - RBD 块存储使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485253&idx=1&sn=24d9b06a ...

  9. Ceph分层存储分析

    最近弄Ceph集群考虑要不要加入分层存储 因此花了点时间研究了下 1,首先肯定要弄清Ceph分层存储的结构 ,结构图大概就是下图所示 缓存层(A cache tier)为Ceph客户端提供更好的I/O ...

随机推荐

  1. Python AttributeError: module 'sys' has no attribute 'setdefaultencoding'

    Python 3 与 Python 2 有很大的区别,其中Python 3 系统默认使用的就是utf-8编码. 所以,对于使用的是Python 3 的情况,就不需要sys.setdefaultenco ...

  2. Luogu P2024 [NOI2001]食物链 | 并查集

    题目链接 思路:并查集,因为一开始我们并不知道每一只动物是哪一个种类的,所以我们干脆建立三倍于n的空间,1~n这三分之一用来存第i只动物是A的情况,n+1~2n这三分之一用来存第(i-n)只动物是B的 ...

  3. C#写TXT文档

    //C#写TXT文档 String strDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAs ...

  4. cloudstack部署

    参考文档 https://blog.csdn.net/u012124304/article/details/80960504#Mysql_37 cloudstack的rpm包下载地址 http://d ...

  5. kafaka高效吞吐量-生产端,服务端,消费端

    零拷贝:sendfile 生产端 生产端:消息压缩,缓存批量发送,异步解耦 多线程并发:防止某一个业务阻塞等待 接收消息缓存 BufferPool设计:不释放 服务端 Reactor模型,顺序写,页缓 ...

  6. webpack 配置devServer 服务器

    webpack 配置devServer 服务器 /** * loader: 1. 下载 2. 使用(配置) * plugins:1. 下载 2. 引入 3.使用 */ // 用来拼接绝对路径的方法 c ...

  7. Python推导式详解,带你写出比较精简酷炫的代码

    Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...

  8. 【Azure 环境】用 PowerShell 调用 AAD Token, 以及调用Azure REST API(如资源组列表)

    问题描述 PowerShell 脚本调用Azure REST API, 但是所有的API都需要进行权限验证.要在请求的Header部分带上Authorization参数,并用来对List Resour ...

  9. 问题 K: A/B Problem

    题目描述 做了A+B Problem,A/B Problem不是什么问题了吧! 输入 每组测试样例一行,首先一个号码A,中间一个或多个空格,然后一个符号( / 或者 % ),然后又是空格,后面又是一个 ...

  10. SpringCloud升级之路2020.0.x版-34.验证重试配置正确性(3)

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续上一节针对我们的重试进行测试 验证针对可重试的方法响应超时异常重试正确 我们可以通 ...