CEPH 块设备

块是一个字节序列(例如,一个 512 字节的数据块)。基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、 CD 、软盘、甚至传统的 9
磁道磁带。无处不在的块设备接口使虚拟块设备成为与 Ceph 这样的海量存储系统交互的理想之选。

Ceph 块设备是精简配置的、大小可调且将数据条带化存储到集群内的多个 OSD 。 Ceph 块设备利用 RADOS 的多种能力,如快照、复制和一致性。
Ceph 的 RADOS 块设备( RBD )使用内核模块或 librbd 库与 OSD 交互。

注意:内核模块可使用 Linux 页缓存。对基于 librbd 的应用程序, Ceph 可提供 RBD 缓存。

Ceph 块设备靠无限伸缩性提供了高性能,如向内核模块、或向 abbr:KVM (kernel virtual machines) (如 Qemu 、
OpenStack 和 CloudStack 等云计算系统通过 libvirt 和 Qemu 可与 Ceph 块设备集成)。



更多信息参考
http://docs.ceph.org.cn/rbd/rbd/ <http://docs.ceph.org.cn/rbd/rbd/>

配置块设备(client节点)

注意作为client节点也需要安装ceph,否则rbd会报错sudo: rbd: command not found。


需要注意的是client节点需要是ceph集群中的一员,需要有/etc/ceph/ceph.client.admin.keyring文件,否则无法跟ceph集群沟通,会报错ceph
monclient(hunting) error missing keyring cannot use cephx for authentication。

/etc/ceph/ceph.client.admin.keyring文件是在执行以下命令时生产的
ceph-deploy new NodeA NodeB NodeC ceph-deploy mon create-initial
或者


可以从集群的其他节点(主节点的/etc/ceph目录下)上将ceph.client.admin.keyring和ceph.conf文件复制一份过来,放到/etc/ceph目录下。
比如在client节点使用命令
scp ceph1:/etc/ceph/ceph.client.admin.keyring /etc/ceph scp
ceph1:/etc/ceph/ceph.conf /etc/ceph
如果没有conf文件会报错
-1 did not load config file, using default settings

CephX 认证系统 <https://cloud.tencent.com/developer/article/1006027>

在执行rbd命令之前请先使用命令ceph -s确保集群的健康情况如下:
[zzq@localhost ceph]$ ceph -s cluster 60cfd9c4-e6c1-4d0d-a2f4-5a0213326909
healthHEALTH_OK monmap e1: 3 mons at {ceph1=192.168.199.81:6789/0,ceph2=192.168.
199.82:6789/0,ceph3=192.168.199.83:6789/0} election epoch 4, quorum 0,1,2
ceph1,ceph2,ceph3 osdmape29: 3 osds: 3 up, 3 in pgmap v88: 120 pgs, 1 pools, 0
bytes data,0 objects 100 MB used, 15226 MB / 15326 MB avail 120 active+clean
[zzq@localhost ceph]$
否则rbd可能遇到的问题卡住不动,因为集群不健康io是被封锁的,解决方式参考
遇到问题—ceph—ceph的rbd命令没反应卡住 <http://my.525.life/article?id=1510739742214>

创建映像

命令格式如下
sudo rbd create foo --size 4096 [-m {mon-IP}] [-k /path/to/ceph.client.admin.
keyring]
foo是块的名称
size是块大小
-m 是主机名或ip
-k是client节点的key文件,可以使用命令查看ls /etc/ceph

例如
sudo rbd create foo --size 4096 -m ceph1 -k /etc/ceph/ceph.client.admin.keyring
可以使用命令查看块的创建情况
sudo rbd list -k /etc/ceph/ceph.client.admin.keyring
正确输出如下:
[zzq@localhost ceph]$ sudo rbd create foo --size 4096 -m ceph1 -k
/etc/ceph/ceph.client.admin.keyring [zzq@localhost ceph]$ sudo rbd list -k
/etc/ceph/ceph.client.admin.keyring foo [zzq@localhost ceph]$
如果报错
[zzq@localhost ~]$ sudo rbd create foo --size 4096 -m ceph1 -k
/etc/ceph/ceph.client.admin.keyring ERROR: modinfo: couldnot find module rbd
FATAL:Module rbd not found. rbd: failed to load rbd kernel module (1) rbd: sysfs
write failed rbd: map failed: (2) No such file or directory
原因
Since CEPH RBD module was first introduced with kernel 2.6.34 (and current
RHEL/CentOS kernel is 2.6.32) – that means we need a newer kernel.

