Ceph 細節原理及讀寫流程
Ceph 細節原理
OSD daemon
osd daemon 狀態: 預設每2s彙報自己的狀態給monitor (同時監控組內其他OSD狀態)
-
up
:可以提供IO -
down
:不能提供IO -
in
:有資料 -
out
:沒有資料
PG 的概念
-
epoach
: 單調遞增的版本號,用於資料校驗使用 -
acting set
: OSD 列表,第一個為primary OSD
,其餘的為replicated OSD
-
PG tmp
:當主OSD故障後,monitor
通過CRUSH
找一個OSD頂替,但此OSD中沒有資料,會在副本OSD中臨時當做主的,就是此狀態
當新調過來的主OSD資料同步完成後,恢復正常狀態 -
up set
: 是acting set
過去版本,是出現PG tmp
後,以前的一個版本
PG 中 OSD 組長是如何建立的
如在 副本數為 3 的配置中,一個
PG
中 包含 三個OSD daemon
,也就是三塊硬碟,其中一個是master
,剩下兩個是副本
;
PG
和 OSD daemon
之間的關係,是通過 CRUSH
演算法得出的;常規這三個 OSD daemon
可以在一臺機器上,也可以在不同機器上;那麼根據 CRUSH
CRUSH
演算法來實現的資料平衡;
而 PG
本身是個有序列表,位於第一的位置是 master
;這個列表的產生是由 monitor
來產生的;
- 在
monitor
節點上會執行一個叫PG monitor
的程序; - 定時檢索整個叢集中是否存在新建的儲存池
pool
(這個儲存池其實就一個一堆 PG 的集合
); - 當發現新的
儲存池
時,會繼續檢查儲存池中的 PG 狀態; - 檢查出PG的狀態為新狀態(待建立),該PG會進入一個
creating
的狀態,會把該PG放到建立佇列中 - 之後
monitor
CRUSH
演算法 計算得出 PG 中包含的三個OSD daemon
同時算出組長; - 此時
monitor
會把剛剛計算出來的所有PG
、OSD daemon
的資訊直接發給組長; -
PG
中的OSD daemon
組長收到資訊後,此時組員之間的就知道彼此,這個過程叫做peering
建立連線; - 最終生成
PG
由以上步驟看出,PG
實際是個邏輯單位,PG
的資訊儲存在 crush map
和 OSD daemon
中。
PG 的狀態
ceph -s 命令檢視
-
creating
: 正在建立的狀態 -
peering
: PG內OSD內相互認知的狀態 -
active
: PG內OSD相互認識後,就會處於此狀態,能寫資料,但PG內的OSD相互資料並沒有同步 -
clean
:PG內的的OSD能寫資料,並且所有的OSD的資料已同步 -
stable
:PG 內有OSD在 2s內沒有彙報自己的狀態給monitor -
backfilling
:一個新的OSD被加入到PG組內,正在做全量的資料拷貝 -
recovery
:同PG組內一個OSD與主OSD的資料存在差異被檢測出來,會被改為此狀態,同時進行資料同步
stable
狀態說明:
monitor
一旦發現OSD daemon
沒有彙報狀態,會立即把此OSD daemon
對應的PG組,標記為stable
;
表示該 PG 組內有OSD daemon
在2s
中沒有彙報狀態;如果在300s
內OSD daemon還沒有彙報狀態,此OSD daemon
就會被踢出 對應的PG組;
被踢出後,PG
組內的副本數就變少了,monitor
又會使用CRUSH
演算法重新加入一個新的OSD daemon
加入到PG組中
PG 內 OSD 的資料校驗方式
- HASH 校驗,同PG下的OSD資料進行HASH比較,副本OSD會跟主OSD比較,有區別就會同步主OSD的資料
- 版本號校驗,同PG下的OSD資料每次同步時,都會產生一個版本號,當版本號有差異時,會同步資料
- 資料大小
SIZE
的比較,同PG下的OSD資料直接比較大小,有差異的副本OSD就會同步主OSD的資料
pool:儲存池
提供的功能:
- PG 的邏輯集合
- 副本數,提供資料冗餘性
- CRUSH 規則,PG 是如何 發現 OSD 的
- 儲存池存在使用者許可權
pool 型別:
- 複製型別 一個 PG 中 有多個 OSD
- 糾錯碼型別 分為 k 個 資料塊、M個編碼快,然後進行存放,沒有一個數據存放多份
缺點:1.速度慢 2. 不支援Ceph 所有的操作 ,如:在資料清理是,不支援區域性鎖定清理的功能
Ceph 讀寫流程
目錄
Ceph 細節原理
OSD daemon
osd daemon 狀態: 預設每2s彙報自己的狀態給monitor (同時監控組內其他OSD狀態)
-
up
:可以提供IO -
down
:不能提供IO -
in
:有資料 -
out
:沒有資料
PG 的概念
-
epoach
: 單調遞增的版本號,用於資料校驗使用 -
acting set
: OSD 列表,第一個為primary OSD
,其餘的為replicated OSD
-
PG tmp
:當主OSD故障後,monitor
通過CRUSH
找一個OSD頂替,但此OSD中沒有資料,會在副本OSD中臨時當做主的,就是此狀態
當新調過來的主OSD資料同步完成後,恢復正常狀態 -
up set
: 是acting set
過去版本,是出現PG tmp
後,以前的一個版本
PG 中 OSD 組長是如何建立的
如在 副本數為 3 的配置中,一個
PG
中 包含 三個OSD daemon
,也就是三塊硬碟,其中一個是master
,剩下兩個是副本
;
PG
和 OSD daemon
之間的關係,是通過 CRUSH
演算法得出的;常規這三個 OSD daemon
可以在一臺機器上,也可以在不同機器上;那麼根據 CRUSH
演算法會盡可能的保證一個平衡,就是不在同一個機器上;畢竟Ceph中的資料是一個為平衡的狀態,一切都是通過CRUSH
演算法來實現的資料平衡;
而 PG
本身是個有序列表,位於第一的位置是 master
;這個列表的產生是由 monitor
來產生的;
- 在
monitor
節點上會執行一個叫PG monitor
的程序; - 定時檢索整個叢集中是否存在新建的儲存池
pool
(這個儲存池其實就一個一堆 PG 的集合
); - 當發現新的
儲存池
時,會繼續檢查儲存池中的 PG 狀態; - 檢查出PG的狀態為新狀態(待建立),該PG會進入一個
creating
的狀態,會把該PG放到建立佇列中 - 之後
monitor
再根據CRUSH
演算法 計算得出 PG 中包含的三個OSD daemon
同時算出組長; - 此時
monitor
會把剛剛計算出來的所有PG
、OSD daemon
的資訊直接發給組長; -
PG
中的OSD daemon
組長收到資訊後,此時組員之間的就知道彼此,這個過程叫做peering
建立連線; - 最終生成
PG
由以上步驟看出,PG
實際是個邏輯單位,PG
的資訊儲存在 crush map
和 OSD daemon
中。
PG 的狀態
ceph -s 命令檢視
-
creating
: 正在建立的狀態 -
peering
: PG內OSD內相互認知的狀態 -
active
: PG內OSD相互認識後,就會處於此狀態,能寫資料,但PG內的OSD相互資料並沒有同步 -
clean
:PG內的的OSD能寫資料,並且所有的OSD的資料已同步 -
stable
:PG 內有OSD在 2s內沒有彙報自己的狀態給monitor -
backfilling
:一個新的OSD被加入到PG組內,正在做全量的資料拷貝 -
recovery
:同PG組內一個OSD與主OSD的資料存在差異被檢測出來,會被改為此狀態,同時進行資料同步
stable
狀態說明:
monitor
一旦發現OSD daemon
沒有彙報狀態,會立即把此OSD daemon
對應的PG組,標記為stable
;
表示該 PG 組內有OSD daemon
在2s
中沒有彙報狀態;如果在300s
內OSD daemon還沒有彙報狀態,此OSD daemon
就會被踢出 對應的PG組;
被踢出後,PG
組內的副本數就變少了,monitor
又會使用CRUSH
演算法重新加入一個新的OSD daemon
加入到PG組中
PG 內 OSD 的資料校驗方式
- HASH 校驗,同PG下的OSD資料進行HASH比較,副本OSD會跟主OSD比較,有區別就會同步主OSD的資料
- 版本號校驗,同PG下的OSD資料每次同步時,都會產生一個版本號,當版本號有差異時,會同步資料
- 資料大小
SIZE
的比較,同PG下的OSD資料直接比較大小,有差異的副本OSD就會同步主OSD的資料
pool:儲存池
提供的功能:
- PG 的邏輯集合
- 副本數,提供資料冗餘性
- CRUSH 規則,PG 是如何 發現 OSD 的
- 儲存池存在使用者許可權
pool 型別:
- 複製型別 一個 PG 中 有多個 OSD
- 糾錯碼型別 分為 k 個 資料塊、M個編碼快,然後進行存放,沒有一個數據存放多份
缺點:1.速度慢 2. 不支援Ceph 所有的操作 ,如:在資料清理是,不支援區域性鎖定清理的功能