DRBD基礎
Distributed Replicated Block Device(DRBD)是一個用軟體實現的、無共享的、伺服器之間鏡像塊設備內容的存儲複製解決方案。
數據鏡像:實時、透明、同步(所有伺服器都成功後返回)、異步(本地伺服器成功後返回)DBRD的核心功能通過Linux的核心實現,最接近系統的IO棧,但它不能神奇地添加上層的功能比如檢測到EXT3檔案系統的崩潰。
DBRD的位置處於檔案系統以下,比檔案系統更加靠近作業系統核心及IO棧。
工具:
drbdadm:高級管理工具,管理/etc/drbd.conf,向drbdsetup和drbdmeta傳送指令,
drbdsetup:配置裝載進kernel的DRBD模組,平時很少直接用
drbdmeta:管理META數據結構,平時很少直接用。
在DRBD中,資源是特指某複製的存儲設備的所有方面。包括資源名稱、DRBD設備(/dev/drbdm,這裡m是設備最小號,最大號可到147)、磁碟配置(使本地數據可以為DRBD所用)、網路配置(與對方通信)
每個資源有個角色,是Primary或Secondary,下面簡稱“主”和“備”
主角色的DRBD設備可以不受限制的讀和寫,比如創建和映射檔案系統、對於塊設備的raw或直接IO訪問。
備角色的DRBD設備接受來自對方的所有修改,但是不能被應用程式讀寫,甚至唯讀也不行。
角色可以改變。
DRBD功能
單主模式:典型的高可靠性集群方案。
復主模式:需要採用共享cluster檔案系統,如GFS和OCFS2。用於需要從2個節點並發訪問數據的場合,需要特別配置。
複製模式:3種模式:
協定A:異步複製協定。本地寫成功後立即返回,數據放在傳送buffer中,可能丟失。
協定B:記憶體同步(半同步)複製協定。本地寫成功並將數據傳送到對方後立即返回,如果雙機掉電,數據可能丟失。
協定C:同步複製協定。本地和對方寫成功確認後返回。如果雙機掉電或磁碟同時損壞,則數據可能丟失。
一般用協定C。選擇協定將影響流量,從而影響網路時延。
有效的同步:按線性而不是當初寫的順序同步塊。同步損壞時間內的不一致數據。
線上的設備檢驗:一端順序計算底層存儲,得到一個數字,傳給另一端,另一端也計算,如果不一致,則稍後進行同步。建議一周或一月一次。
複製過程的一致性檢驗:加密後,對方若不一致則要求重傳。防止網卡、緩衝等問題導致位丟失、覆蓋等錯誤。
Split brain:當網路出現暫時性故障,導致兩端都自己提升為Primary。兩端再次連通時,可以選擇email通知,建議手工處理這種情況。
當數據寫在緩衝區里,沒有真正寫到磁碟上時,系統崩潰會導致數據丟失。而disk flush是指將數據真正寫到磁碟上後才返回。
有些帶電池的硬碟控制器,如帶電池的帶點出Dell PERC Raid卡,不但自帶快取而且自帶電池,會在系統意外斷電或者崩潰後將最後的數據寫入磁碟,對這類控制器,可以使用disk flush,從而在保證性能的前提下提高了數據的安全性。
磁碟錯誤處理策略:
傳遞給上層:可能造成檔案系統remounting成唯讀,不推薦。
對上層禁止:用另一端的相應塊進行讀寫,套用不中斷。可以在任何方便的時候再切換。
不一致的(inconsistent)數據:不能以任何方式訪問和使用的數據。如正在同步時的目標節點數據,這些數據不能識別,不能mount,甚至不能通過磁碟的自動檢測。
過期的(outdated)數據:在備機上的數據,與主機一致,但不需要同步。如主備機網路中斷後,備機上的數據就是過期的。
DRBD有接口允許應用程式在網路中斷時將備機數據標識為過期的。DRBD拒絕將這個節點提升為主角色。這些管理接口在Heartbeat框架上得到完整實現。
一旦過期資源的複製連結恢復,他的過期標誌自動清除,接著進行後台同步。
在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣.因為數據同時存在於本地主機和遠程主機上,
切換時,遠程主機只要使用它上面的那份備份數據,就可以繼續進行服務了.
DRBD的工作原理如下圖:
+--------+ | 檔案系統 | +--------+
|
V
+--------+| 塊設備層 | | (/dev/drbd1) +--------+
| |
V V
| 本地硬碟 | | (/dev/hdb1) | | 遠程主機硬碟 | | (/dev/hdb1) |
關於安裝及配置 ,請看參考連結。