所以需要升级内核,使用命令如下:
sudo rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org sudo rpm -Uvh
http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm sudo yum
--enablerepo=elrepo-kernel install kernel-ml
编辑etc/grub.conf然后重启

使用命令
sudo vi /etc/grub.conf sudo reboot
将default = 1 改为default = 0

将映像映射为块设备

将映像映射为块设备的命令
格式
sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.
admin.keyring]
例如
sudo rbd map foo --name client.admin -m ceph1 -k /etc/ceph/ceph.client.admin
.keyring
正确输出如下:
[zzq@localhost ceph]$ sudo rbd map foo --name client.admin -m ceph1 -k
/etc/ceph/ceph.client.admin.keyring /dev/rbd0 [zzq@localhost ceph]$
查看块映射map和创建文件系统
rbd showmapped
输出如下:
[zzq@localhost ceph]$ rbd showmapped id pool image snap device 0 rbd foo -
/dev/rbd0
则使用/dev/rbd0创建文件系统
sudo mkfs.ext4 -m0 /dev/rbd0
正确输出如下:
[zzq@localhost ceph]$ sudo mkfs.ext4 -m0 /dev/rbd0 mke2fs 1.41.12 (17-May-2010
) Discarding device blocks: done Filesystemlabel= OS type: Linux Block size=4096
(log=2) Fragment size=4096 (log=2) Stride=1024 blocks, Stripe width=1024 blocks
262144 inodes, 1048576 blocks 0 blocks (0.00%) reserved for the super user
First datablock=0 Maximum filesystem blocks=1073741824 32 block groups 32768
blocks pergroup, 32768 fragments per group 8192 inodes per group Superblock
backups storedon blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736
Writing inode tables: done Creating journal (32768 blocks): done Writing
superblocksand filesystem accounting information: done This filesystem will be
automatically checked every32 mounts or 180 days, whichever comes first. Use
tune2fs -cor -i to override. [zzq@localhost ceph]$
挂载文件系统并写入文件查看
sudo mkdir /cephAll sudo mount /dev/rbd0 /cephAll cd /cephAll sudo vi
helloCeph.txt ls df -h
这样我们 <http://my.525.life/article?id=1510739742102>就能在client中直接对ceph集群存储进行读取写入了。

输出如下:
[zzq@localhost ceph]$ sudo mkdir /cephAll [zzq@localhost ceph]$ sudo mount
/dev/rbd0 /cephAll [zzq@localhost ceph]$ cd /cephAll [zzq@localhost cephAll]$
sudo vi helloCeph.txt [zzq@localhost cephAll]$ ls helloCeph.txt lost+found [zzq
@localhost cephAll]$ df -h Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_localhost-lv_root18G 2.2G 15G 13% / tmpfs 482M 0 482M 0%
/dev/shm /dev/sda1477M 86M 362M 20% /boot /dev/rbd0 3.9G 8.0M 3.8G 1% /cephAll
[zzq@localhost cephAll]$
其他块命令

映射块设备

格式如下:
sudo rbd map {pool-name}/{image-name} --id {user-name}
例如:
sudo rbd map test/foo2 --id admin
如若启用cephx认证,还需指定密钥
sudo rbd map test/foo2 --id admin --keyring /etc/ceph/ceph.client.admin.keyring
查看已映射设备
rbd showmapped
取消块设备映射

格式如下:
sudo rbd unmap /dev/rbd/{poolname}/{imagename}
例如:
sudo rbd unmap /dev/rbd/test/foo2
罗列块设备映像
sudo rbd ls
检索映像信息

格式
sudo rbd info {image-name}
例如
sudo rbd info foo
或者
格式
sudo rbd info {pool-name}/{image-name}
例如:
sudo rbd info test/foo
调整块设备映像大小

命令如下:
sudo rbd resize --size 512 test/foo --allow-shrink #调小 sudo rbd resize --size
4096 test/foo #调大
删除块设备
sudo rbd rm test/foo