Ceph 增加和删除 osd

Ceph 增加和删除 osd

2019/06/04 运维 大数据 Ceph

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可正常使用

Search

    Table of Contents