1. 程式人生 > 其它 >7、Ceph日常運維管理.md

7、Ceph日常運維管理.md

一、叢集監控管理

叢集整體執行狀態

[root@cephnode01 ~]# ceph -s 
cluster:
    id:     8230a918-a0de-4784-9ab8-cd2a2b8671d0
    health: HEALTH_WARN
            application not enabled on 1 pool(s)
 
  services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 27h)
    mgr: cephnode01(active, since 53m), standbys: cephnode03, cephnode02
    osd: 4 osds: 4 up (since 27h), 4 in (since 19h)
    rgw: 1 daemon active (cephnode01)
 
  data:
    pools:   6 pools, 96 pgs
    objects: 235 objects, 3.6 KiB
    usage:   4.0 GiB used, 56 GiB / 60 GiB avail
    pgs:     96 active+clean
id:叢集ID
health:叢集執行狀態,這裡有一個警告,說明是有問題,意思是pg數大於pgp數,通常此數值相等。
mon:Monitors執行狀態。
osd:OSDs執行狀態。
mgr:Managers執行狀態。
mds:Metadatas執行狀態。
pools:儲存池與PGs的數量。
objects:儲存物件的數量。
usage:儲存的理論用量。
pgs:PGs的執行狀態
~]$ ceph -w
~]$ ceph health detail

PG狀態

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

~]$ ceph pg dump
~]$ ceph pg stat

Pool狀態

~]$ ceph osd pool stats
~]$ ceph osd pool stats 

OSD狀態

~]$ ceph osd stat
~]$ ceph osd dump
~]$ ceph osd tree
~]$ ceph osd df

Monitor狀態和檢視仲裁狀態

~]$ ceph mon stat
~]$ ceph mon dump
~]$ ceph quorum_status

叢集空間用量

~]$ ceph df
~]$ ceph df detail

二、叢集配置管理(臨時和全域性,服務平滑重啟)

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

1、檢視執行配置

命令格式:
# ceph daemon {daemon-type}.{id} config show 

命令舉例:
# ceph daemon osd.0 config show 

2、tell子命令格式

使用 tell 的方式適合對整個叢集進行設定,使用 * 號進行匹配,就可以對整個叢集的角色進行設定。而出現節點異常無法設定時候,只會在命令行當中進行報錯,不太便於查詢。

命令格式:
# ceph tell {daemon-type}.{daemon id or *} injectargs --{name}={value} [--{name}={value}]
命令舉例:
# ceph tell osd.0 injectargs --debug-osd 20 --debug-ms 1

  • daemon-type:為要操作的物件型別如osd、mon、mds等。
  • daemon id:該物件的名稱,osd通常為0、1等,mon為ceph -s顯示的名稱,這裡可以輸入*表示全部。
  • injectargs:表示引數注入,後面必須跟一個引數,也可以跟多個

3、daemon子命令

使用 daemon 進行設定的方式就是一個個的去設定,這樣可以比較好的反饋,此方法是需要在設定的角色所在的主機上進行設定。

命令格式:
# ceph daemon {daemon-type}.{id} config set {name}={value}
命令舉例:
# ceph daemon mon.ceph-monitor-1 config set mon_allow_pool_delete false

三、叢集操作

命令包含start、restart、status

1、啟動所有守護程序
# systemctl start ceph.target
2、按型別啟動守護程序
# systemctl start ceph-mgr.target
# systemctl start ceph-osd@id
# systemctl start ceph-mon.target
# systemctl start ceph-mds.target
# systemctl start ceph-radosgw.target

四、新增和刪除OSD

1、新增OSD

1、格式化磁碟
ceph-volume lvm zap /dev/sd<id>
2、進入到ceph-deploy執行目錄/my-cluster,新增OSD
# ceph-deploy osd create --data /dev/sd<id> $hostname

2、刪除OSD

1、調整osd的crush weight為 0
ceph osd crush reweight osd.<ID> 0.0
2、將osd程序stop
systemctl stop ceph-osd@<ID>
3、將osd設定out
ceph osd out <ID>
4、立即執行刪除OSD中資料
ceph osd purge osd.<ID> --yes-i-really-mean-it
5、解除安裝磁碟
umount /var/lib/ceph/osd/ceph-?

五、擴容PG

ceph osd pool set {pool-name} pg_num 128
ceph osd pool set {pool-name} pgp_num 128 

