Linux客户端远程挂载Ceph RBD并设置开机启动自动挂载
当我们安装完ceph集群后,集群外的机器想使用Ceph集群内创建的rbd文件。那么,就需要安装Ceph的客户端,也就是rbd客户端,以及一些RBD专用的内核模块。
步骤也相对简单,关于集群搭建,以及ceph原理可以看下面的文章,此处不过多介绍安装和原理部分
环境信息
Ceph集群信息
[root@ceph-01 ~]# ceph -s
cluster:
id: c8ae7537-8693-40df-8943-733f82049642
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-01,ceph-02,ceph-03 (age 6h)
mgr: ceph-03(active, since 10h), standbys: ceph-01, ceph-02
mds: cephfs-abcdocker:1 cephfs:1 {cephfs-abcdocker:0=ceph-03=up:active,cephfs:0=ceph-02=up:active} 1 up:standby
osd: 4 osds: 4 up (since 10h), 4 in (since 6w)
rgw: 2 daemons active (ceph-01, ceph-02)
task status:
data:
pools: 13 pools, 656 pgs
objects: 7.16k objects, 25 GiB
usage: 77 GiB used, 103 GiB / 180 GiB avail
pgs: 656 active+clean
io:
client: 4.0 KiB/s wr, 0 op/s rd, 0 op/s wr
ceph版本
[root@ceph-01 ~]# ceph version
ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautilus (stable)
创建Pool池
首先在ceph中我们需要创建一个新的pool池,pool名称为abcdocker_rbd
ceph osd pool create abcdocker_rbd 32 32 # 两个 32 指定的 pg 和 pgp 的数量
ceph osd pool application enable abcdocker_rbd rbd
检查是否创建成功
[root@ceph-01 ~]# ceph osd pool ls|grep rbd
abcdocker_rbd
创建块设备
接下来我们需要创建一个rbd文件,这里使用layering
[root@ceph-01 ~]# rbd create abcdocker_rbd/linux_mount.img --size 2G --image-feature=layering
#abcdocker_rbd 为pool名称
#linux_mount.img 为rbd文件名称
#--size rbd文件大小
此时我们通过rbd命令就可以看到这个img文件
[root@ceph-01 ~]# rbd ls abcdocker_rbd
linux_mount.img
并且使用info
参数可以看到这个rbd文件大小
[root@ceph-01 ~]# rbd info abcdocker_rbd/linux_mount.img
rbd image 'linux_mount.img':
size 2 GiB in 512 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 58fa764ce60a
block_name_prefix: rbd_data.58fa764ce60a
format: 2
features: layering
op_features:
flags:
create_timestamp: Fri Jul 15 18:49:40 2022
access_timestamp: Fri Jul 15 18:49:40 2022
modify_timestamp: Fri Jul 15 18:49:40 2022
创建访问用户
创建一个普通用户,linux使用普通用户访问pool存储池
用户名称为lient.linux_mount
授权pool为abcdocker_rbd
[root@ceph-01 ~]# ceph auth get-or-create client.linux_mount mon 'profile rbd' osd 'profile rbd pool=abcdocker_rbd' mgr 'profile rbd pool=abcdocker_rbd'
[client.linux_mount]
key = AQCHR9FiQIJVNhAATcyfD7+2yu0nJcBitZQwcQ==
导出信息为文件
[root@ceph-01 ~]# ceph auth get-or-create client.linux_mount -o ceph.client.linux_mount.keyring
将用户的ceph.client.linux_mount.keyring
文件和ceph.conf
文件复制到客户端的/etc/ceph
目录,这个步骤可以等客户端安装完ceph-common
客户端配置
配置yum源
#配置centos、epeo、ceph源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/ceph.repo http://down.i4t.com/ceph/ceph.repo
yum clean all
yum makecache
安装依赖以及ceph-common
[root@abcdocker ~]# yum install -y python-setuptools ceph-common
到ceph节点中拷贝ceph.client.linux_mount.keyring
文件和ceph.conf
[root@ceph-01 ~]# scp ceph.client.linux_mount.keyring root@192.168.31.73:/etc/ceph/
[root@ceph-01 ~]# scp /etc/ceph/ceph.conf root@192.168.31.73:/etc/ceph/
拷贝完成后,我们就可以去客户端执行命令,检查是否可以获取到rbd信息
[root@abcdocker ~]# rbd list --id linux_mount -p abcdocker_rbd
linux_mount.img
客户端挂载
将远端的RBD文件映射到本地
[root@abcdocker ~]# rbd map abcdocker_rbd/linux_mount.img --id linux_mount
/dev/rbd0
查看rbd映射的信息
[root@abcdocker ~]# rbd showmapped
id pool namespace image snap device
0 abcdocker_rbd linux_mount.img - /dev/rbd0
格式化并挂载
[root@abcdocker ~]# mkfs.ext4 /dev/rbd0 #这里要看上面映射出来的地址
[root@abcdocker ~]# mkdir /data
[root@abcdocker ~]# mount /dev/rbd0 /data/
查看挂载结果
[root@abcdocker ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 36G 9.4G 27G 27% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.7M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-home 18G 33M 18G 1% /home
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 783M 0 783M 0% /run/user/1000
tmpfs 783M 0 783M 0% /run/user/0
/dev/rbd0 2.0G 6.0M 1.8G 1% /data
编辑/etc/ceph/rbdmap文件,设置自动map
方便开机启动自动挂载
echo "abcdocker_rbd/linux_mount.img id=linux_mount,keyring=/etc/ceph/ceph.client.linux_mount.keyring " >>/etc/ceph/rbdmap
#abcdocker_rbd 为pool名称
#linux_mount.img 为rbd文件
#keyring 为之前同步的client key
#id 为rbd用户
设置rbdmap为开机启动
systemctl enable rbdmap
修改fstab,设置开机挂载
[root@abcdocker ~]# echo "/dev/rbd0 /data ext4 defaults,noatime,_netdev 0 0" >>/etc/fstab
[root@abcdocker ~]# cat /etc/fstab #检查
重启主机,测试开机是否自动map并挂载设备成功
启动连接一切OK
扩容
随着我们存储增多,后续可能需要扩容,扩容目前只需要两条简单的命令即可
rbd resize abcdocker_rbd/linux_mount.img --id linux_mount --size 10G
resize2fs /dev/rbd0
#如果我们想在客户端扩容,需要添加pool/rbd镜像,以及--id 添加用户,以及需要扩容的空间
扩容后