Ceph 增加和删除 osd

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时要记得再利用。

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值