天天看點

5.5 ceph 叢集狀态說明

1 叢集監控管理

1.1 叢集整體運作狀态
1 檢視叢集狀态
可以快速了解 Ceph 叢集的 clusterID,health狀況,以及 monitor、OSD、PG 的 map 概況。
[root@ceph-deploy my-cluster]# ceph -s
  cluster:
   id:     14912382-3d84-4cf2-9fdb-eebab12107d8
   health: HEALTH_OK

  services:
   mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03 (age 21m)
   mgr: ceph-node01(active, since 21m), standbys: ceph-node03, ceph-node02
   osd: 6 osds: 6 up (since 21m), 6 in (since 4w)

  data:
   pools:   1 pools, 1 pgs
   objects: 0 objects, 0 B
   usage:   6.0 GiB used, 114 GiB / 120 GiB avail
   pgs:     1 active+clean
    
注: 參數說明
id       # 叢集ID
health   # 叢集運作狀态。
mon     # Monitors運作狀态。
mgr     # Managers運作狀态。
osd     # OSDs運作狀态。
pools   # 存儲池與PGs的數量。
objects  # 存儲對象的數量。
usage   # 存儲的理論用量。
pgs     # PGs的運作狀态
​
2 觀看實時群集狀态更改
[root@ceph-deploy my-cluster]# ceph -w
​
3 檢視叢集健康狀态
如果叢集處于健康狀态,會輸出 HEALTH_OK,如果輸出 HEALTH_WARN 甚至 HEALTH_ERR,表明 Ceph 處于一個不正常狀态,可以加上"detail"選
項幫助排查問題。
[root@ceph-deploy my-cluster]# ceph health detail
HEALTH_OK      
1.2 PG狀态

檢視pg狀态通常使用下面兩個指令即可,dump可以檢視更詳細資訊,如

[root@ceph-deploy my-cluster]# ceph pg stat
1 pgs: 1 active+clean; 0 B data, 35 MiB used, 114 GiB / 120 GiB avail
​
PG狀态概述: 一個 PG 在它的生命周期的不同時刻可能會處于以下幾種狀态中
(1) Creating(建立中)
在建立 POOL 時,需要指定 PG 的數量,此時 PG 的狀态便處于 creating,意思是 Ceph 正在建立 PG。
(2) Peering(互聯中)
peering 的作用主要是在 PG 及其副本所在的 OSD 之間建立互聯,并使得 OSD 之間就這些 PG 中的 object 及其中繼資料達成一緻。
(3) Active(活躍的)
處于該狀态意味着資料已經完好的儲存到了主 PG 及副本 PG 中,并且 Ceph 已經完成了 peering 工作。
(4) Clean(整潔的)
當某個 PG 處于 clean 狀态時,則說明對應的主 OSD 及副本 OSD 已經成功互聯,并且沒有偏離的PG。也意味着 Ceph 已經将該 PG 中的對象按
照規定的副本數進行了複制操作。
(5) Degraded(降級的)
當某個 PG 的副本數未達到規定個數時,該 PG 便處于 degraded 狀态,例如,在用戶端向主 OSD 寫入 object 的過程,object 的副本是由主
OSD 負責向副本 OSD 寫入的,直到副本 OSD 在建立 object 副本完成,并向主 OSD 發出完成資訊前,該 PG 的狀态都會一直處于 degraded 
狀态。又或者是某個 OSD 的狀态變成了 down,那麼該 OSD 上的所有 PG 都會被标記為 degraded。當 Ceph 因為某些原因無法找到某個 PG 内
的一個或多個 object 時,該 PG 也會被标記為 degraded 狀态。此時用戶端不能讀寫找不到的對象,但是仍然能通路位于該 PG 内的其他object。
(6) Recovering(恢複中)
當某個 OSD 因為某些原因 down 了,該 OSD 内 PG 的 object 會落後于它所對應的 PG 副本。而在該 OSD 重新 up 之後,該 OSD 中的内容
必須更新到目前狀态,處于此過程中的 PG 狀态便是 recovering。
(7) Backfilling(回填)
當有新的 OSD 加入叢集時,CRUSH 會把現有叢集内的部分 PG 配置設定給它。這些被重新配置設定到新 OSD 的 PG 狀态便處于 backfilling。
(8) Remapped(重映射)
當負責維護某個 PG 的 acting set 變更時,PG 需要從原來的 acting set 遷移至新的 acting set。這個過程需要一段時間,是以在此期間,相
關 PG 的狀态便會标記為 remapped。
(9) Stale(陳舊的)
預設情況下,OSD 守護程序每半秒鐘便會向 Monitor 報告其 PG 等相關狀态,如果某個 PG 的主 OSD 所在 acting set 沒能向 Monitor 發送
報告,或者其他的 Monitor 已經報告該 OSD 為 down 時,該 PG 便會被标記為stale。
​
​
# 擷取狀态不正常的 PG 的狀态,可以使用如下指令
[root@ceph-deploy ~]# ceph pg dump_stuck inactive|unclean|stale|undersized|degraded [--format <format>]
​
# 擷取叢集裡 PG 的統計資訊
[root@ceph-deploy my-cluster]# ceph pg dump      

