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
(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
如果添加的盘上面有分区,可以通过如下命令清除(分区上的数据也会被清除)
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
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
步骤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/
这里磁盘路径是/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已经没有挂载信息
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
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
取消继续进行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操作