ZK(zookeeper)盤:是個開源軟件。3個ZK盤和MDC構成了FusionStorage的集群管理軟件,管理VBS和OSD的心跳,將視圖信息(OSD view,IO view,Partision view)保存在ZK盤中。而且,一旦在ZK盤中的r視圖與其它盤中的視圖產生沖突,以ZK盤存放的元數據為主。
ZK盤:server端(為MDC提供選主機制,來保證MDC元數據的可靠性)
MDC:client端(1、MDC的搶主機機制是通過ZK來實現的。
2、ZK保存MDC的元數據,MDC啟動時讀取的元數據是通過ZK來讀取的
3、如果ZK集群是好的,MDC只要有一個是活的就可以正常工作,如果ZK集群掛了,MDC也不能正常工作。
4、MDC之間的數據是會互相同步的。
)
MDC:管理元數據、分布式規則、數據重建規則、
OSD:具體的落盤規則
VBS:是將IO轉化成轉化成FS能夠識別的key/value模式,給OSD。
ZK是投票選主,
MDC是注冊選主,
就是誰先向ZK注冊,誰就是主MDC
OSD是由MDC指定誰是主OSD,因為MDC會生成一個partition視圖(保存的是主備OSD的狀態),而且partition視圖是緩存在OSD里面的。
IO視圖也是由MDC生成的。作用是:partition視圖對應的OSD的關系,將如何去找到數據落到那一塊盤中。IO視圖緩存在VBS里面的。
下圖表示的是三個視圖的組成的成分:
IO視圖的信息不會經過MDC,MDC只是負責計算IO視圖(即當上層將IO視圖發送到VBS,VBS應該將該IO視圖發送給哪一個OSD),這個IO視圖在VBS和OSD本地也會保存一份。如果OSD故障的話,那么IO視圖就會發生變化。MDC就會修改IO視圖,將IO視圖同步給VBS,VBS拿到IO視圖之后,會將自己的IO引流到另一個副本。
partision視圖是主備復制的重要環節,OSD收到IO后,會根據這個partision對應的副本在哪個OSD上,並發送復制請求給備副本所在的OSD。partision視圖信息都是由MDC來維護的。
OSD視圖記錄了OSD id和其對應的關系,例如UP/DOWN,OSD狀態發生變化后先更新OSD 視圖,在更新Partision 視圖。
MDC是采用一主兩備的部署方式。當MDC模塊進程啟動后,會主動的向ZK注冊選主,首先注冊的會成為第一個主MDC。在MDC的運行過程中,ZK記錄MDC主備信息,並且通過心跳機制去監控MDC的正常狀態。一旦,主MDC故障,會觸發MDC重新選主機制。
主MDC和其他MDC互相監控心跳,一旦某個MDC故障后,主MDC將會決定誰來接替。其他MDC監控到主MDC故障,就會和ZK互動升任主MDC。
OSD如何找到歸屬MDC?
當OSD開始工作的時候,向MDC去查詢歸屬MDC,查詢到了,就向歸屬MDC報告狀態,歸屬MDC把狀態發送給VBS,