中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

分布式存儲 Ceph 中 PG 各種狀態詳解

發布時間:2020-08-14 18:54:13 來源:ITPUB博客 閱讀:321 作者:HitTwice 欄目:服務器

作者:李航 來源:talkwithtrend

原文鏈接: https://mp.weixin.qq.com/s/a3mTVNQWYvMuEz8X_uCRMA


1. PG介紹

分布式存儲 Ceph 中 PG 各種狀態詳解

這次主要來分享Ceph中的PG各種狀態詳解,PG是最復雜和難于理解的概念之一,PG的復雜如下:

分布式存儲 Ceph 中 PG 各種狀態詳解

分布式存儲 Ceph 中 PG 各種狀態詳解

分布式存儲 Ceph 中 PG 各種狀態詳解

- 在架構層次上,PG位于RADOS層的中間。

a. 往上負責接收和處理來自客戶端的請求。

b. 往下負責將這些數據請求翻譯為能夠被本地對象存儲所能理解的事務。

- 是組成存儲池的基本單位,存儲池中的很多特性,都是直接依托于PG實現的。

- 面向容災域的備份策略使得一般而言的PG需要執行跨節點的分布式寫,因此數據在不同節點之間的同步、恢復時的數據修復也都是依賴PG完成。

2. PG狀態表

正常的PG狀態是 100%的active + clean, 這表示所有的PG是可訪問的,所有副本都對全部PG都可用。 如果Ceph也報告PG的其他的警告或者錯誤狀態。PG狀態表:

3. 狀態詳解及故障模擬復現

3.1 Degraded

3.1.1 說明

降級:由上文可以得知,每個PG有三個副本,分別保存在不同的OSD中,在非故障情況下,這個PG是active+clean 狀態,那么,如果PG 的 副本osd.4 掛掉了,這個 PG 是降級狀態。

3.1.2 故障模擬

  • 停止osd.1 $ systemctl stop ceph-osd@1

  • 查看PG狀態 $ bin/ceph pg stat 20 pgs: 20 active+undersized+degraded; 14512 kB data, 302 GB used, 6388 GB / 6691 GB avail; 12/36 objects degraded (33.333%)

  • 查看集群監控狀態

分布式存儲 Ceph 中 PG 各種狀態詳解

  • 客戶端IO操作

故障總結:

為了模擬故障,(size = 3, min_size = 2) 我們手動停止了 osd.1,然后查看PG狀態,可見,它此刻的狀態是active+undersized+degraded,當一個 PG 所在的 OSD 掛掉之后,這個 PG 就會進入undersized+degraded 狀態,而后面的[0,2]的意義就是還有兩個副本存活在 osd.0 和 osd.2 上, 并且這個時候客戶端可以正常讀寫IO。

3.1.3 總結

  • 降級就是在發生了一些故障比如OSD掛掉之后,Ceph 將這個 OSD 上的所有 PG 標記為 Degraded。

  • 降級的集群可以正常讀寫數據,降級的 PG 只是相當于小毛病而已,并不是嚴重的問題。

  • Undersized的意思就是當前存活的PG 副本數為 2,小于副本數3,將其做此標記,表明存貨副本數不足,也不是嚴重的問題。

3.2 Peered

3.2.1 說明

  • Peering已經完成,但是PG當前Acting Set規模小于存儲池規定的最小副本數(min_size)。

3.2.2 故障模擬

a. 停掉兩個副本osd.1,osd.0

$ systemctl stop ceph-osd@1 $ systemctl stop ceph-osd@0

b. 查看集群健康狀態

分布式存儲 Ceph 中 PG 各種狀態詳解

c. 客戶端IO操作(夯住)

讀取對象到文件,夯住IO

$ bin/rados -p test_pool get myobject ceph.conf.old

故障總結:

- 現在pg 只剩下osd.2上存活,并且 pg 還多了一個狀態:peered,英文的意思是仔細看,這里我們可以理解成協商、搜索。

- 這時候讀取文件,會發現指令會卡在那個地方一直不動,為什么就不能讀取內容了,因為我們設置的 min_size=2 ,如果存活數少于2,比如這里的 1 ,那么就不會響應外部的IO請求。

d. 調整min_size=1可以解決IO夯住問題

設置min_size = 1

$ bin/ceph osd pool set test_pool min_size 1 set pool 1 min_size to 1

e. 查看集群監控狀態

分布式存儲 Ceph 中 PG 各種狀態詳解

f. 客戶端IO操作

讀取對象到文件中

$ ll -lh ceph.conf* -rw-r--r-- 1 root root 6.1K Jun 25 14:01 ceph.conf -rw-r--r-- 1 root root 6.1K Jul 3 20:11 ceph.conf.old -rw-r--r-- 1 root root 6.1K Jul 3 20:11 ceph.conf.old.1

故障總結:

- 可以看到,PG狀態Peered沒有了,并且客戶端文件IO可以正常讀寫了。

- 當min_size=1時,只要集群里面有一份副本活著,那就可以響應外部的IO請求。

