参考连接:<https://ceph.readthedocs.io/en/latest/rados/deployment/ceph-deploy-osd/>;

1 OSD扩容/缩容

1.1 横向扩容(scale out)

横向扩容:简单的理解,就是增加节点,通过增加节点来达到增加容量的目的

1、部署环境,参见《02 Ceph集群规划及部署mimic》,按照所有标注node节点的执行,包括安装环境准备,用户创建,配置源,安装ceph等;

2、ceph-deploy osd create --data {data-disk} {node-name} 同步配置文件

3、添加OSD

1.2 纵向扩容(scale up)

纵向扩容:通过增加现有节点的硬盘(OSD)来达到增加容量的目的;

(1)确认osd容量情况

[cephuser@cephmanager01 cephcluster]$ sudo ceph -s
[cephuser@cephmanager01 cephcluster]$ sudo ceph osd tree

实战01:OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)

(2) 查看磁盘信息和分区信息

# node节点(osd)查看,本例在cephnode01、cephnode02、cephnode03上需要添加/dev/sdf
[root@cephnode001 ~]# lsblk
[root@cephnode001 ~]# fdisk -l
# manager节点上查看
[cephuser@cephmanager01 cephcluster]$ ceph-deploy disk list cephnode001 cephnode002 cephnode003

实战01:OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)

如果添加的盘上面有分区,可以通过如下命令清除(分区上的数据也会被清除)

ceph-deploy disk zap {osd-server-name} {disk-name}

# 清除cephmanager002上的/dev/sdf1和/dev/sdf2分区
# ceph-deploy disk zap cephmanager002 /dev/sdf1 /dev/sdf2

(3)添加OSD

# 添加cephnode001的/dev/sdf
[cephuser@cephmanager01 cephcluster]$ ceph-deploy osd create --data /dev/sdf cephnode001
# 添加cephnode002的/dev/sdf
[cephuser@cephmanager01 cephcluster]$ ceph-deploy osd create --data /dev/sdf cephnode002
# 添加cephnode003的/dev/sdf
[cephuser@cephmanager01 cephcluster]$ ceph-deploy osd create --data /dev/sdf cephnode003

(4)确认添加结果

[cephuser@cephmanager01 ~]$ sudo ceph -s
[cephuser@cephmanager01 ~]$ sudo ceph osd tree

实战01:OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)

1.3 缩容:删除OSD

​ 删除osd,一般分两种情况,一种情况是服务故障,这个时候重启有故障的osd即可,如下:

[root@cephnode002 ceph]# systemctl restart ceph-osd@5.service

​ 另外一种情况是物理坏块,特别是在即将坏的过程中,对集群性能影响极大,可以通过查看日志和延迟情况来确认,如下.这种情况可以先踢掉故障osd。

[root@cephmanager01 ~]# ceph osd perf

这里以cephnode001上的osd.12为例

步骤1:停止相应OSD服务

此步骤需要在Down掉的OSD所在节点上操作,

[root@cephnode001 ~]# systemctl stop ceph-osd@12

实战01:OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)

步骤2:取消OSD挂载

安装OSD时,会将osd.12挂载至/var/lib/ceph/osd/ceph-12,因此,删除OSD时,需要首先取消OSD挂载

# 查看osd.12的源数据信息
[root@cephnode001 ~]# ceph osd metadata 12 
"bluestore_bdev_partition_path": "/dev/dm-7"
[root@cephnode001 ~]# ll /dev/mapper/*  |grep dm-7
[root@cephnode001 ~]# umount /var/lib/ceph/osd/ceph-12/

实战01:OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)

这里磁盘路径是/dev/sdf

步骤3: 设置OSD为OUT

# 将osd.12的状态设置为out,对应权重reweight会变为0
[cephuser@cephmanager01 cephcluster]$ sudo ceph osd out 12

步骤4:删除OSD

#从集群中删除
[cephuser@cephmanager01 cephcluster]$ sudo ceph osd rm osd.12
# 从CRUSH中删除,然后通过ceph osd crush dump确认没有对应信息
[cephuser@cephmanager01 cephcluster]$ sudo ceph osd crush rm osd.12
# 删除osd.12的认证信息,然后通过ceph auth list确认有没有对应信息
[cephuser@cephmanager01 cephcluster]$ sudo ceph auth del osd.12