圖示:

5.5 ceph 叢集狀态說明
1.3 Pool狀态
[root@ceph-deploy my-cluster]# ceph osd pool stats
pool device_health_metrics id 1
  nothing is going on      
1.4 OSD狀态
[root@ceph-deploy my-cluster]# ceph osd stat
6 osds: 6 up (since 44m), 6 in (since 4w); epoch: e45
​
# 檢視 OSD 在叢集布局中的設計分布
[root@ceph-deploy my-cluster]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME             STATUS  REWEIGHT  PRI-AFF
-1         0.11691  root default                                   
-3         0.03897     host ceph-node01                           
 0   hdd  0.01949         osd.0             up   1.00000  1.00000
 1   hdd  0.01949         osd.1             up   1.00000  1.00000
-5         0.03897     host ceph-node02                           
 2   hdd  0.01949         osd.2             up   1.00000  1.00000
 3   hdd  0.01949         osd.3             up   1.00000  1.00000
-7         0.03897     host ceph-node03                           
 4   hdd  0.01949         osd.4             up   1.00000  1.00000
 5   hdd  0.01949         osd.5             up   1.00000  1.00000
​
# 檢視 OSD 容量的使用情況
[root@ceph-deploy my-cluster]# ceph osd df
ID  CLASS  WEIGHT   REWEIGHT  SIZE     RAW USE  DATA     OMAP   META     AVAIL   %USE  VAR   PGS  STATUS
 0   hdd  0.01949   1.00000   20 GiB  1.0 GiB  5.8 MiB   1 KiB  1024 MiB   19 GiB  5.03  1.00   1     up
 1   hdd  0.01949   1.00000   20 GiB  1.0 GiB  5.8 MiB   4 KiB  1024 MiB   19 GiB  5.03  1.00   0     up
 2   hdd  0.01949   1.00000   20 GiB  1.0 GiB  5.8 MiB   4 KiB  1024 MiB   19 GiB  5.03  1.00   0     up
 3   hdd  0.01949   1.00000   20 GiB  1.0 GiB  5.8 MiB   1 KiB  1024 MiB   19 GiB  5.03  1.00   1     up
 4   hdd  0.01949   1.00000   20 GiB  1.0 GiB  5.8 MiB   4 KiB  1024 MiB   19 GiB  5.03  1.00   0     up
 5   hdd  0.01949   1.00000   20 GiB  1.0 GiB  5.8 MiB   1 KiB  1024 MiB   19 GiB  5.03  1.00   1     up
                       TOTAL  120 GiB  6.0 GiB   34 MiB  19 KiB   6.0 GiB  114 GiB  5.03                   
MIN/MAX VAR: 1.00/1.00  STDDEV: 0
​
# 檢視 OSD 的 dump 概況,OSD dump 輸出的條目較多,基本可以分為三個部分:
(1) 輸出 OSDmap 資訊,包括版本号、叢集ID 以及 map 相關的時間。
(2) POOL 的相關資訊,包括 POOL ID、POOL名稱、副本數、最小副本數、ruleset ID 等資訊。
(3) 列出所有 OSD 的狀态等資訊,包括 OSD ID、狀态、狀态版本記錄以及被監聽的 IP 位址及端口等資訊。
​
[root@ceph-deploy my-cluster]# ceph osd dump      
5.5 ceph 叢集狀态說明
OSD 狀态說明:
單個 OSD 有兩組狀态需要關注,其中一組使用 in/out 标記該 OSD 是否在叢集内,另一組使用 up/down 标記該 OSD 是否處于運作中狀态。兩組
狀态之間并不互斥,換句話說,當一個 OSD 處于 in 狀态時,它仍然可以處于 up 或 down 的狀态。REWEIGHT(0 <=> out,1 <=> in)。
(1) OSD 狀态為 in 且 up
這是一個 OSD 正常的狀态,說明該 OSD 處于叢集内,并且運作正常。
(2) OSD 狀态為 in 且 down
此時該 OSD 尚處于叢集中,但是守護程序狀态已經不正常,預設在 300 秒後會被踢出叢集,狀态進而變為 out 且 down,之後處于該 OSD 上的 PG
會遷移至其它 OSD。當重新啟動 osd 程序後,該 osd 會被加入到 ceph 叢集中。
(3) OSD 狀态為 out 且 up
這種狀态一般會出現在新增 OSD 時,意味着該 OSD 守護程序正常,但是尚未加入叢集。
(4) OSD 狀态為 out 且 down
在該狀态下的 OSD 不在叢集内,并且守護程序運作不正常,CRUSH 不會再配置設定 PG 到該 OSD 上。      
1.5 Monitor狀态和檢視仲裁狀态
[root@ceph-deploy my-cluster]# ceph mon stat
[root@ceph-deploy my-cluster]# ceph mon dump
# ceph叢集中mon的仲裁狀态
[root@ceph-deploy my-cluster]# ceph quorum_status      
5.5 ceph 叢集狀态說明
1.6 叢集空間用量
[root@ceph-deploy ~]# ceph df
--- RAW STORAGE ---
CLASS  SIZE     AVAIL   USED   RAW USED  %RAW USED
hdd   120 GiB  114 GiB  38 MiB   6.0 GiB       5.03
TOTAL  120 GiB  114 GiB  38 MiB   6.0 GiB       5.03

