ceph 块存储
次文档是和上一篇ceph-deploy部署ceph文档链接写的,环境都是一个环境
1 Ceph 客户端配置
1.1 安装ceph包
1.1.1 检查内核是否支撑RBC(10.0.23.130 用于安装客户端)
1.1.2 安装ceph客户端
Cat /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
priority=0
[ceph-noarch]
name=cephnoarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
priority=0
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[root@k8s-master ~]# yum install -y ceph #装ceph为的是装rbd命令
1.1.3 创建用户(在ceph服务端创建10.0.23.133)
1.1.3.1 创建ceph块客户端用户名和认证密钥
[cephadmin@ceph-1 my-cluster]$ ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=rbd'|tee ./ceph.client.rbd.keyring
1.1.4 客户端配置
1.1.4.1.1 拷贝密钥文件和配置文件到客户端
[cephadmin@ceph-1 my-cluster]$ scp ceph.client.rbd.keyring /etc/ceph/ceph.conf root@10.0.23.130:/etc/ceph
到客户端10.0.23.130上查看:
在客户端执行ceph –s报错需要执行用户名
[root@k8s-master ~]# ceph -s --name client.rbd
1.2 创建块设备及客户端映射
1.2.1 创建块设备(ceph server上操作)
默认创建块设备,会直接创建在rbd 池中,但使用deploy安装后,该rbd池并没有创建。
1.2.2 创建块设备默认池(ceph server上操作)
$ ceph osd lspools //查看集群存储池
$ ceph osd pool create rbd 64 #创建 名为rbd的池 指定pg为64
确定pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值(总的pg):
• 少于5个OSD 时可把pg_num设置为 128
• OSD 数量在5 到10个时,可把 pg_num 设置为512
• OSD 数量在10到 50个时,可把pg_num 设置为4096
• OSD 数量大于50时,你得理解权衡方法、以及如何自己计算pg_num 取值
1.2.3 创建块设备(客户端操作)
可以在服务端创建也可以在客户端创建,已经给客户端权限,我这里在客户端操作
rbd create rbd1 --size 2048 --name client.rbd #创建大小3G的 rbd1块设备
查看创建的块设备
rbd ls --name client.rbd
也可以指定池查看
rbd ls -p rbd -n client.rbd
列表形式查看
rbd list -n client.rbd
查看块设备的详细信息
rbd --image rbd1 info --name client.rbd
1.2.4 映射块设备(客户端操作)
1.2.4.1 映射介绍
映射到客户端,会报错
rbd map --image rbd1 --name client.rbd
- layering: 分层支持
- exclusive-lock: 排它锁定支持
- object-map: 对象映射支持(需要排它锁定(exclusive-lock))
- deep-flatten: 快照扁平化支持(snapshot flatten support)
- fast-diff: 快速差异计算(需要 object-map)
使用krbd(内核rbd)的客户端进行快速diff计算(需要对象映射),我们将无法在CentOS内核3.10上 映射块设备映像,因为该内核不支持对象映射(object-map)、深平(deep-flatten)和快速diff(fastdiff)(在内核4.9中引入了支持)。为了解决这个问题,我们将禁用不支持的特性,有几个选项可以 做到这一点
禁用的三种方法:
² 动态禁用
rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
² 创建RBD镜像时,之启用分层特性
Rbd create rbd1 –size 2048 –image-feature Layering –name client.rbd
² Ceph配置文件中禁用
Rbd_default_reatures = 1
因我们已经创建了池 rbd1 所以使用动态禁用
1.2.4.2 动态禁用块设备的特性
[root@k8s-master ~]# rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd
再次映射,看到映射的设备
[root@k8s-master ~]# rbd map --image rbd1 --name client.rbd
查看映射关系
[root@k8s-master ~]# rbd showmapped --name client.rbd
1.2.4.3 创建文件系统并挂载
格式化:
[root@k8s-master ~]# mkfs.xfs /dev/rbd0
创建挂载点:
[root@k8s-master ~]# mkdir /ceph-dsik1
Mount挂载:
[root@k8s-master ~]# mkdir /ceph-dsik1
[root@k8s-master ~]# mount /dev/rbd0 /ceph-dsik1
写数据测试
[root@k8s-master ~]# dd if=/dev/zero of=/ceph-dsik1/testfiel count=100 bs=1M
1.2.4.4 做成服务,开机自动挂载
vim /usr/local/bin/rbd-mount
#!/bin/bash
#池名称存储块设备映射的位置
#!/bin/bash
#池名称存储块设备映射的位置
export poolname=rbd
#磁盘映射名称
export rbdimage=rbd1
#mount directory
export mountpoint=/ceph-dsik1
#image mount / umount 和pool作为参数从systemd服务传递
if [ "$1" == "m" ];then
modprobe rbd
rbd feature disable $rbdimage object-map deep-flatten fast-diff
rbd map $rbdimage --id rbd --keyring /etc/ceph/ceph.client.rbd.keyring
mkdir -p $mountpoint
mount /dev/rbd/$poolname/$rbdimage $mountpoint
fi
if [ "$1" == "u" ]; then
umount $mountpoint
rbd unmap /dev/rbd/$poolname/$rbdname
fi
~
[root@k8s-master ceph-dsik1]# chmod +x /usr/local/bin/rbd-mount
配置服务脚本
[root@k8s-master ceph-dsik1]# vim /usr/lib/systemd/system/rbd-mount.service
[Unit]
Description=RADOS block device mapping for $rbdimage in pool $poolname
Conflicts=shutdown.target
Wants=network-online.target
After=NetworkManager-wait-online.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/rdb-mount m
ExecStop=/usr/local/bin/rdb-mount u
[Install]
[root@k8s-master ceph-dsik1]# systemctl daemon-reload
[root@k8s-master ceph-dsik1]# systemctl enable rdb-mount.service
注意: 先测试一下服务是否可用,不要冒然的重启主机测试