3.2.3 總結

  • Peered狀態我們這里可以將它理解成它在等待其他副本上線。

  • 當min_size = 2 時,也就是必須保證有兩個副本存活的時候就可以去除Peered這個狀態。

  • 處于 Peered 狀態的 PG 是不能響應外部的請求的并且IO被掛起。

3.3 Remapped

3.3.1 說明

  • Peering完成,PG當前Acting Set與Up Set不一致就會出現Remapped狀態。

3.3.2 故障模擬

a. 停止osd.x

$ systemctl stop ceph-osd@x

b. 間隔5分鐘,啟動osd.x

$ systemctl start ceph-osd@x

c. 查看PG狀態

分布式存儲 Ceph 中 PG 各種狀態詳解

d. 客戶端IO操作

rados讀寫正常

rados -p test_pool put myobject /tmp/test.log

3.3.3 總結

在 OSD 掛掉或者在擴容的時候PG 上的OSD會按照Crush算法重新分配PG 所屬的osd編號。并且會把 PG Remap到別的OSD上去。

Remapped狀態時,PG當前Acting Set與Up Set不一致。

客戶端IO可以正常讀寫。

3.4 Recovery

3.4.1 說明

指PG通過PGLog日志針對數據不一致的對象進行同步和修復的過程。

3.4.2 故障模擬

a. 停止osd.x

$ systemctl stop ceph-osd@x

b. 間隔1分鐘啟動osd.x

osd$ systemctl start ceph-osd@x

c. 查看集群監控狀態

$ ceph health detail HEALTH_WARN Degraded data redundancy: 183/57960 objects degraded (0.316%), 17 pgs unclean, 17 pgs degraded PG_DEGRADED Degraded data redundancy: 183/57960 objects degraded (0.316%), 17 pgs unclean, 17 pgs degraded pg 1.19 is active+recovery_wait+degraded, acting [29,9,17]

3.4.3 總結

Recovery是通過記錄的PGLog進行恢復數據的。

記錄的PGLog 在osd_max_pg_log_entries=10000條以內,這個時候通過PGLog就能增量恢復數據。

3.5 Backfill

3.5.1 說明

  • 當PG的副本無非通過PGLog來恢復數據,這個時候就需要進行全量同步,通過完全拷貝當前Primary所有對象的方式進行全量同步。

3.5.2 故障模擬

a. 停止osd.x

$ systemctl stop ceph-osd@x

b. 間隔10分鐘啟動osd.x

$ osd systemctl start ceph-osd@x

c. 查看集群健康狀態

$ ceph health detail HEALTH_WARN Degraded data redundancy: 6/57927 objects degraded (0.010%), 1 pg unclean, 1 pg degraded PG_DEGRADED Degraded data redundancy: 6/57927 objects degraded (0.010%), 1 pg unclean, 1 pg degraded pg 3.7f is active+undersized+degraded+remapped+backfilling, acting [21,29]

3.5.3 總結

無法根據記錄的PGLog進行恢復數據時,就需要執行Backfill過程全量恢復數據。

如果超過osd_max_pg_log_entries=10000條, 這個時候需要全量恢復數據。

3.6 Stale

3.6.1 說明

  • mon檢測到當前PG的Primary所在的osd宕機。

  • Primary超時未向mon上報pg相關的信息(例如網絡阻塞)。

  • PG內三個副本都掛掉的情況。

3.6.2 故障模擬

a. 分別停止PG中的三個副本osd, 首先停止osd.23

$ systemctl stop ceph-osd@23

b. 然后停止osd.24

$ systemctl stop ceph-osd@24

c. 查看停止兩個副本PG 1.45的狀態

分布式存儲 Ceph 中 PG 各種狀態詳解

d. 在停止PG 1.45中第三個副本osd.10

$ systemctl stop ceph-osd@10

e. 查看停止三個副本PG 1.45的狀態

分布式存儲 Ceph 中 PG 各種狀態詳解

f. 客戶端IO操作

讀寫掛載磁盤IO 夯住

ll /mnt/

故障總結:

先停止同一個PG內兩個副本,狀態是undersized+degraded+peered。

然后停止同一個PG內三個副本,狀態是stale+undersized+degraded+peered。

3.6.3 總結

當出現一個PG內三個副本都掛掉的情況,就會出現stale狀態。

此時該PG不能提供客戶端讀寫,IO掛起夯住。

Primary超時未向mon上報pg相關的信息(例如網絡阻塞),也會出現stale狀態。

3.7 Inconsistent

3.7.1 說明

  • PG通過Scrub檢測到某個或者某些對象在PG實例間出現了不一致

3.7.2 故障模擬

a. 刪除PG 3.0中副本osd.34頭文件

$ rm -rf /var/lib/ceph/osd/ceph-34/current/3.0_head/DIR_0/1000000697c.0000122c__head_19785300__3

b. 手動執行PG 3.0進行數據清洗

$ ceph pg scrub 3.0 instructing pg 3.0 on osd.34 to scrub

