nginx Android shell 微软 Ubuntu Firefox linux 开源 google Python mysql 云计算 Windows apache wordpress php java 编程 centos 程序员

《高性能Linux服務器構建實戰:系統安全、故障排查、自動化運維與集群架構》——第3章 數據安全工具DRBD、extundelete 3.1 數據鏡像軟件DRBD介紹

第3章 數據安全工具DRBD、extundelete

3.1 數據鏡像軟件DRBD介紹

分布式塊設備復制(Distributed Replicated Block Device,DRBD),是一種基於軟件的、基於網絡的塊復制存儲解決方案,主要用於對服務器之間的磁盤、分區、邏輯卷等進行數據鏡像。當用戶將數據寫入本地磁盤時,還會將數據發送到網絡中另一臺主機的磁盤上,這樣本地主機(主節點)與遠程主機(備節點)的數據就可以保證實時同步,當本地主機出現問題,遠程主機上還保留著一份相同的數據,可以繼續使用,保證了數據的安全。
3.1.1 DRBD的基本功能
DRBD的核心功能就是數據的鏡像,其實現方式是通過網絡來鏡像整個磁盤設備或磁盤分區,將一個節點的數據通過網絡實時地傳送到另一個遠程節點,保證兩個節點間數據的一致性,這有點類似於一個網絡RAID1的功能。對於DRDB數據鏡像來說,它具有如下特點:
實時性。當應用對磁盤數據有修改操作時,數據復制立即發生。
透明性。應用程序的數據存儲在鏡像設備上是透明和獨立的。數據可以存儲在基於網絡的不同服務器上。
同步鏡像。當本地應用申請寫操作時,同時也在遠程主機上開始進行寫操作。
異步鏡像。當本地寫操作已經完成時,才開始對遠程主機進行寫操作。
3.1.2 DRBD的構成
DRBD是Linux內核存儲層中的一個分布式存儲系統,具體來說由兩部分構成,一部分是內核模板,主要用於虛擬一個塊設備;一部分是用戶空間管理程序,主要用於和DRBD內核模塊通信,以管理DRBD資源。在DRBD中,資源主要包含DRBD設備、磁盤配置、網絡配置等。
一個DRBD系統有兩個以上節點構成,分為主用節點和備用節點兩個角色,在主用節點上,可以對DRBD設備進行不受限制的讀寫操作,可以用來初始化、創建、掛載文件系統。在備用節點上,DRBD設備無法掛載,只能用來接收主用節點發送過來的數據,也就是說備用節點不能用於讀寫訪問,這樣做的目的是保證數據緩沖區的一致性。
主用節點和備用節點不是固定不變的,可以通過手工方式改變節點的角色,備用節點可以升級為主用節點,同時主用節點也可以降級為備用節點。
DRBD設備在整個DRBD系統中位於物理塊設備之上,文件系統之下,在文件系統和物理磁盤之間形成了一個中間層,當用戶在主用節點的文件系統中寫入數據時,數據被正式寫入磁盤前會被DRBD系統截獲,同時,DRBD在捕捉到有磁盤寫入的操作時,就會通知用戶空間管理程序把這些數據復制一份,寫入遠程主機的DRBD鏡像,然後存入DRBD鏡像所映射的遠程主機磁盤。圖3-1詳細展示了DRBD系統的運行結構。

image

