Ceph日常運維管理和排錯 -- <7>


Ceph日常運維管理

集群監控管理

集群整體運行狀態

[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

常用查詢狀態指令

集群狀態:HEALTH_OK,HEALTH_WARN,HEALTH_ERR

[root@ceph2 ~]#    ceph health detail
HEALTH_OK
[root@ceph2 ~]# ceph -s
cluster:
id: 35a91e48-8244-4e96-a7ee-980ab989d20d
health: HEALTH_OK

services:
mon: 3 daemons, quorum ceph2,ceph3,ceph4
mgr: ceph4(active), standbys: ceph2, ceph3
mds: cephfs-1/1/1 up {0=ceph2=up:active}, 1 up:standby
osd: 9 osds: 9 up, 9 in; 32 remapped pgs
rbd-mirror: 1 daemon active

data:
pools: 14 pools, 536 pgs
objects: 220 objects, 240 MB
usage: 1764 MB used, 133 GB / 134 GB avail
pgs: 508 active+clean
28 active+clean+remapped

ceph -w是一樣的,但是出於交互狀態,可以試試更新

集群標志

noup:OSD啟動時,會將自己在MON上標識為UP狀態,設置該標志位,則OSD不會被自動標識為up狀態

​nodown:OSD停止時,MON會將OSD標識為down狀態,設置該標志位,則MON不會將停止的OSD標識為down狀態,設置noup和nodown可以防止網絡抖動

​noout:設置該標志位,則mon不會從crush映射中刪除任何OSD。對OSD作維護時,可設置該標志位,以防止CRUSH在OSD停止時自動重平衡數據。OSD重新啟動時,需要清除該flag

​noin:設置該標志位,可以防止數據被自動分配到OSD上

​norecover:設置該flag,禁止任何集群恢復操作。在執行維護和停機時,可設置該flag

​nobackfill:禁止數據回填

​noscrub:禁止清理操作。清理PG會在短期內影響OSD的操作。在低帶寬集群中,清理期間如果OSD的速度過慢,則會被標記為down。可以該標記來防止這種情況發生

​nodeep-scrub:禁止深度清理

​norebalance:禁止重平衡數據。在執行集群維護或者停機時,可以使用該flag

​pause:設置該標志位,則集群停止讀寫,但不影響osd自檢

​full:標記集群已滿,將拒絕任何數據寫入,但可讀

集群flag狀態操作

只能對整個集群操作,不能針對單個osd

設置為noout狀態:

[root@ceph2 ~]# ceph osd set noout
noout is set
[root@ceph2 ~]# ceph -s
cluster:
id: 35a91e48-8244-4e96-a7ee-980ab989d20d
health: HEALTH_WARN
noout flag(s) set

services:
mon: 3 daemons, quorum ceph2,ceph3,ceph4
mgr: ceph4(active), standbys: ceph2, ceph3
mds: cephfs-1/1/1 up {0=ceph2=up:active}, 1 up:standby
osd: 9 osds: 9 up, 9 in; 32 remapped pgs
flags noout
rbd-mirror: 1 daemon active

data:
pools: 14 pools, 536 pgs
objects: 220 objects, 240 MB
usage: 1764 MB used, 133 GB / 134 GB avail
pgs: 508 active+clean
28 active+clean+remapped

io:
client: 409 B/s rd, 0 op/s rd, 0 op/s wr

取消noout狀態:

[root@ceph2 ~]# ceph osd unset noout
noout is unset
[root@ceph2 ~]# ceph -s
cluster:
id: 35a91e48-8244-4e96-a7ee-980ab989d20d
health: HEALTH_OK

services:
mon: 3 daemons, quorum ceph2,ceph3,ceph4
mgr: ceph4(active), standbys: ceph2, ceph3
mds: cephfs-1/1/1 up {0=ceph2=up:active}, 1 up:standby
osd: 9 osds: 9 up, 9 in; 32 remapped pgs
rbd-mirror: 1 daemon active

data:
pools: 14 pools, 536 pgs
objects: 220 objects, 240 MB
usage: 1764 MB used, 133 GB / 134 GB avail
pgs: 508 active+clean
28 active+clean+remapped

io:
client: 2558 B/s rd, 0 B/s wr, 2 op/s rd, 0 op/s wr

設置為full狀態:

[root@ceph2 ~]# ceph osd set full
full is set
[root@ceph2 ~]# ceph -s
cluster:
id: 35a91e48-8244-4e96-a7ee-980ab989d20d
health: HEALTH_WARN
full flag(s) set

services:
mon: 3 daemons, quorum ceph2,ceph3,ceph4
mgr: ceph4(active), standbys: ceph2, ceph3
mds: cephfs-1/1/1 up {0=ceph2=up:active}, 1 up:standby
osd: 9 osds: 9 up, 9 in; 32 remapped pgs
flags full
rbd-mirror: 1 daemon active

data:
pools: 14 pools, 536 pgs
objects: 220 objects, 240 MB
usage: 1768 MB used, 133 GB / 134 GB avail
pgs: 508 active+clean
28 active+clean+remapped

io:
client: 2558 B/s rd, 0 B/s wr, 2 op/s rd, 0 op/s wr

將指定文件作為對象寫入到資源池 put

[root@ceph2 ~]# rados -p ssdpool put testfull /etc/ceph/ceph.conf
2019-03-27 21:59:14.250208 7f6500913e40 0 client.65175.objecter FULL, paused modify 0x55d690a412b0 tid 0

取消full狀態:

[root@ceph2 ~]# ceph osd unset full
full is unset
[root@ceph2 ~]# ceph -s
cluster:
id: 35a91e48-8244-4e96-a7ee-980ab989d20d
health: HEALTH_OK

services:
mon: 3 daemons, quorum ceph2,ceph3,ceph4
mgr: ceph4(active), standbys: ceph2, ceph3
mds: cephfs-1/1/1 up {0=ceph2=up:active}, 1 up:standby
osd: 9 osds: 9 up, 9 in; 32 remapped pgs
rbd-mirror: 1 daemon active

data:
pools: 14 pools, 536 pgs
objects: 220 objects, 240 MB
usage: 1765 MB used, 133 GB / 134 GB avail
pgs: 508 active+clean
28 active+clean+remapped

io:
client: 409 B/s rd, 0 op/s rd, 0 op/s wr
[root@ceph2 ~]# rados -p ssdpool put testfull /etc/ceph/ceph.conf
[root@ceph2 ~]# rados -p ssdpool ls
testfull
test

PG狀態

查看pg狀態查看通常使用下面兩個命令即可,dump可以查看更詳細信息,如。

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

PG的狀態

Creating:PG正在被創建。通常當存儲池被創建或者PG的數目被修改時,會出現這種狀態

Active:PG處於活躍狀態。可被正常讀寫

Clean:PG中的所有對象都被復制了規定的副本數

Down:PG離線

Replay:當某個OSD異常后,PG正在等待客戶端重新發起操作

Splitting:PG正在初分割,通常在一個存儲池的PG數增加后出現,現有的PG會被分割,部分對象被移動到新的PG

Scrubbing:PG正在做不一致校驗

Degraded:PG中部分對象的副本數未達到規定數目

Inconsistent:PG的副本出現了不一致。如果出現副本不一致,可使用ceph pg repair來修復不一致情況

Peering:Perring是由主OSD發起的使用存放PG副本的所有OSD就PG的所有對象和元數據的狀態達成一致的過程。Peering完成后,主OSD才會接受客戶端寫請求

Repair:PG正在被檢查,並嘗試修改被發現的不一致情況

Recovering:PG正在遷移或同步對象及副本。通常是一個OSD down掉之后的重平衡過程

Backfill:一個新OSD加入集群后,CRUSH會把集群現有的一部分PG分配給它,被稱之為數據回填

Backfill-wait:PG正在等待開始數據回填操作

Incomplete:PG日志中缺失了一關鍵時間段的數據。當包含PG所需信息的某OSD不可用時,會出現這種情況

Stale:PG處理未知狀態。monitors在PG map改變后還沒收到過PG的更新。集群剛啟動時,在Peering結束前會出現該狀態

Remapped:當PG的acting set變化后,數據將會從舊acting set遷移到新acting set。新主OSD需要一段時間后才能提供服務。因此這會讓老的OSD繼續提供服務,直到PG遷移完成。在這段時間,PG狀態就會出現Remapped

管理stuck(卡住)的狀態PG

如果PG長時間(mon_pg_stuck_threshold,默認為300s)出現如下狀態時,MON會將該PG標記為stuck:

inactive:pg有peering問題

unclean:pg在故障恢復時遇到問題

stale:pg沒有任何OSD報告,可能其所有的OSD都是down和out

undersized:pg沒有充足的osd來存儲它應具有的副本數

默認情況下,Ceph會自動執行恢復,但如果未成自動恢復,則集群狀態會一直處於HEALTH_WARN或者HEALTH_ERR

如果特定PG的所有osd都是down和out狀態,則PG會被標記為stale。要解決這一情況,其中一個OSD必須要重生,且具有可用的PG副本,否則PG不可用

Ceph可以聲明osd或PG已丟失,這也就意味着數據丟失。

需要說明的是,osd的運行離不開journal,如果journal丟失,則osd停止

stuck的狀態pg操作

檢查處於stuck狀態的pg:

[root@ceph2 ceph]# ceph pg  dump_stuck
ok
PG_STAT STATE         UP    UP_PRIMARY ACTING ACTING_PRIMARY 
17.5    stale+peering [0,2]          0  [0,2]              0 
17.4    stale+peering [2,0]          2  [2,0]              2 
17.3    stale+peering [2,0]          2  [2,0]              2 
17.2    stale+peering [2,0]          2  [2,0]              2 
17.1    stale+peering [0,2]          0  [0,2]              0 
17.0    stale+peering [2,0]          2  [2,0]              2 
17.1f   stale+peering [2,0]          2  [2,0]              2 
17.1e   stale+peering [0,2]          0  [0,2]              0 
17.1d   stale+peering [2,0]          2  [2,0]              2 
17.1c   stale+peering [0,2]          0  [0,2]              0 
[root@ceph2 ceph]# ceph osd blocked-by
osd num_blocked 
  0          19 
  2          13 

檢查導致pg一致阻塞在peering狀態的osd:

ceph osd blocked-by

檢查某個pg的狀態:

ceph pg dump |grep pgid

聲明pg丟失:

ceph pg pgid mark_unfound_lost revert|delete

聲明osd丟失(需要osd狀態為down且out):

ceph osd lost osdid --yes-i-really-mean-it

Pool狀態

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

限制Pool配置更改

主要過程

禁止池被刪除

osd_pool_default_flag_nodelete

禁止池的pg_num和pgp_num被修改

osd_pool_default_flag_nopgchange

禁止修改池的size和min_size

osd_pool_default_flag_nosizechang
實驗操作
[root@ceph2 ~]# ceph daemon osd.0  config show|grep osd_pool_default_flag
  "osd_pool_default_flag_hashpspool": "true",
  "osd_pool_default_flag_nodelete": "false",
  "osd_pool_default_flag_nopgchange": "false",
  "osd_pool_default_flag_nosizechange": "false",
  "osd_pool_default_flags": "0",
[root@ceph2 ~]# ceph tell osd.* injectargs --osd_pool_default_flag_nodelete true
[root@ceph2 ~]# ceph daemon osd.0 config show|grep osd_pool_default_flag
  "osd_pool_default_flag_hashpspool": "true",
  "osd_pool_default_flag_nodelete": "true",
  "osd_pool_default_flag_nopgchange": "false",
  "osd_pool_default_flag_nosizechange": "false",
  "osd_pool_default_flags": "0",
[root@ceph2 ~]# ceph osd pool delete ssdpool  ssdpool yes-i-really-really-mean-it
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool ssdpool.  If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.   #不能刪除

改為false

[root@ceph2 ~]# ceph tell osd.* injectargs --osd_pool_default_flag_nodelete false
[root@ceph2 ~]# ceph daemon osd.0 config show|grep osd_pool_default_flag
"osd_pool_default_flag_hashpspool": "true",
"osd_pool_default_flag_nodelete": "true",                   #依然顯示為ture
"osd_pool_default_flag_nopgchange": "false",
"osd_pool_default_flag_nosizechange": "false",
"osd_pool_default_flags": "0"
使用配置文件修改

在ceph1上修改

osd_pool_default_flag_nodelete false
[root@ceph1 ~]# ansible all -m copy -a 'src=/etc/ceph/ceph.conf dest=/etc/ceph/ceph.conf owner=ceph group=ceph mode=0644'
[root@ceph1 ~]# ansible mons -m shell -a ' systemctl restart ceph-mon.target'
[root@ceph1 ~]# ansible mons -m shell -a ' systemctl restart ceph-osd.target'
[root@ceph2 ~]# ceph daemon osd.0 config show|grep osd_pool_default_flag
"osd_pool_default_flag_hashpspool": "true",
"osd_pool_default_flag_nodelete": "false",
"osd_pool_default_flag_nopgchange": "false",
"osd_pool_default_flag_nosizechange": "false",
 "osd_pool_default_flags": "0",

刪除ssdpool

[root@ceph2 ~]# ceph osd pool delete ssdpool ssdpool --yes-i-really-really-mean-it

成功刪除!!!

OSD狀態

~]$ ceph osd stat
~]$ ceph osd status
~]$ 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子命令來完成此需求。

