Ceph-disk手动添加OSD
最近部署了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分区的挂载,而是通过systemd自动管理挂载。
1、准备磁盘
[root@node3 ~]# 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、对磁盘进行分区
[root@node3 ~]# sgdisk -n 2:0:+5120M -c 2:"ceph journal" -t 2:45b0969e-9b03-4f30-b4c6-b4b80ceff106 /dev/sde
The operation has completed successfully.
[root@node3 ~]# 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 |
Ceph通过uuid来区分对应的分区是osd还是journal,然后再决定数据存放在哪里。
3、格式化osd分区
[root@node3 ~]# mkfs.xfs -f -i size=2048 /dev/sde1
4、创建osd
[root@node3 ~]# ceph osd create
11
5、创建osd数据目录
[root@node3 ~]# mkdir /var/lib/ceph/osd/ceph-11
6、挂载分区到osd的数据目录
[root@node3 ~]# mount /dev/sde1 /var/lib/ceph/osd/ceph-11/
7、初始化osd数据目录
[root@node3 ~]# ceph-osd -i 11 --mkfs --mkkey
8、指定journal分区
删除自动生成的journal文件
[root@node3 ~]# rm -rf /var/lib/ceph/osd/ceph-11/journal
查看要用作journal分区的sde2对应的uuid
[root@node3 ~]# 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
[root@node3 ~]# ln -s /dev/disk/by-partuuid/adc17c4e-4aa8-44dd-8351-f9a1f8895455 /var/lib/ceph/osd/ceph-11/journal
在osd数据目录下写入journal分区的uuid
[root@node3 ~]# echo adc17c4e-4aa8-44dd-8351-f9a1f8895455 > /var/lib/ceph/osd/ceph-11/journal_uuid
创建journal
[root@node3 ~]# ceph-osd -i 11 --mkjournal
9、注册osd的认证秘钥
[root@node3 ~]# 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
[root@node3 ~]# ceph osd crush add osd.11 0.01459 host=node3
这里的权重建议跟原本的osd权重保持一致,可以通过ceph osd tree查看之前添加的osd的权重值
11、修改数据目录权限
[root@node3 ~]# chown -R ceph:ceph /var/lib/ceph/osd/ceph-11
12、激活osd
[root@node3 ~]# ceph-disk activate --mark-init systemd --mount /dev/sde1
激活完成后osd会自动启动,此时可以使用ceph osd tree查看osd的状态