c. 檢查集群監控狀態

$ ceph health detail HEALTH_ERR 1 scrub errors; Possible data damage: 1 pg inconsistent OSD_SCRUB_ERRORS 1 scrub errors PG_DAMAGED Possible data damage: 1 pg inconsistent pg 3.0 is active+clean+inconsistent, acting [34,23,1]

d. 修復PG 3.0

分布式存儲 Ceph 中 PG 各種狀態詳解

故障總結:

當PG內部三個副本有數據不一致的情況,想要修復不一致的數據文件,只需要執行ceph pg repair修復指令,ceph就會從其他的副本中將丟失的文件拷貝過來就行修復數據。

3.7.3 故障模擬

  • 當osd短暫掛掉的時候,因為集群內還存在著兩個副本,是可以正常寫入的,但是 osd.34 內的數據并沒有得到更新,過了一會osd.34上線了,這個時候osd.34的數據是陳舊的,就通過其他的OSD 向 osd.34 進行數據的恢復,使其數據為最新的,而這個恢復的過程中,PG的狀態會從inconsistent ->recover -> clean,最終恢復正常。

  • 這是集群故障自愈一種場景。

3.8 Down

3.8.1 說明

Peering過程中,PG檢測到某個不能被跳過的Interval中(例如該Interval期間,PG完成了Peering,并且成功切換至Active狀態,從而有可能正常處理了來自客戶端的讀寫請求),當前剩余在線的OSD不足以完成數據修復.

3.8.2 故障模擬

a. 查看PG 3.7f內副本數

$ ceph pg dump | grep ^3.7f dumped all 3.7f 43 0 0 0 0 494927872 1569 1569 active+clean 2018-07-05 02:52:51.512598 21315'80115 21356:111666 [5,21,29] 5 [5,21,29] 5 21315'80115 2018-07-05 02:52:51.512568 6206'80083 2018-06-29 22:51:05.831219

b. 停止PG 3.7f 副本osd.21

$ systemctl stop ceph-osd@21

c. 查看PG 3.7f狀態

$ ceph pg dump | grep ^3.7f dumped all 3.7f 66 0 89 0 0 591396864 1615 1615 active+undersized+degraded 2018-07-05 15:29:15.741318 21361'80161 21365:128307 [5,29] 5 [5,29] 5 21315'80115 2018-07-05 02:52:51.512568 6206'80083 2018-06-29 22:51:05.831219

d. 客戶端寫入數據,一定要確保數據寫入到PG 3.7f的副本中[5,29]

分布式存儲 Ceph 中 PG 各種狀態詳解

e. 停止PG 3.7f中副本osd.29,并且查看PG 3.7f狀態

分布式存儲 Ceph 中 PG 各種狀態詳解

f. 停止PG 3.7f中副本osd.5,并且查看PG 3.7f狀態

分布式存儲 Ceph 中 PG 各種狀態詳解

g. 拉起PG 3.7f中副本osd.21(此時的osd.21數據比較陳舊), 查看PG狀態(down)

分布式存儲 Ceph 中 PG 各種狀態詳解

h. 客戶端IO操作

此時客戶端IO都會夯住

ll /mnt/

故障總結:

首先有一個PG 3.7f有三個副本[5,21,29], 當停掉一個osd.21之后, 寫入數據到osd.5, osd.29。 這個時候停掉osd.29, osd.5 ,最后拉起osd.21。 這個時候osd.21的數據比較舊,就會出現PG為down的情況,這個時候客戶端IO會夯住,只能拉起掛掉的osd才能修復問題。

3.8.3 結論

  • 典型的場景:A(主)、B、C

1. 首先kill B

2. 新寫入數據到 A、C

3. kill A和C

4. 拉起B

  • 出現PG為Down的場景是由于osd節點數據太舊,并且其他在線的osd不足以完成數據修復。

  • 這個時候該PG不能提供客戶端IO讀寫, IO會掛起夯住。

本文作者:李航,多年的底層開發經驗,在高性能nginx開發和分布式緩存redis cluster有著豐富的經驗,目前從事Ceph工作兩年左右。 先后在58同城、汽車之家、優酷土豆集團工作。 目前供職于滴滴基礎平臺運維部 負責分布式Ceph集群開發及運維等工作。 個人主要關注的技術領域:高性能Nginx開發、分布式緩存、分布式存儲。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南开区| 贵南县| 台中县| 凤阳县| 潮安县| 大安市| 鹿泉市| 郁南县| 镇原县| 扬州市| 佛坪县| 阳高县| 卫辉市| 江油市| 莎车县| 左权县| 青田县| 宜州市| 白银市| 景东| 柏乡县| 桐城市| 无锡市| 会昌县| 淄博市| 双辽市| 岢岚县| 曲松县| 合山市| 浏阳市| 阳原县| 拉孜县| 鸡西市| 安宁市| 南康市| 阿瓦提县| 日照市| 关岭| 丹江口市| 大冶市| 宁晋县|