查看運行配置

命令格式:
# 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

添加OSD

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

刪除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 的管理命令。

查看用戶信息

查看所有用戶信息
# ceph auth list
獲取所有用戶的key與權限相關信息
# ceph auth get client.admin
如果只需要某個用戶的key信息,可以使用pring-key子命令
# ceph auth print-key client.admin 

添加用戶

# 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

修改用戶權限

# 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 ' '

刪除用戶

# 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 個。

新增一個monitor

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

刪除Monitor

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

Ceph故障排除

nearfull osd(s) or pool(s) nearfull

此時說明部分osd的存儲已經超過閾值,mon會監控ceph集群中OSD空間使用情況。如果要消除WARN,可以修改這兩個參數,提高閾值,但是通過實踐發現並不能解決問題,可以通過觀察osd的數據分布情況來分析原因。

配置文件設置閾值

  "mon_osd_full_ratio": "0.95",
  "mon_osd_nearfull_ratio": "0.85"
,

自動處理

ceph osd reweight-by-utilization
ceph osd reweight-by-pg 105 cephfs_data(pool_name)

手動處理:

ceph osd reweight osd.2 0.8

全局處理

ceph mgr module ls
ceph mgr module enable balancer
ceph balancer on
ceph balancer mode crush-compat
ceph config-key set "mgr/balancer/max_misplaced": "0.01"

