Ceph 增加和删除 osd
增加 osd
在新节点安装 ceph
在新节点上安装 ceph 软件包,保证和 ceph 集群的软件版本一致
ceph-deploy install [host-name] --release luminous
上面是通用做法,在离线环境下,需要准备好rpm包,然后修改本地ceph的yum,然后在每个节点分别执行
yum instal -y ceph-deploy
yum instal -y ceph
列出新节点上所有可用磁盘
ceph-deploy disk list [host-name]
发送配置文件
将配置文件和管理秘钥发送到新的节点
(此操作要在安装目录中执行,例如:/usr/local/ceph-cluster)
ceph-deploy admin [host-name]
添加 osd
注意: 此方式适合于使用裸盘进行添加,如果要在LVM卷上创建 osd,则参数 --data
必须是 volume_group/lv_name
,而不是卷的块设备的路径。
(此操作要在安装目录中执行,例如:/usr/local/ceph-cluster)
ceph-deploy osd create --data /dev/sdb [host-name]
观察平衡过程
当新的节点加入集群,ceph 集群开始将部分现有的数据重新平衡到新加入的 osd 上,用下面的命令可用观察平衡过程。
ceph -w
watch ceph -s
watch ceph health
检查集群的存储容量
rados df
查看新加入的 osd
ceph osd tree
注意: 在生产环境中,一般不会再新节点加入 ceph 集群后,立即开始数据回填,这样会影响集群性能。所以我们需要设置一些标志位,来完成这个目的。
ceph osd set noin
ceph osd set nobackfill
在用户访问的非高峰时,取消这些标志位,集群开始在平衡任务。
ceph osd unset noin
ceph osd unset nobackfill
删除 osd
进入要删除 osd 的主机
将 osd 的权重标记为 0
ceph osd crush reweight osd.{osd-num} 0
注: osd-num
通过 ceph osd tree
查看
观察数据迁移
ceph -w
watch ceph -s
注: 待集群状态正常后再进行下一步操作
踢出集群
ceph osd out {osd-num}
注: 观察集群状态,待集群状态正常后再进行下一步操作
通过 systemctl
停止 osd 服务
systemctl status ceph-osd@{osd-num}
systemctl stop ceph-osd@{osd-num}
systemctl disable ceph-osd@{osd-num}
systemctl status ceph-osd@{osd-num}
删除 CRUSH 图的对应 OSD 条目
ceph osd crush remove osd.{osd-num}
注: 删除 CRUSH 图的对应 OSD 条目,它就不再接收数据了。也可以反编译 CRUSH 图、删除 device 列表条目、删除对应的 host 桶条目或删除 host 桶(如果它在 CRUSH 图里,而且你想删除主机),重编译 CRUSH 图并应用它。
删除 OSD 认证密钥
ceph auth del osd.{osd-num}
删除 OSD
ceph osd rm {osd-num}
处理配置文件
如果 ceph.conf
中记载了相关的内容,则需要修改配置文件并更新到其他主机,如果没有,则忽略此步骤。
卸载 osd 挂载的磁盘
df -h
umount /var/lib/ceph/osd/ceph-{osd-num}
ceph-disk zap /dev/s{?}{?}
清除主机
如果只想清除 /var/lib/ceph 下的数据、并保留 Ceph 安装包,可以用 purgedata 命令。
ceph-deploy purgedata {hostname} [{hostname} ...]
要清理掉 /var/lib/ceph 下的所有数据、并卸载 Ceph 软件包,用 purge 命令。
ceph-deploy purge {hostname} [{hostname} ...]
修改 crushmap
剔除完 osd 之后,使用 ceph -s
状态正常,但是使用 ceph osd tree
查看列表的时,却发现已经没有osd的主机依然存在。
原因是 crushmap
的一些架构图,不会动态修改,所以需要手工的修改 crushmap
。
ceph osd getcrushmap -o old.map //导出crushmap
crushtool -d old.map -o old.txt //将crushmap转成文本文件,方便vim修改
cp old.txt new.txt //做好备份
修改 new.txt, 将此 host 相关的内容删除
host host-name {
xxxxx
xxxxx
}
host host-name {
xxxxx
xxxxx
}
root default {
item host-name weight 0.000
item host-name weight 0.000
}
把以上的内容删除掉后,重新编译为二进制文件,并将二进制 map 应用到当前 map 中
curshtool -c new.txt -o new.map
ceph osd setcrushmap -i new.map
此时ceph会重新收敛,等待收敛完毕后,ceph可正常使用
ceph 创建和删除osd
1、概述
本次主要是使用ceph-deploy工具和使用ceph的相关命令实现在主机上指定磁盘创建和删除osd,本次以主机172.16.1.96(主机名hadoop96)为例,此主机系统盘为/dev/sda, 其他盘有/dev/sdb、/dev/sdc和/dev/sdd,这几个盘都是裸磁盘,目的是使用这几个盘的组合创建osd。
磁盘情况如下图:
2、创建osd
使用ceph-deploy(工具安装在hadoop95上)创建osd,这里创建两个osd,其中一个数据和日志在同一个磁盘上,另外的osd日志被独立到另一个盘。
1)数据和日志在同一个磁盘上
执行ceph-deploy osd create hadoop96:/dev/sdb,然后在hadoop96上查看如下图:
进入/var/lib/ceph/osd/ceph-4目录查看
如上图可知日志目录被链接到/dev/disk/by-partuuid/17f23e99-13dc-4a15-827b-745213c5c3dd,我们查看/dev/disk/by-partuuid/17f23e99-13dc-4a15-827b-745213c5c3dd,如下图:
说明/dev/sdb2被作为日志的分区使用,所以新创建的osd.4默认数据和日志都在同一个磁盘/dev/sdb上不同分区。
2)osd日志被独立到另一个盘
执行ceph-deploy osd create hadoop96:/dev/sdc:/dev/sdd,然后在hadoop96上查看如下图:
进入/var/lib/ceph/osd/ceph-5目录查看
如上图可知日志目录被链接到/dev/disk/by-partuuid/96eb886f-4095-4cb4-90fc-2976a8869cc1,我们查看/dev/disk/by-partuuid/96eb886f-4095-4cb4-90fc-2976a8869cc1,如下图:
说明/dev/sdd1被作为日志的分区使用,所以新创建的osd.5数据在/dev/sdc1,而日志则独立在另一个磁盘的分区/dev/sdd1。
3、删除osd
删除上面创建的osd。
1)数据和日志在同一个磁盘上的osd
将osd.4踢出集群,执行ceph osd out 4
停止此osd进程,执行systemctl stop ceph-osd@4
然后执行:ceph osd crush remove osd.4,此时osd.4已经不再osd tree中了
执行ceph auth del osd.4 和 ceph osd rm 4, 此时删除成功但是原来的数据和日志目录还在,也就是数据还在
此时我们将/dev/sdb1磁盘umount,然后将磁盘进行擦除那么数据就会被完全删除了,执行umount /dev/sdb,然后执行ceph-disk zap /dev/sdb
这时/dev/sdb又成为裸磁盘了,也就相当于彻底删除了osd.4。
2)删除日志被独立到另一个盘的osd
执行步骤和之前类似。
将osd.5踢出集群,执行ceph osd out 5
停止此osd进程,执行systemctl stop ceph-osd@5
然后执行:ceph osd crush remove osd.5,此时osd.5已经不再osd tree中了
执行ceph auth del osd.5和 ceph osd rm 5, 此时删除成功但是原来的数据和日志目录还在,也就是数据还在
此时我们将/dev/sdc1磁盘umount,然后将磁盘进行擦除那么数据就会被完全删除了,执行umount /dev/sdc1,然后执行ceph-disk zap /dev/sdc
这时/dev/sdc又成为裸磁盘了,也就相当于彻底删除了osd.5,但是原来作为日志的分区/dev/sdd1还在,此时如果sdd有多个分区作为其他osd的日志分区那么就不能擦除/dev/sdd盘,但是此时/dev/sdd1分区已经没有被osd使用了所以再创建osd时要记得再利用。