Ceph之osd擴容和換盤


一、osd擴容

1.1 osd橫向擴容(scale out)

簡單理解,橫向擴容就是通過增加節點來達到增加容量的目的,大概操作流程如下:

  • 參考 [部署ceph集群 (Nautilus版)](https://lvjianzhao.gitee.io/lvjianzhao/2021/02/21/部署ceph Nautilus版/#more) 對新節點進行初始化、配置yum源、時間同步,安裝基礎工具,集群間的主機名互相可解析,ceph-deploy節點可以免密登錄到新節點等操作。
  • 執行命令 ceph-deploy osd create --data {data-disk} {node-name} 同步配置文件
  • ceph -s 查看集群狀態,如果無誤,添加osd完成。

1.2 osd縱向擴容(scale up)

縱向擴容:通過增加現有節點的硬盤(OSD)來達到增加容量的目的。

1.2.1 清理磁盤數據

如果目標磁盤有分區表,請執行下列命令進行刪除分區信息,對應的數據也將會被刪除。

$ ceph-deploy disk zap ceph-node-11 /dev/sdc
# 后面跟的是節點名稱 磁盤名稱
1.2.2 加入新的osd
$ ceph-deploy osd create ceph-node-11 --data /dev/sdc
1.2.3 確認ods已擴容
$ ceph -s
  cluster:
    id:     b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-node-11,ceph-node-12,ceph-node-13 (age 3h)
    mgr: ceph-node-11(active, since 3h), standbys: ceph-node-12, ceph-node-13
    mds: cephfs-demo:1 {0=ceph-node-11=up:active} 2 up:standby
    osd: 4 osds: 4 up (since 6m), 4 in (since 6m)     # 已經增加一個osd
    rgw: 1 daemon active (ceph-node-11)
 
  task status:
    scrub status:
        mds.ceph-node-11: idle
 
  data:
    pools:   9 pools, 288 pgs
    objects: 222 objects, 8.3 KiB
    usage:   4.1 GiB used, 396 GiB / 400 GiB avail
    pgs:     6.944% pgs unknown
             268 active+clean
             20  unknown

1.3 ceph osd數據重新分布

當有新的osd加入集群或者移除了osd,就會把狀態上報給Monitor,Monitor知道了osd map發生了變化就會觸發rebalancing,確保pg能夠平滑的移動到各個osd上。以pg為整體進行數據重平衡,重平衡的過程中可能會影響性能。一次性加入的osd越多,數據rebalancing就越頻繁,業務也可能因此受到影響。生產環境中,強烈建議一次只添加一個osd,最大限度的減少性能和業務的影響。

20210620194218

1.3.1 臨時關閉rebalance

當在做rebalance的時候,每個osd都會按照osd_max_backfills指定數量的線程來同步,如果該數值比較大,同步會比較快,但是會影響部分性能;另外數據同步時,是走的cluster_network,而客戶端連接是用的public_network,生產環境建議這兩個網絡用萬兆網絡,較少網絡傳輸的影響!

$ ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | grep max_backfills       
    "osd_max_backfills": "1",  # osd_max_backfills默認還是比較小的

同樣,為了避免業務繁忙時候rebalance帶來的性能影響,可以對rebalance進行關閉;當業務比較小的時候,再打開:

$ ceph osd set norebalance    # 設置標志位

$ ceph osd set nobackfill    # 關閉數據填充

$ ceph -s      # 查看集群狀態
  cluster:
    id:     b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
    health: HEALTH_WARN
            nobackfill,norebalance flag(s) set
 # 有此信息
1.3.2 開啟rebalance
$ ceph osd unset nobackfill
$ ceph osd unset norebalance

$ ceph -s   # 確認集群狀態為ok
  cluster:
    id:     b5ae2882-7ec6-46cd-b28e-6d7527e5deb3
    health: HEALTH_OK

二、osd縮容

當osd對應的硬件磁盤設備損壞或者其他情況,我們需要將磁盤對應的osd剔除集群,進行維護。那么應該怎么做呢?

$ ceph osd perf      # 檢查磁盤延遲
osd commit_latency(ms) apply_latency(ms) 
  3                  0                 0 
  2                  0                 0 
  1                  0                 0 
  0                  0                 0
  
# 如果磁盤有壞道,那么其延遲可能會很高
# 嚴重的話,會影響我們整個ceph集群的性能,故需要剔除出去

$ systemctl stop ceph-osd@4   # 停掉一個osd守護進程

$ ceph osd tree  # 其狀態為down,表示不可用
ID CLASS WEIGHT  TYPE NAME             STATUS REWEIGHT PRI-AFF 
-1       0.39075 root default                                  
-3       0.19537     host ceph-node-11                         
 0   hdd 0.09769         osd.0             up  1.00000 1.00000 
 3   hdd 0.09769         osd.3           down  1.00000 1.00000 
-5       0.09769     host ceph-node-12                         
 1   hdd 0.09769         osd.1             up  1.00000 1.00000 
-7       0.09769     host ceph-node-13                         
 2   hdd 0.09769         osd.2             up  1.00000 1.00000 

2.1 剔除osd節點

$ ceph osd out osd.3      # 從crush map中移除osd

$ ceph osd tree    # down掉的節點權重已變為 0
ID CLASS WEIGHT  TYPE NAME             STATUS REWEIGHT PRI-AFF 
-1       0.39075 root default                                  
-3       0.19537     host ceph-node-11                         
 0   hdd 0.09769         osd.0             up  1.00000 1.00000 
 3   hdd 0.09769         osd.3           down        0 1.00000 
-5       0.09769     host ceph-node-12                         
 1   hdd 0.09769         osd.1             up  1.00000 1.00000 
-7       0.09769     host ceph-node-13                         
 2   hdd 0.09769         osd.2             up  1.00000 1.00000 
 
$ ceph osd crush remove osd.3   # 移除
# 經過上面操作后,已經刪除了
# 但執行 ceph osd tree 命令還可以查看到該osd,需要執行如下指令進行刪除
$ ceph osd rm osd.3

# 刪除認證信息
$ ceph auth list | grep -A 4 osd.3   # 查看是否還有其認證信息
installed auth entries:

osd.3
	key: AQCAJ89gtihHMhAAjOWdLs+otDICt2EkV6uG4A==
	caps: [mgr] allow profile osd
	caps: [mon] allow profile osd
	caps: [osd] allow *
     
$ ceph auth rm osd.3   # 刪除認證信息
updated
$ ceph auth list | grep -A 4 osd.4   # 確認已刪除
installed auth entries:

至此,osd剔除集群完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM