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操作