注:
1、擴容大小取跟它接近的2的N次方
2、在更改pool的PG數量時,需同時更改PGP的數量。PGP是為了管理placement而存在的專門的PG,它和PG的數量應該保持一致。如果你增加pool的pg_num,就需要同時增加pgp_num,保持它們大小一致,這樣叢集才能正常rebalancing。

六、Pool操作

列出儲存池

ceph osd lspools

建立儲存池

命令格式:
# ceph osd pool create {pool-name} {pg-num} [{pgp-num}]
命令舉例:
# ceph osd pool create rbd  32 32

設定儲存池配額

命令格式:
# ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}]
命令舉例:
# ceph osd pool set-quota rbd max_objects 10000

刪除儲存池

ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]

重新命名儲存池

ceph osd pool rename {current-pool-name} {new-pool-name}

檢視儲存池統計資訊

rados df

給儲存池做快照

ceph osd pool mksnap {pool-name} {snap-name}

刪除儲存池的快照

ceph osd pool rmsnap {pool-name} {snap-name}

獲取儲存池選項值

ceph osd pool get {pool-name} {key}

調整儲存池選項值

ceph osd pool set {pool-name} {key} {value}
size:設定儲存池中的物件副本數,詳情參見設定物件副本數。僅適用於副本儲存池。
min_size:設定 I/O 需要的最小副本數,詳情參見設定物件副本數。僅適用於副本儲存池。
pg_num:計算資料分佈時的有效 PG 數。只能大於當前 PG 數。
pgp_num:計算資料分佈時使用的有效 PGP 數量。小於等於儲存池的 PG 數。
hashpspool:給指定儲存池設定/取消 HASHPSPOOL 標誌。
target_max_bytes:達到 max_bytes 閥值時會觸發 Ceph 沖洗或驅逐物件。
target_max_objects:達到 max_objects 閥值時會觸發 Ceph 沖洗或驅逐物件。
scrub_min_interval:在負載低時,洗刷儲存池的最小間隔秒數。如果是 0 ,就按照配置檔案裡的 osd_scrub_min_interval 。
scrub_max_interval:不管叢集負載如何,都要洗刷儲存池的最大間隔秒數。如果是 0 ,就按照配置檔案裡的 osd_scrub_max_interval 。
deep_scrub_interval:“深度”洗刷儲存池的間隔秒數。如果是 0 ,就按照配置檔案裡的 osd_deep_scrub_interval 。

獲取物件副本數

ceph osd dump | grep 'replicated size'

七、使用者管理

Ceph 把資料以物件的形式存於各儲存池中。Ceph 使用者必須具有訪問儲存池的許可權才能夠讀寫資料。另外,Ceph 使用者必須具有執行許可權才能夠使用 Ceph 的管理命令。

1、檢視使用者資訊

檢視所有使用者資訊
# ceph auth list
獲取所有使用者的key與許可權相關資訊
# ceph auth get client.admin
如果只需要某個使用者的key資訊,可以使用pring-key子命令
# ceph auth print-key client.admin 

2、新增使用者

# ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'
# ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'
# ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
# ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key

3、修改使用者許可權

# ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool'
# ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool'
# ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'
# ceph auth caps client.ringo mon ' ' osd ' '

4、刪除使用者

# ceph auth del {TYPE}.{ID}
其中, {TYPE} 是 client,osd,mon 或 mds 的其中一種。{ID} 是使用者的名字或守護程序的 ID 。

八、增加和刪除Monitor

一個叢集可以只有一個 monitor,推薦生產環境至少部署 3 個。 Ceph 使用 Paxos 演算法的一個變種對各種 map 、以及其它對叢集來說至關重要的資訊達成共識。建議(但不是強制)部署奇數個 monitor 。Ceph 需要 mon 中的大多數在執行並能夠互相通訊,比如單個 mon,或 2 箇中的 2 個,3 箇中的 2 個,4 箇中的 3 個等。初始部署時,建議部署 3 個 monitor。後續如果要增加,請一次增加 2 個。

1、新增一個monitor

# ceph-deploy mon create $hostname
注意:執行ceph-deploy之前要進入之前安裝時候配置的目錄。/my-cluster

2、刪除Monitor

# ceph-deploy mon destroy $hostname
注意: 確保你刪除某個 Mon 後,其餘 Mon 仍能達成一致。如果不可能,刪除它之前可能需要先增加一個。