PG 故障狀態

PG狀態概述
一個PG在它的生命周期的不同時刻可能會處於以下幾種狀態中:

Creating(創建中)
在創建POOL時,需要指定PG的數量,此時PG的狀態便處於creating,意思是Ceph正在創建PG。

Peering(互聯中)
peering的作用主要是在PG及其副本所在的OSD之間建立互聯,並使得OSD之間就這些PG中的object及其元數據達成一致。

Active(活躍的)
處於該狀態意味着數據已經完好的保存到了主PG及副本PG中,並且Ceph已經完成了peering工作。

Clean(整潔的)
當某個PG處於clean狀態時,則說明對應的主OSD及副本OSD已經成功互聯,並且沒有偏離的PG。也意味着Ceph已經將該PG中的對象按照規定的副本數進行了復制操作。

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。

Recovering(恢復中)
當某個OSD因為某些原因down了,該OSD內PG的object會落后於它所對應的PG副本。而在該OSD重新up之后,該OSD中的內容必須更新到當前狀態,處於此過程中的PG狀態便是recovering。

Backfilling(回填)
當有新的OSD加入集群時,CRUSH會把現有集群內的部分PG分配給它。這些被重新分配到新OSD的PG狀態便處於backfilling。

Remapped(重映射)
當負責維護某個PG的acting set變更時,PG需要從原來的acting set遷移至新的acting set。這個過程需要一段時間,所以在此期間,相關PG的狀態便會標記為remapped。

