DRBD的英文全稱爲Distributed Replicated Block Device(分佈式塊設備複製),是linux內核的存儲層中的一個分佈式存儲系統,可利用DRBD在兩臺linux服務器之前共享塊設備、文件系統和數據,類似於一個網絡RAID1的功能。
同步過程如下:
1)、在NODE1上寫操作被提交,然後通過內核傳給DRBD模塊。
2)、DRBD發送寫操作到NODE2。
3)、在NODE2上的DRBD發送寫操作給本地磁盤。
4)、在NODE2上的DRBD向NODE1發送確認消息,確認已經接收到寫操作併發送給本地磁盤。
5)、在NODE1上的DRBD發送寫操作給本地磁盤。
6)、NODE1的內核迴應寫操作完成。
此同步過程還依賴於DRBD的3種同步協議:
protocol A,寫I/O到達本地磁盤和本地的TCP發送緩存區之後,返回操作成功。
protocol B,寫I/O到達本地磁盤和遠程節點的緩存區之後,返回操作成功。
protocol C, 寫I/O到達本地磁盤和遠程節點的磁盤之後,返回操作成功。
heartbeat+DRBD方案中IP信息:
192.168.0.223(drbd1)
192.168.0.224(drbd2)
heartbeat使用的VIP:
192.168.0.222
配置之前的準備
1.設置hostname及解析
hostname drbd1
hostname drbd2
2.編輯/etc/hosts文件,添加如下內容:
192.168.0.223 drbd1
192.168.0.224 drbd2
保證兩臺主機的hostname 能分別解析到兩臺機器內網IP。
DRBD的部署
從官方網站下載源碼包來編譯或者直接yum來安裝,這以Centos爲例:
通過yum安裝DRBD服務:
yum -y install drbd83 kmod-drbd83(2.6.33及以上的內核不需要安裝此模塊包了)
檢查DRBD是否安裝成功:
[root@drbd1 ~]# modprobe -l |grep -i drbd
/lib/modules/2.6.18-194.el5/weak-updates/drbd83/drbd.ko
[root@drbd1 ~]# lsmod |grep drbd
drbd 300440 4
安裝成功之後,在/sbin下面有drbdadmin drbdmeta drbdsetup 以及/etc/init.d/drbd 啓動本。
DRBD的配置
drbd使用的分區最好一樣,也可以使用LVM進行分區。
這裏給兩臺機器添加一個10G的分區給數據庫使用。(添加分區簡單,這裏就不貼出來了!)
[root@drbd1 ~]# cp /usr/share/doc/drbd83-8.3.13/drbd.conf /etc/drbd.conf
[root@drbd1 ~]# cat /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
[root@drbd1 ~]# cat /etc/drbd.d/global_common.conf |grep -v "#"
global {
usage-count no; #是否參加DRBD使用者統計,默認yes
}
common {
protocol C;#使用DRBD的第三種協議。
handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
}
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "1111";
#DRBD同步使用的驗證方式和密碼信息。
}
syncer {
rate 200M;#同步時網絡速率最大值,單位是字節。
}
}
[root@drbd1 ~]# cat /etc/drbd.d/ha.res
resource r0 {
on drbd1 {
device /dev/drbd0;#掛載的設備名爲drbd0
disk /dev/sda5;#使用的磁盤分區爲/dev/sda5
address 192.168.0.223:7788;#設置DRBD的監聽端口,用於與另一臺機器通信。
meta-disk internal; #DRBD的元數據存放方式
}
on drbd2 {
device /dev/drbd0;
disk /dev/sda5;
address 192.168.0.224:7788;
meta-disk internal;
}
}
上面的的文件分別放在drbd1和drbd2上。drbd.conf的配置參數很多,可以man drbd.conf來查看說 明。
DRBD的啓動
在啓動DRBD服務之前,要在兩臺機器上/dev/sha5上創建DRBD元數據庫信息。
[root@drbd1 ~]# drbdadm create-md r0
分別在兩臺機器上執行,成功了會打印出successfully created.
出現不成功時,需要使用如下命令覆蓋文件系統中的設備塊信息,操作時確認此分區數據已經備 份。
dd if=/dev/zero of=/dev/sda5 bs=1M count=128
執行完後,再次執行drbdadm create-md r0
兩臺機器同時啓動服務: [root@drbd1 ~]# /etc/init.d/drbd start
設置primary節點 :[root@drbd1 ~]# drbdadm primary r0
如果上一步不成功 則執行此命令把此節點設置爲primary節點,從頭開始同步:
drbdadm -- --overwrite-date-of-peef primary r0
此時DRBD完成,查看/proc/drbd
[root@drbd1 ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by [email protected], 2012-05-07 11:56:36
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:1744 nr:880 dw:2624 dr:39882 al:13 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
從輸出信息可知,磁盤狀態都是UpToDate,表示數據同步完成。
HA有時間在弄上來!