一、DRBD簡介
分布式複制塊裝置(DRBD 技術)是一種基于軟體的,無共享,複制的存儲解決方案,在伺服器之間的對塊裝置(硬碟,分區,邏輯卷等)進行鏡像
DRBD 鏡像資料的特點:
實時性:當應用對磁盤的資料進行修改時,複制立即發生。
透明性:應用程式的資料存儲在鏡像裝置上是獨立和透明的,資料可存儲在不同的伺服器
上。
同步鏡像和異步鏡像:同步鏡像,當本地發申請進行寫操作進行時,同步寫到兩台伺服器
上。異步鏡像,當本地寫申請已經完成對本地的寫操作時,開始對對應的伺服器進行寫操作
二、要求及拓撲
本實驗部署drbd+heartbeat+nfs環境,建立一個高可用(HA)的檔案系統伺服器叢集,通過DRBD保證了伺服器資料的完整性和一緻性。在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣。因為資料同時存在于本地主伺服器和備份伺服器上。切換時,遠端主機隻要使用它上面的那份備份資料,就可以繼續提供主伺服器上相同的服務,并且client使用者對主伺服器的故障無感覺。
<a href="http://blog.51cto.com/attachment/201301/174902407.jpg" target="_blank"></a>
三、實驗環境
系統:VMware redhat-5.4
master node1.abc.com 192.168.2.1 eth1 192.168.3.1
slave node2.abc.com 192.168.2.2 eth1 192.168.3.2
虛拟ip:192.168.2.100
兩台伺服器新加一塊硬碟/dev/sdb,建立/dev/sdb1分區互為鏡像
注意建立分區時,大小要一緻,若不一緻,以小的為準
//時間相同,讀取主機闆時間作為目前時間
# hwclock -s
//兩個伺服器的hosts檔案修改,可以正常解析ip與主機名
# echo "192.168.2.1 node1.abc.com" >> /etc/hosts
# echo "192.168.2.2 node1.abc.com" >> /etc/hosts
四、DRBD配置
在node1和node2做以下操作:(在node1在操作,然後可通過scp指令實作相關檔案拷貝到node2上)
1、安裝drbd
#rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm
# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
# modprobe drbd //加載drbd子產品
# lsmod |grep drbd //檢視子產品加載情況
2、主要目錄及指令
/etc/drbd.conf 配置檔案
/etc/rc.d/init.d/drbd 配置腳本
/etc/drbd.d/ 主目錄
/sbin/drbdadm 進階别管理工具
/sbin/drbdmeta 低級别管理工具
/sbin/drbdsetup 低級别管理工具
/usr/sbin/drbd-overview 檢視工具
注: rpm -ql drbd83 檢視
3、修改配置檔案
#vim /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";
~
~
:r /usr/share/doc/drbd83-8.3.8/drbd.conf //末行模式下執行讀指令來加載
#cp /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.bak
# vim /etc/drbd.d/global_common.conf (替換掉原來的内容)
global {
usage-count yes;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
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;
}
# vim /etc/drbd.d/web.res //定義資源
resource web { //資源名稱
on node1.abc.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.2.1:7789;
meta-disk internal;
}
on node2.abc.com {
address 192.168.2.2:7789;
}
4、初始化,啟動服務
#drbdadm create-md web
# service drbd start &&chkconfig drbd on //并設為開機啟動
5、指定主節點
#drbdadm -- --overwrite-data-of-peer primary web (在自定義主節點上執行)
不加 “-- --overwrite-data-of-peer”
錯誤:
0: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup 0 primary' terminated with exit code 17
日志資訊:block drbd0: State change failed: Need access to UpToDate data
6、建立目錄,實作挂載(在主節點上執行)
#mkdir /data
#mkfs -t ext3 /dev/drbd0 //格式化
#mount /dev/drbd0 /data
7、檢視drbd狀态
#drbd-overview (#service drbd status)
主節點node1
<a href="http://blog.51cto.com/attachment/201301/174318862.png" target="_blank"></a>
備份節點nod2
<a href="http://blog.51cto.com/attachment/201301/174331507.png" target="_blank"></a>
五、nfs配置
兩台伺服器配置相同,可通過scp拷貝
1、修改nfs的共享菜單
# echo "/data 192.168.2.0/24(rw,sync,no_root_squash)" > /etc/exports
2、啟動服務
# service nfs start && chkconfig nfs on
3、修改nfs啟動腳本。
/etc/init.d/nfs中的stop部分killproc
腳本nfsd -2 修改為 -9
116 stop)
117 # Stop daemons.
118 echo -n $"Shutting down NFS mountd: "
119 killproc rpc.mountd
120 echo
121 echo -n $"Shutting down NFS daemon: "
122 killproc nfsd -9
六、heartbeat配置
在node1和node2做如下操作
1、安裝
heartbeat-2.1.4-11.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-stonith-2.1.4-11.el5.i386.rpm
依賴包:
libnet-1.1.4-3.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
注:下載下傳位址http://vault.centos.org/5.4/extras
2、拷貝配置文檔
# cd /usr/share/doc/heartbeat-2.1.4/
# cp authkeys ha.cf haresources /etc/ha.d/
3、修改配置文檔
1)、ha.cf配置(做如下添加)
bcast eth1
node node1.abc.com
node node2.abc.com
2)、haresources資源檔案
#echo “node1.abc.com 192.168.2.100/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/d
ata::ext3 killnfsd” >> /etc/ha.d/haresoures
3)、驗證authkeys
#vim authkeys
auth 3
3 md5 hello
#chmod 600 authkeys 設定權限值為600
4)、killnfsd服務控制腳本配置
#echo “killall -9 nfsd; /etc/init.d/nfs restart; exit 0” >>/etc/ha.d/resource.d/killnfsd
#chmod 755 /etc/ha.d/resource.d/killnfsd //添加可執行權限
4、開啟Heartbeat服務
#service heartbeat start && chkconfig heartbeat on
七、測試
1、建立挂載
#mkdir /mnt/data
#mount 192.168.2.100:/data /mnt/data
2、編寫shell,間隔1s建立一次空檔案xxx
# vim /mnt/data/test.sh
while true
do echo ----\> trying touch xxx:$(date)
touch xxx
echo \<---- done touch xxx: $(date)
echo
sleep 1
done
3、将主節點node1的heartbeat服務停止,則備份節點node2接管服務
#service heartbeat stop //node1接點
<a href="http://blog.51cto.com/attachment/201301/174346292.jpg" target="_blank"></a>
注:以上實作的drbd的單主模式, 任何資源在任何特定的時間,叢集中隻存在一個主節點。 正是因為這樣在叢集中隻能有一個節點可以随時操作資料,這種模式可用在任何的檔案系統上(EXT3、EXT4、XFS等等)。
本文轉自 劉園 51CTO部落格,原文連結:http://blog.51cto.com/colynn/1123418