--- POOLS ---
POOL                   ID  PGS  STORED  OBJECTS  USED  %USED  MAX AVAIL
device_health_metrics   1   1     0 B       0   0 B     0     36 GiB
​
[root@ceph-deploy my-cluster]# ceph df
--- RAW STORAGE ---
CLASS  SIZE     AVAIL   USED     RAW USED  %RAW USED
hdd   160 GiB  148 GiB  3.9 GiB   12 GiB       7.41
TOTAL  160 GiB  148 GiB  3.9 GiB   12 GiB       7.41

--- POOLS ---
POOL                   ID  PGS  STORED   OBJECTS  USED     %USED  MAX AVAIL
device_health_metrics   1   1     0 B       0     0 B     0     46 GiB
cephfs_data             2   64  1.2 GiB     302  3.5 GiB   2.48     46 GiB
cephfs_metadata         3   16  182 KiB       23  2.1 MiB     0     46 GiB
​
參數說明:
輸出的 RAW STORAGE 段顯示了資料所占用叢集存儲空間概況。
SIZE           # 叢集的總容量
AVAIL         # 叢集的總空閑容量
RAW USED       # 已用存儲空間總量
%RAW USED     # 已用存儲空間百分比
​
輸出的POOLS段展示了存儲池清單及各存儲池的大緻使用率。
POOL           # 存儲池名
ID             # 存儲池唯一辨別符
PGS           # 存儲池内的 pg 數量
STORED         # 不包含副本數的存儲使用容量
OBJECTS       # 存儲池内的 object 個數
USED           # 包含副本數的存儲使用容量
%USED         # 存儲池的使用率 = STORED / MAX AVAIL
MAX AVAIL     # 不包含副本數的存儲池的最大可用空間
​
[root@ceph-deploy my-cluster]# ceph df detail      
5.5 ceph 叢集狀态說明

2 叢集配置管理(臨時和全局,服務平滑重新開機)

有時候需要更改服務的配置,但不想重新開機服務,或者是臨時修改。這時候就可以使用tell和daemon子指令來完成此需求。

2.1 檢視運作配置
指令格式:
# ceph daemon {daemon-type}.{id} config show
​
指令舉例(在角色所在的主機上進行操作):
[root@ceph-node01 ~]# ceph daemon osd.0 config show      
2.2 tell子指令格式

使用 tell 的方式适合對整個叢集進行設定,使用 * 号進行比對就可以對整個叢集的角色進行設定,當出現節點異常無法設定的時候,隻會在指令

行當中進行報錯,不太便于查找。

指令格式:
# ceph tell {daemon-type}.{daemon id or *} injectargs --{name}={value} [--{name}={value}]
​
注: 參數說明
daemon-type  # 要操作的對象類型如osd、mon、mds等。
daemon id   # 該對象的名稱,osd通常為0、1等,mon為"ceph -s"顯示的名稱,這裡可以輸入'*'表示全部。
injectargs   # 表示參數注入,後面必須跟一個參數,也可以跟多個。
​
指令舉例:
[root@ceph-deploy my-cluster]# ceph tell osd.0 injectargs --debug-osd 20 --debug-ms 1
{}
​
[root@ceph-node01 ~]# ceph daemon osd.0 config show | egrep 'debug_osd|debug_ms'
"debug_ms": "1/1",
"debug_osd": "20/20",      
2.3 daemon子指令

使用 daemon 進行設定的方式就是一個個的去設定,這樣可以比較好的回報,此方法是

需要在設定的角色所在的主機上進行設定

指令格式:
# ceph daemon {daemon-type}.{id} config set {name}={value}
​
指令舉例:
[root@ceph-node01 ~]# ceph daemon mon.ceph-node01 config set mon_allow_pool_delete false
{
   "success": "mon_allow_pool_delete = 'false' "
}      

3 叢集操作

指令包含start(啟動服務)、stop(停止服務)、restart(重新開機服務)、status(服務狀态)、enable(預設服務開機自啟動)

、disable(伺服器開機不自啟動),需要在角色所在的主機上進行操作。

3.1 啟動所有守護程序
[root@ceph-node01 ~]# systemctl start ceph.target      
3.2 按類型啟動守護程序
[root@ceph-node01 ~]# systemctl start ceph-mgr.target
# 根據osd編号啟動osd服務(一個osd程序對應一塊硬碟,一個節點上可以有多個osd)
[root@ceph-node01 ~]# systemctl start [email protected]
[root@ceph-node01 ~]# systemctl start ceph-mon.target
[root@ceph-node01 ~]# systemctl start ceph-mds.target
[root@ceph-node01 ~]# systemctl start ceph-radosgw.target