步骤5:清空已删除磁盘中的内容

# 确认osd.12已经移除
[cephuser@cephmanager01 cephcluster]$ sudo ceph osd tree
# 清空磁盘中的数据
[root@cephnode001 ~]# wipefs -af /dev/sdf

确认osd.12已经移除,同时/dev/sdf已经没有挂载信息

实战01:OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)

1.4 换盘

可以简单的理解为删除osd(详见1.3)和添加OSD(相见1.2)的过程;

2 REBALANCING数据重平衡

2.1 数据重平衡演示

​ 当有新的osd加入集群或者移除了osd,就会把状态上报给Monitor,Monitor知道了osd map发生了变化就会触发rebalancing,确保pg能够平滑的移动到各个osd上。以pg为整体进行数据重平衡,重平衡的过程中可能会影响性能。一次性加入的osd越多,数据rebalancing就越频繁,业务也可能因此受到影响。生产环境中,强烈建议一次只添加一个osd,最大限度的减少性能和业务的影响。

(1)准备数据文件

# 或者拷贝一些大文件到rbd或者cephfs里面
[root@localhost ~]# cp -r project/ /cephfs
[root@localhost ~]# cp -r project/ /ceph_disk_rbd

(2)添加osd或者删除osd,或者直接停掉单个osd的服务

# 添加cephnode001的/dev/sdf, 由于刚刚我们删除了,这里需要zap一下该磁盘
[cephuser@cephmanager01 cephcluster]$ ceph-deploy disk zap cephnode001 /dev/sdf
[cephuser@cephmanager01 cephcluster]$ ceph-deploy osd create --data /dev/sdf cephnode001
# 确认已经添加进来
[cephuser@cephmanager01 cephcluster]$ sudo ceph osd tree

(3)查看数据平衡情况

# 查看平衡情况
[root@cephmanager01 ~]#  ceph -s

实战01:OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)

2.2 临时关闭rebalance

​ 当在做rebalance的时候,每个osd都会按照osd_max_backfills指定数量的线程来同步,如果该数值比较大,同步会比较快,但是会影响部分性能;另外数据同步时,是走的cluster_network,而客户端连接是用的public_network,生产环境建议这两个网络用万兆网络,较少网络传输的影响;

[root@cephnode001 ~]#  ceph --admin-daemon /var/run/ceph/ceph-osd.12.asok config show |grep max_backfills

​ 同样,为了避免业务繁忙时候rebalance带来的性能影响,可以对rebalance进行关闭;当业务比较小的时候,再打开;

# 设置标志位
[root@cephmanager01 ~]# ceph osd set norebalance
# 关闭数据填充
[root@cephmanager01 ~]# ceph osd set nobackfill

实战01:OSD操作(扩容/缩容/换盘/数据重平衡/数据一致性)

取消继续进行rebalance:

[root@cephmanager01 ~]# ceph osd unset nobackfill
[root@cephmanager01 ~]# ceph osd unset norebalance

3 数据一致性检查

​ ceph会定期去检查指定冗余副本数的数据是否一致。分两种情况检查:

3.1 scrub

​ 比较轻量级的检查,主要检查元数据(metadata )信息,比如文件名、object属性、大小等,如果不一样,就会从主pg复制一份过去。一般每天都会检查。

# 获取pgid
[root@cephmanager01 ~]# ceph pg dump
# 数据一致性检查
[root@cephmanager01 ~]# ceph pg scrub 2.19
# 查看对应的scrub信息
[root@cephmanager01 ~]# ceph -s

3.2 deeper scrubbing

​ 深度一致性检查,主要对比数据内容。数据量比较大的时候,这个检查相对来说比较耗费资源。一般每周检查。

# 深度检查
[root@cephmanager01 ~]# ceph pg deep-scrub 2.19
# 查看对应的scrub信息
[root@cephmanager01 ~]# ceph -s

也可以对所有的pg做deep-scrub操作