Ceph 細節原理及讀寫流程


Ceph 細節原理

OSD daemon

osd daemon 狀態: 默認每2s匯報自己的狀態給monitor (同時監控組內其他OSD狀態)

  1. up :可以提供IO
  2. down :不能提供IO
  3. in :有數據
  4. 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,剩下兩個是 副本

PGOSD daemon 之間的關系,是通過 CRUSH 算法得出的;常規這三個 OSD daemon 可以在一台機器上,也可以在不同機器上;那么根據 CRUSH 算法會盡可能的保證一個平衡,就是不在同一個機器上;畢竟Ceph中的數據是一個為平衡的狀態,一切都是通過CRUSH 算法來實現的數據平衡;

PG 本身是個有序列表,位於第一的位置是 master;這個列表的產生是由 monitor 來產生的;

  1. monitor 節點上會運行一個叫 PG monitor 的進程;
  2. 定時檢索整個集群中是否存在新建的存儲池pool(這個存儲池其實就一個一堆 PG 的集合);
  3. 當發現新的 存儲池 時,會繼續檢查存儲池中的 PG 狀態;
  4. 檢查出PG的狀態為新狀態(待創建),該PG會進入一個creating 的狀態,會把該PG放到創建隊列中
  5. 之后 monitor 再根據 CRUSH 算法 計算得出 PG 中包含的三個 OSD daemon 同時算出組長;
  6. 此時 monitor 會把剛剛計算出來的所有 PGOSD daemon 的信息直接發給組長;
  7. PG 中的 OSD daemon 組長收到信息后,此時組員之間的就知道彼此,這個過程叫做 peering 建立連接;
  8. 最終生成PG

由以上步驟看出,PG 實際是個邏輯單位,PG 的信息保存在 crush mapOSD 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 daemon2s 中沒有匯報狀態;如果在300s內OSD daemon還沒有匯報狀態,此 OSD daemon 就會被踢出 對應的PG組;
被踢出后,PG組內的副本數就變少了,monitor 又會使用 CRUSH 算法重新加入一個新的 OSD daemon 加入到PG組中

PG 內 OSD 的數據校驗方式

  1. HASH 校驗,同PG下的OSD數據進行HASH比較,副本OSD會跟主OSD比較,有區別就會同步主OSD的數據
  2. 版本號校驗,同PG下的OSD數據每次同步時,都會產生一個版本號,當版本號有差異時,會同步數據
  3. 數據大小SIZE 的比較,同PG下的OSD數據直接比較大小,有差異的副本OSD就會同步主OSD的數據

pool:存儲池

提供的功能:

  1. PG 的邏輯集合
  2. 副本數,提供數據冗余性
  3. CRUSH 規則,PG 是如何 發現 OSD 的
  4. 存儲池存在用戶權限

pool 類型:

  1. 復制類型 一個 PG 中 有多個 OSD
  2. 糾錯碼類型 分為 k 個 數據塊、M個編碼快,然后進行存放,沒有一個數據存放多份
    缺點:1.速度慢 2. 不支持Ceph 所有的操作 ,如:在數據清理是,不支持局部鎖定清理的功能

Ceph 讀寫流程


免責聲明!

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



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