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
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
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
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
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 ceph-osd@id.service
[root@ceph-node01 ~]# systemctl start ceph-mon.target
[root@ceph-node01 ~]# systemctl start ceph-mds.target
[root@ceph-node01 ~]# systemctl start ceph-radosgw.target