Sheepdog,是由NTT的3名日本研究員開發的開源項目,主要用來為虛擬機提供塊設備。
其架構例如以下:
以下,我們將從架構、模塊等幾個方面來介紹下:
一、架構圖
如上圖:
採用無中心節點的全對稱架構,無單點故障,存儲容量和性能可線性擴展;
新增節點通過簡單配置可自己主動增加(IP:PORT),數據自己主動實現負載均衡;
節點故障時,數據可自己主動恢復;
直接支持QEMU/KVM應用;
二、模塊
如上圖:
由corosync,完畢集群成員管理和消息傳遞;
由Qemu作為Sheepdog的client,提供NBD/iSCSI協議支持;
由gateway實現數據的DHT路由,由storage server數據數據本地存儲;
三、數據詳細存儲方式
如上圖:
以VDI Object存儲VM數據,向用戶暴露的是一個塊設備;
包括4種數據對象:VDI、Data Object、屬性對象和用於快照的VM實時狀態數據對象;
以4M的小文件方式實現OBS,但非常easy基於此擴展,如使用使用庫替代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路由
代理路由方式;
由ip:port生成節點編號,做一致性哈希;
八、副本放置
一致性哈希;
虛擬節點;
如需了解更具體信息,可參考其官網:http://www.osrg.net/sheepdog/