Jimmy 的文檔 :sheepdog 原理

關於原理介紹大部分是參考的,但和別人略有不同。


Sheepdog,是由NTT的3名日本研究員開發的開源項目,主要用來爲虛擬機提供塊設備。

其架構如下:

 

 

 

下面,我們將從架構、模塊等幾個方面來介紹下:

 

一、架構圖

如上圖:

採用無中心節點的全對稱架構,無單點故障,存儲容量和性能可線性擴展;

新增節點通過簡單配置可自動加入(IP:PORT),數據自動實現負載均衡;

節點故障時,數據可自動恢復;

直接支持QEMU/KVM應用;

 

二、模塊

 

如上圖:

由corosync,完成集羣成員管理和消息傳遞;

由Qemu作爲Sheepdog的客戶端,提供NBD/iSCSI協議支持;

由gateway實現數據的DHT路由,由storage server數據數據本地存儲;

 

三、數據具體存儲方式

 

如上圖:

以VDI Object存儲VM數據,向用戶暴露的是一個塊設備;

包含4種數據對象:VDI、Data Object、屬性對象和用於快照的VM實時狀態數據對象;

以4M的小文件方式實現OBS,但很容易基於此擴展,如使用使用庫替代4M的小文件;


其實個人覺得下面的這個圖更好:




四、集羣管理



1. 採用corosync,tot是em協議的一個開源實現。totem協議主要用來實現集羣成員管理和可靠順序傳輸。

2. corosync通過提供一個CPG API來提供服務。

首先,綁定一個fd到cpg_handle,並註冊回調函數cpg_dispatch;

然後將fd註冊到epoll;

corosync上消息會觸發fd改變,通用epoll觸發回調函數cpg_dispatch;

 

這裏主要有兩個函數,cpg_deliver_fn和cpg_confchg_fn,分別對應sd_deliver和sd_confchg.

 其中,sd_deliver負責集羣從corosync給本地發消息,主要是針對VDI進行操作;而sd_confchg主要是對node進行操作,用來監控集羣成員變化。

 

五、存儲對象管理

集羣對象版本epoch;

obj目錄下,每個新的epoch要對應創建一個新的目錄;

可從epoch恢復數據;

 

六、一致性模型

通過epoll機制保證;

通過數據操作實現強一致性(多副本的寫同時成功時,才向client返回); 

 

七、DHT路由

從字面上理解的dht的意思。




代理路由方式;

由ip:port生成節點編號,做一致性哈希;

 

八、副本放置

一致性哈希;

虛擬節點;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章