DRBD簡介:
DRBD全稱Distributed Replicated Block (分布式的複製塊裝置),屬於Device公司,但是完全開源。它是一款基於塊裝置的檔案複製解決方案,速度比檔案層級的軟體如NFS,samba快很多,是很多中小企業的共用儲存首選解決方案。
DRBD工作需要在兩個節點上同時準備一塊一模一樣的分區組成鏡像,這就是為什麼它叫做分布式複製塊裝置,它主要通過複製資料來實現檔案同步(備份),主要用於叢集檔案分享權限設定, 我們通過它的工作原理來瞭解塊複製和檔案複製的不同,如:
首先,您需要知道,DRBD是工作在系統核心空間,而不是使用者空間,它直接複製的是位元據,這是它速度快的根本原因。
其次,DRBD至少需要兩個節點來工作,一主一次。
DRBD的檔案同步過程和普通複製過程的不同:
DRBD在資料進入Buffer Cache時,先經過DRBD這一層,複製一份資料經過TCP/IP協議封裝,發送到另一個節點上,另一個節點通過TCP/IP協議來接受複製過來的資料,同步到次節點的DRBD裝置上。
下面我們來配置DRBD,前提:
1)主機名稱和uname -n 命令輸出的一致,最好是FQDN格式
2)DRBD的兩個分區大小一致,先不要格式化
3)兩個節點上準備都準備一個2G的分區/dev/sda5
準備兩台虛擬機器 ,我使用的是vm6.5+redhat5.4 ,主機名稱和IP地址如下
node1.a.org 172.16.14.11
node2.a.org 172.16.14.12
一.安裝,修改設定檔
1)安裝drbd軟體包,需要的軟體包如下:
[root@node1 ~]# ls drbd/
drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
# 使用rpm -i安裝,這兩個軟體包並沒有什麼依賴關係
[root@node1 drbd]# rpm -ivh *.rpm
[root@node2 drbd]# rpm -ivh *.rpm
2)複製設定檔到/etc下
[root@node2 drbd]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/
cp: overwrite `/etc/drbd.conf'? Y # 直接覆蓋,原檔案沒有任何內容
[root@node2 drbd]# cat /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
# 設定檔裡只有下面兩行,告訴我們定義在drbd.d下面定義.res結尾的檔案為drbd的資源
include "drbd.d/global_common.conf"; # 真正的主設定檔
include "drbd.d/*.res";
# 修改 global_common.conf ,內容如下
[root@node2 drbd]# vim /etc/drbd.d/global_common.conf global { usage-count no;}common { protocol C; # C 指同步 A 非同步 B 半同步 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 "mydrbdlab"; } syncer { rate 100M; # 你網卡的速率 }}
3)定義一個資源web,用來存放網頁檔案,給叢集提供檔案服務
resource web { on node1.a.org { # 注意主機名稱 device /dev/drbd0; disk /dev/sda5; # 分區 address 172.16.14.11:7789; # 注意IP meta-disk internal; } on node2.a.org { # 注意主機名稱 device /dev/drbd0; disk /dev/sda5; # 分區 address 172.16.14.12:7789; # 注意IP meta-disk internal; }}
4)將設定檔複製到node1上
[root@node2 drbd]# scp /etc/drbd.conf node1:/etc/
[root@node2 drbd]# scp /etc/drbd.d/* node1:/etc/drbd.d/
二.初始化已經以的資源,啟動drbd服務
1)初始化資源
[root@node1 drbd]# drbdadm create-md web
[root@node2 drbd]# drbdadm create-md web
2)啟動服務,這裡需要說明,當一個節點啟動服務後,如果另一個節點不啟動,它會一直卡在那處於等待狀態。
[root@node1 drbd]# service drbd start
[root@node2 drbd]# service drbd start
3)查看同步狀態
[root@node1 drbd]# watch -n 1 'cat /proc/drbd'
也可以通過下面的命令來查看
[root@node1 drbd]# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----
三.設定node1為主節點,開始資料同步
1)設定主節點
[root@node1 drbd]# drbdsetup /dev/drbd0 primary -o
或者drbdadm -- --overwrite-data-of-peer primary web
查看節點資訊狀態,已經成為primiary了,中間有一個資料同步過程
[root@node1 drbd]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
2)建立檔案系統,掛載之
[root@node1 drbd]# mke2fs -j -L DRBD /dev/drbd0
[root@node1 drbd]# mkdir /mnt/drbd
[root@node1 drbd]# mount /dev/drbd0 /mnt/drbd/
建立幾個空檔案
[root@node1 drbd]# cd /mnt/drbd/
[root@node1 drbd]# touch a b c
四.切換主節點
# 先卸載,將node1改為次節點
[root@node1 ~]# umount /mnt/drbd/
[root@node1 ~]# drbdadm secondary web
# 在node2上設定為主節點
[root@node2 ~]# mkdir /mnt/drbd # 穿件掛載點
[root@node2 ~]# drbdadm primary web
[root@node2 ~]# drbd-overview
0:web Connected Secondary/Primary UpToDate/UpToDate C r----
[root@node2 ~]# drbdadm primary web
查看剛才建立的檔案是否存在
[root@node2 ~]# mount /dev/drbd0 /mnt/drbd/
[root@node2 ~]# ls /mnt/drbd/
a b c lost+found