一、drbd簡介
分佈式的塊設備
基於軟件的不共享任何東西的分佈式複製存儲解決方案,而這種解決方案是通過鏡像兩個塊設備中的內容來實現的.而這兩個塊設備是位於不同的主機上
塊設備可以是一個磁盤、分區、甚至可以是一個邏輯卷
drbd在實現數據鏡像的時候,有以下三個特點
1.實時的
2.透明的
3.數據傳輸過程可以做到同步或者異步,也可以做成半同步
一般做成同步性能最差,但安全性最佳。默認情況是做主從模式。不能解決文件系統鎖的問題
drbd是工作在內核當中的。類似於一種驅動模塊
他工作的位置在文件系統的buffer cache和磁盤調度器之間
通過tcp/ip發給另外一臺主機到對方的tcp/ip最終發送給對方的drbd,再由對方的drbd存在本地對應磁盤上
因爲drbd是工作在內核當中,所以我們要對內核進行打補丁。
不過在2.6.33內核之後已經被做進內核當中了
如果做成drbd當本地一個進程往磁盤寫入數據的時候他在什麼情況下會認爲數據寫入完成?
他要不要等待在另外一臺主機寫入完成才認爲是完成呢?
這取決於數據傳輸模式 同步 異步 半同步
異步指的是當數據寫到磁盤上,並且複製的數據已經被放到我們的tcp緩衝區並等待發送以後 就認爲寫入完成
半同步指的是數據已經寫到磁盤上,並且這些數據已經發送到對方內存緩衝區,對方的tcp已經收到數據,並宣佈寫入
同步指的是主節點已寫入,從節點磁盤也寫入
官方的drbd介紹
1.drbd是兩段式的 用戶空間和管理工具
內核空間有內核模塊
用戶空間的管理工具就是drbdadm還有drbdsetup和drbdmeta
對於drbd的resources來說resources就是誰跟誰的鏡像關係,而且這個resources還有名字
關聯某一個特定的drbd設備的相關所有屬性的定義就是resources
1.資源名只能使用純ascii碼 而且不能使用空白字符 用於表示資源名稱
2.所關聯的兩個設備是誰,至少要關聯兩個設備,這個設備是drbd管理的,主設備號是147,次設備號從0開始
因此在一組主機上,drbd的設備的設備名稱就在/dev/drbdN,這個N通常給他的次設備號表示一致。
這個設備號是系統自動分配的
3.磁盤配置信息通常指的是兩個磁盤之間在複製數據的時候最高速率是多大,是不是在數據傳輸的時候進行加密或者簽名.
這些都叫磁盤配置信息或者傳輸屬性.
最重要的是磁盤配置的源數據在什麼地方
4.網絡配置主要用於確保drbd雙主機通訊的時候是否加密,是否簽名,使用多大帶寬.
在drbd配置當中用的最多的是數據源在哪.
resources roles
資源的角色
在主從架構中是不是就有角色了,在某一時刻只能有一個是主的,因爲是主從架構
每一個資源在主從架構當中都有這樣角色
在所有設爲primary的資源將不受限制進行讀寫操作。可以創建文件系統,可以使用裸設備,甚至直接io
在所有設爲secondary的設備中不能掛載,不能讀寫
drbd也有drbd mode 一種是單主模型(主從) 一種叫雙主模型
drbd只有在8.0以後的版本才支持雙主模型
在單主模型下drbd可以使用任意的文件系統
單在雙主模型下只能使用集羣文件系統
開源的集羣文件系統
1.ocfs2
2.gfs2
複製模型就是傳輸模式 同步 異步 半同步
他的複製模型是靠protocol關鍵字來定義的
protocol A表示異步
protocol B表示半同步
protocol C表示同步
默認爲protocol C
在同步模式下只有兩塊磁盤纔會導致數據丟失
在半同步模式下只有主掛了,從服務器停電了 同時 纔會導致數據丟失
drbd的主不會監控從的狀態 所以有可能會造成數據重傳
腦裂的問題
主從聯繫不上了 從也認爲自己變成主的了
最後又恢復了 就可能會出現腦裂
drbd腦裂恢復策略
丟棄最近一次變爲主的,以原來爲主
丟棄設置爲主的,以新的爲準
以誰修改的最少,來保證數據。
二、安裝
drbd安裝和常見高可用集羣安裝一樣
通常使用主機名來訪問對方主機
而且主機名要和uname -n一直
如果純粹使用drbd的話他本身並不依賴於高可用集羣
只不過在高可用集羣當中時候的時候它被定義爲一種資源
如果純粹使用的話 需要手動切換
關於drbd版本
在linux 2.6.33以後的版本中,drbd已經集成到內核中
目前在用的drbd主要8.0 8.2 8.3 三個版本,對應的rpm包是drbd,drbd82和drbd83,因此需要安裝對應的內核模塊,對應的名字爲kmod-drbd,kmod-drbd82,kmod-drbd83.
個版本的功能和配置略有差異我們這裏用的是centos 5.4和x86的系統
我們這裏使用的是drbd83-8.3.13和kmod-drbd83-8.3.13
下載地址爲http://mirror.centos.org/centos/5/extras/i386/RPMS/
注意版本一定要一致 同時drbd83-8.3.13可能需要升級內核到2.6.18-308.8.2.el5
測試環境
1.本次測試有兩個節點,分別爲web01和web02對於的ip爲192.168.0.11和192.168.0.22
2.web01和web02兩個節點各提供了一個大小相同的分區作爲drbd設備;大小爲20g
3.系統爲CentOS 5.4 x86
注意請修改/etc/hosts裏面對應的主機名稱和ip
配置drbd
drbd的主配置文件爲/etc/drbd.conf;默認安裝完之後是空的,但是給了一個樣例複製一下就可以了.爲了管理的便捷性,目前通常會將這些配置文件分成多個部分,並且都保存在/etc/drbd.d/目錄中,主配置文件僅使用
"include"指令將這些配置文件片段整合起來。通常/etc/drbd.d目錄中的配置文件爲global_common.conf和所有以.res結尾的文件,其中global_common.conf
中主要定義global段和common段,而每一個.res的文件用於定義一個資源.
在配置文件中global段只能出現一次,如果所有的配置信息都保存至同一個配置中而不分開爲多個文件的話,global段必須位於配置文件的最開始處.
目前global段可以定義的參數僅有 minor-count,dialog-refresh,disable-ip-verification和usage-count。
common段則用於定義被每一個資源默認繼承的參數,可以在資源定義中使用的參數都可以在common中定義,實際應用中,common段並非必須,但建議將
多個資源共享的參數定義爲common段中的參數以降低配置文件的複雜度。
resource段則用於定義drbd資源,每個資源通常定義在一個單獨的位於/etc/drbd.d目錄中的以.res結尾的文件中。資源在定義時必須爲其命名,名字可以
由非空白的ascii字符組成。每個資源段的定義中至少要包含兩個host字段,以定義此資源關聯至的節點,其他參數均可以從common段或者drbd的默認中進行繼承
而無需定義.
下面開始安裝和配置
1.查看主機名 [root@web01 soft]# vim /etc/hosts 192.168.0.11 web01 192.168.0.22 web02 [root@web02 soft]# vim /etc/hosts 192.168.0.11 web01 192.168.0.22 web02 下面開始安裝drbd node1: [root@web01 soft]# yum --nogpgcheck -y localinstall *.rpm 配置文件主配置文件爲/etc/drbd.conf 複製樣例文件 [root@web01 ~]# cp /usr/share/doc/drbd83-8.3.13/drbd.conf /etc/drbd.conf [root@web01 ~]# cd /etc/drbd.d/ [root@web01 drbd.d]# vim global_common.conf usage-count yes;是否記錄drbd次數,如果沒用就改爲no protocol C;同步模式 默認同步.A表示異步,B表示半同步 handlers處理方式 local-io-error 本地io有問題的時候怎麼辦 after-resync-target 重傳之前怎麼辦 before-resync-target 什麼時候做重傳 out-of-sync 同步之前怎麼辦 fence-peer 可以fence split-brain 腦裂的時候怎麼辦 allow-two-primaries 雙主模型 cram-hmac-alg 數據傳輸中的算法是什麼 shared-secret 共享密碼是什麼 rate 定義同步的時候速率有多大 下面給一個簡單的配置 global_common.conf startup { wfc-timeout 120; degr-wfc-timeout 120; } disk { on-io-error detach; fencing resource-only; } net { cram-hmac-alg "sha1"; shared-secret "testtest2"; } syncer { rate 100M; } 定義資源 resource 資源名 on 對應的節點是誰 device /dev/drbd0; disk 這個主機的磁盤分區是那個; address 監聽在那個地址的哪個端口; meta-disk 用於定義磁盤磁盤的數據如何保存和存儲; drbd有兩種存儲方式 定義資源的例子 [root@web01 drbd.d]# cat web.res resource web { on web01 { device /dev/drbd0; disk /dev/sdb5; address 192.168.0.11:7789; meta-disk internal; } on web02 { device /dev/drbd0; disk /dev/sdb5; address 192.168.0.22:7789; meta-disk internal; } } 注意兩個主機都要有 開始初始化資源並啓動服務 [root@web01 drbd.d]# drbdadm create-md web Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. success [root@web01 drbd.d]# /etc/init.d/drbd start 雙方都要啓動 啓動之後 [root@web01 drbd.d]# /etc/init.d/drbd status drbd driver loaded OK; device status: version: 8.3.13 (api:88/proto:86-96) GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by [email protected], 2012-05-07 11:56:31 m:res cs ro ds p mounted fstype 0:web Connected Secondary/Secondary Inconsistent/Inconsistent C [root@web01 ~]# drbdadm -- --overwrite-data-of-peer primary web 設置哪個資源爲主節點 這裏設置在web01節點上web資源爲主 對於主primary/Secondary模型的drbd服務來講,在某一個時刻只有一個節點爲primary,因此,要切換兩個節點的角色,只能在將原有的primary節點設置爲 Secondary後,才能將原來的Secondary設置爲primary 我們使用drbdadm secondary web將此節點設置爲secondary;然後再在另外一節點上使用drbdadm primary web將其提升爲primary 注意使用的時候一定要先umount分區 [root@web01 ~]# drbd-overview 查看同步狀態 [root@web01 drbd.d]# chkconfig drbd on [root@web01 ~]# mkfs.ext3 /dev/drbd0 格式化分區 [root@web01 ~]# mkdir /web [root@web01 ~]# mount /dev/drbd0 /web/
至此drbd實驗到此結束