Stale(陳舊的)
默認情況下,OSD守護進程每半秒鍾便會向Monitor報告其PG等相關狀態,如果某個PG的主OSD所在acting set沒能向Monitor發送報告,或者其他的Monitor已經報告該OSD為down時,該PG便會被標記為stale。

OSD狀態

單個OSD有兩組狀態需要關注,其中一組使用in/out標記該OSD是否在集群內,另一組使用up/down標記該OSD是否處於運行中狀態。兩組狀態之間並不互斥,換句話說,當一個OSD處於“in”狀態時,它仍然可以處於up或down的狀態。

OSD狀態為in且up
這是一個OSD正常的狀態,說明該OSD處於集群內,並且運行正常。

OSD狀態為in且down
此時該OSD尚處於集群中,但是守護進程狀態已經不正常,默認在300秒后會被踢出集群,狀態進而變為out且down,之后處於該OSD上的PG會遷移至其它OSD。

OSD狀態為out且up
這種狀態一般會出現在新增OSD時,意味着該OSD守護進程正常,但是尚未加入集群。

OSD狀態為out且down
在該狀態下的OSD不在集群內,並且守護進程運行不正常,CRUSH不會再分配PG到該OSD上。

關於Ceph的一些參考

參考1:https://my.oschina.net/diluga/blog/1501203#h4_6 (詳解了Ceph上線的注意事項和日志維護須知,並沒有命令,是最終要的架構概念)

參考2:http://www.zphj1987.com/tag/server/ (ceph工程師博客)

參考3:https://www.cnblogs.com/hukey/p/11899710.html


免責聲明!

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



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