DRBD負責接收數據,把數據寫到本地磁盤,然後發送給另一臺主機。另一臺主機再將數據存到自己的磁盤中。目前,DRBD每次只允許對一個節點進行讀寫訪問,這對於通常的故障切換高可用性集群來講已經足夠用了。以後的版本將支持兩個節點進行讀寫存取。
3.1.3 DRBD與現在的集群的關系
DRBD由兩個或兩個以上節點構成,與HA集群類似,也有主用節點和備用節點之分,因而經常用於高可用集群和負載均衡集群系統中作為共享存儲設備。由於DRBD系統是在ip網絡中運行,所以,在集群中使用DRBD作為共享存儲設備,不需要任何硬件投資,可以節約很多成本,因為在價格上IP網絡要比專用的存儲網絡更經濟。
另外,DRBD也可以用於數據備份、數據容災等方面。
3.1.4 DRBD的主要特性
DRBD系統在實現數據鏡像方面有很多有用的特性,我們可以根據自己的需要和應用環境,選擇適合自己的功能特性。下面依次介紹DRBD幾個非常重要的應用特性。
1 . 單主模式
這是使用最頻繁的一種模式,主要用在高可用集群的數據存儲方面,解決集群中數據共享的問題,在這種模式下,集群中只有一個主用節點可以對數據進行讀寫操作,可以用在這種模式下的文件系統有ext3、ext4、xfs等。
2 . 雙主模式
這種模式只能在DRBD8.0以後的版本中使用,主要用在負載均衡集群中,解決數據共享和一致性問題。在這種模式下,集群中存在兩個主用節點,由於兩個主用節點都有可能對數據進行並發的讀寫操作,因此單一的文件系統就無法滿足需求了,此時就需要共享的集群文件系統來解決並發讀寫問題。常用在這個模式下的文件系統有GFS、OCFS2等,通過集群文件系統的分布式鎖機制就可以解決集群中兩個主用節點同時操作數據的問題。
3 . 復制模式
DRBD提供了三種不同的復制方式,分別是:
協議A,只要本地磁盤寫入已經完成,數據包已經在發送隊列中,則認為一個寫操作過程已經完成。
這種方式在遠程節點故障或者網絡故障時,可能造成數據丟失,因為要寫入到遠程節點的數據可能還在發送隊列中。
協議B,只要本地磁盤寫入已經完成,並且數據包已經到達遠程節點,則認為一個寫操作過程已經完成。
這種方式在遠程節點發生故障時,可能造成數據丟失。
協議C,只有本地和遠程節點的磁盤已經都確認了寫操作完成,則認為一個寫操作過程已經完成。
這種方式沒有任何數據丟失,就目前而言應用最多、最廣泛的就是協議C,但在此方式下磁盤的I/O吞吐量依賴於網絡帶寬。建議在網絡帶寬較好的情況下使用這種方式。
4 . 傳輸完整性校驗
這個特性在DRBD8.2.0及以後版本中可以使用,DRBD使用MD5、SHA-1或CRC-32C等加密算法對信息進行終端到終端的完性驗證。利用這個特性,DRBD對每一個復制到遠程節點的數據都生成信息摘要,同時,遠端節點也采用同樣的方式對復制的數據塊進行完整性驗證,如果驗證信息不對,就請求主節點重新發送。通過這種方式保證鏡像數據的完整性和一致性。
5 . 腦裂通知和自動修復
由於集群節點間的網絡連接臨時故障、集群軟件管理幹預或者人為錯誤,導致DRBD兩個節點都切換為主用節點而斷開連接,這就是DRBD的腦裂問題。發生腦裂意味著數據不能從主用節點復制到備用節點,這樣會導致DRDB兩個節點的數據不一致,並且無法合並。
在DRBD8.0及更高版本,實現了裂腦自動修復功能,在DRBD8.2.1之後,又實現了裂腦通知特性,在出現腦裂後,一般建議通過手工方式修復腦裂問題,為了徹底解決腦裂問題。在某些情況下腦裂自動修復還是比較可取的,DRBD自動修復腦裂的策略如下:
丟棄比較新的主用節點所做的修改。在這種模式下,當網絡重新建立連接並且發現了腦裂後,DRBD會丟棄自動切換到主用節點上的主機所修改的數據。
丟棄老的主用節點所做的修改。在這種模式下,DRBD會丟棄首先切換到主用節點上的主機所修改的數據。
丟棄修改比較少的主用節點的修改。在這種模式下,DRBD會首先檢查兩個節點的數據,然後丟棄修改比較少的主機上的數據。
一個節點數據沒有發生變化的情況下完美修復腦裂。在這種模式下,如果其中一臺主機在發生裂腦時沒有發生數據修改,那麽就可以完美解決腦裂問題。

延伸阅读

评论