最近部署了L版的ceph,在进行扩容时,发现手动使用ceph-disk命令出现了问题,根据ceph官网说明,L版要用ceph-volume,然而目前生产环境并未使用这种方式来进行配置,但是L版的使用ceph-disk prepare时创建出来的osd和journal分区效果并不会像J版那样根据配置文件里面的配置来进行创建。而是在创建过程中只使用sgdisk创建了一个100M的分区,而且自动把这个分区挂载为osd,并未有创建journal分区。不知道具体是什么原因导致的。
尝试了多种方式,并在网上搜了一下ceph-disk prepare的执行流程。最终通过下面的方式成功完成了osd创建,而且创建后的osd和原本使用ceph-ansible推出的集群状态保持了一致。而且这种方式创建出来的osd不是像之前的文档那样,需要添加fstab进行osd分区的挂载。
1、准备磁盘
# sgdisk -Z -o -g /dev/sde
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
The operation has completed successfully.
2、对磁盘进行分区
# sgdisk -n 2:0:+5120M -c 2:"ceph journal" -t 2:45b0969e-9b03-4f30-b4c6-b4b80ceff106 /dev/sde
The operation has completed successfully.
# sgdisk -n 1:0:0 -c 1:"ceph data" -t 1:4fbd7e29-9d25-41b8-afd0-062c0ceff05d /dev/sde
The operation has completed successfully.
其中-t指定的是分区类型,在ceph中两种类型分区的type code:
TYPE | TYPE CODE |
---|---|
Journal | 45b0969e-9b03-4f30-b4c6-b4b80ceff106 |
osd | 4fbd7e29-9d25-41b8-afd0-062c0ceff05d |
3、格式化osd分区
# mkfs.xfs -f -i size=2048 /dev/sde1
4、创建osd
# ceph osd create
11
5、创建osd数据目录
# mkdir /var/lib/ceph/osd/ceph-11
6、挂载分区到osd的数据目录
# mount /dev/sde1 /var/lib/ceph/osd/ceph-11/
7、初始化osd数据目录
# ceph-osd -i 11 --mkfs --mkkey
8、指定journal分区
删除自动生成的journal文件
# rm -rf /var/lib/ceph/osd/ceph-11/journal
查看要用作journal分区的sde2对应的uuid
# ll /dev/disk/by-partuuid/ | grep sde2
lrwxrwxrwx 1 root root 10 Aug 31 11:58 adc17c4e-4aa8-44dd-8351-f9a1f8895455 -> ../../sde2
把sde2的uuid创建软链为journal
# ln -s /dev/disk/by-partuuid/adc17c4e-4aa8-44dd-8351-f9a1f8895455 /var/lib/ceph/osd/ceph-11/journal
在osd数据目录下写入journal分区的uuid
# echo adc17c4e-4aa8-44dd-8351-f9a1f8895455 > /var/lib/ceph/osd/ceph-11/journal_uuid
创建journal
# ceph-osd -i 11 --mkjournal
9、注册osd的认证秘钥
# ceph auth add osd.11 mon 'allow profile osd' mgr 'allow profile osd' osd 'allow *' -i /var/lib/ceph/osd/ceph-11/keyring
10、把OSD添加到CRUSH Map
# ceph osd crush add osd.11 0.01459 host=node3
11、修改数据目录权限
# chown -R ceph:ceph /var/lib/ceph/osd/ceph-11
12、激活osd
# ceph-disk activate --mark-init systemd --mount /dev/sde1