Sheepdog,是由NTT的3名日本研究員開發的開源項目,主要用來爲虛擬機提供塊設備。 node
其架構以下: 架構
下面,咱們將從架構、模塊等幾個方面來介紹下: 負載均衡
1、架構圖 函數
如上圖: 性能
採用無中心節點的全對稱架構,無單點故障,存儲容量和性能可線性擴展; spa
新增節點經過簡單配置可自動加入(IP:PORT),數據自動實現負載均衡; .net
節點故障時,數據可自動恢復; 代理
直接支持QEMU/KVM應用; server
2、模塊 對象
如上圖:
由corosync,完成集羣成員管理和消息傳遞;
由Qemu做爲Sheepdog的客戶端,提供NBD/iSCSI協議支持;
由gateway實現數據的DHT路由,由storage server數據數據本地存儲;
3、數據具體存儲方式
如上圖:
以VDI Object存儲VM數據,向用戶暴露的是一個塊設備;
包含4種數據對象:VDI、Data Object、屬性對象和用於快照的VM實時狀態數據對象;
以4M的小文件方式實現OBS,但很容易基於此擴展,如使用使用庫替代4M的小文件;
4、集羣管理
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進行操做,用來監控集羣成員變化。
5、存儲對象管理
集羣對象版本epoch;
obj目錄下,每一個新的epoch要對應建立一個新的目錄;
可從epoch恢復數據;
6、一致性模型
經過epoll機制保證;
經過數據操做實現強一致性(多副本的寫同時成功時,才向client返回);
7、DHT路由
代理路由方式;
由ip:port生成節點編號,作一致性哈希;
8、副本放置
一致性哈希;
虛擬節點;
如需瞭解更詳細信息,可參考其官網:http://www.osrg.net/sheepdog/