centos6.4下DRBD 安裝配置----超詳細

DRBD簡介
DRBD的全稱爲:DistributedReplicatedBlockDevice(DRBD)分佈式塊設備複製DRBD是由內核模塊和相關腳本而構成,用以構建高可用性的集羣。其實現方式是通過網絡來鏡像整個設備。它允許用戶在遠程機器上建立一個本地塊設備的實時鏡像。與心跳連接結合使用,也可以把它看作是一種網絡RAID。

DRBD工作機制
Drbd負責接收數據,把數據寫到本地磁盤,然後發送給另一個主機。另一個主機再將數據存到自己的磁盤中。目前,drbd每次只允許對一個節點進行讀寫訪問,這對於通常的故障切換高可用性集羣來講已經足
夠用了。以後的版本將支持兩個節點進行讀寫存取。

DRBD協議說明
A數據一旦寫入磁盤併發送到網絡中就認爲完成了寫入操作。
B收到接收確認就認爲完成了寫入操作。

C收到寫入確認就認爲完成了寫入操作


軟件下載列表地址:http://oss.linbit.com/drbd/

環境介紹:
系統版本:CentOS6.4(32位)內核版本2.6.32-358.el6.i686
軟件版本:drbd-8.4.3.tar.gz
主:10.0.7.103從:10.0.7.104
爲了方便實驗,兩臺機器都各自加一塊20G的硬盤
[root@localhost~]#vim/etc/hosts
10.0.7.103node1
10.0.7.104node2

然後將剛剛添加的一塊硬盤sdb分區並格式化(步驟略)
[root@node1~]#mkdir/qq
[root@node1~]#mount/dev/sdb1/qq(還要寫到/etc/fstab裏面,不然重啓無效)
[root@node1~]#init6

安裝開始
yum  -y  install   kernel-devel      kernel-headers   flex
注意:安裝kernel-devel一定要和你uname -r 看到的內核版本一致,建議kernel-devel用本地源安裝,不要用網絡源安裝
[root@node1 soft]# tar zxf drbd-8.4.3.tar.gz
[root@node1 soft]# cd drbd-8.4.3
[root@node1 drbd-8.4.3]# ./configure --prefix=/usr/local/drbd --with-km
注意:--with-km是啓用內核模塊
[root@node1 ~]# make KDIR=/usr/src/kernels/2.6.32-358.el6.i686
注意KDIR的路徑 (這個內核源碼路徑需要根據自己的系統修改)
[root@node1 drbd-8.4.3]# make install
[root@node1 ~]# mkdir -p /usr/local/drbd/var/run/drbd
[root@node1 ~]# cp /usr/local/drbd/etc/rc.d/init.d/drbd  /etc/rc.d/init.d/
[root@node1 ~]# chkconfig --add drbd
[root@node1 ~]# chkconfig drbd on
安裝drbd模塊
回到剛剛解壓drbd的目錄,然後
[root@node1 drbd-8.4.3]# cd drbd
[root@node1 drbd]# make clean
[root@node1drbd]#  make KDIR=/usr/src/kernels/2.6.32-358.el6.i686
[root@node1 drbd]# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
[root@node1 drbd]# modprobe drbd
查看模塊是否加載成功
[root@node1 drbd]# lsmod | grep drbd
drbd                  292307  0
libcrc32c                841  1 drbd

##################################配置##################################
官方文檔介紹:http://www.drbd.org/users-guide-8.4/
查看drbd的主配置文件
[root@node1 etc]# pwd
/usr/local/drbd/etc
[root@node1 etc]# cat 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";
由此可見:主配置文件裏面已經包含了全局配置文件和drbd目錄下以.res結尾的文件
修改全局配置文件:
[root@node1 drbd.d]# pwd
/usr/local/drbd/etc/drbd.d
[root@node1 drbd.d]# ls
global_common.conf
配置文件內容如下:
[root@node1 drbd.d]# cat global_common.conf
global {
usage-count yes; #是否參加drbd的使用者統計,默認此選項爲yes
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; #使用drbd的同步協議
handlers {
# These are EXAMPLE handlers only.
# They may have severe implications,
# like hard resetting the node under certain circumstances.
# Be careful when chosing your poison.
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";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
}
options {
# cpu-mask on-no-data-accessible
}
disk {
on-io-error detach; #配置I/O錯誤處理策略爲分離
# size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
# disk-drain md-flushes resync-rate resync-after al-extents
# c-plan-ahead c-delay-target c-fill-target c-max-rate
# c-min-rate disk-timeout
}
net {
# protocol timeout max-epoch-size max-buffers unplug-watermark
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# congestion-fill congestion-extents csums-alg verify-alg
# use-rle
}
syncer {
rate 1024M; #設置主備節點同步時的網絡速率
}
}
##########################資源配置文件配置如下  需自己新建####################
[root@node1 ~]# vim /usr/local/drbd/etc/drbd.d/drbd.res
resource  r1 {   #這個r1是定義資源的名字
on  node1 {            #on開頭,後面是主機名稱
device    /dev/drbd0;  #drbd設備名稱
disk      /dev/sdb1;   #drbd0使用的磁盤分區爲sdb1
address   10.0.0.105:7789; #設置drbd監聽地址與端口
meta-disk  internal;
}
on  node2 {            #on開頭,後面是主機名稱
device    /dev/drbd0;  #drbd設備名稱
disk      /dev/sdb1;   #drbd0使用的磁盤分區爲sdb1
address   10.0.0.106:7789; #設置drbd監聽地址與端口
meta-disk  internal;
}
}

#####################################################################
在node1上初始化資源
[root@node1 ~]# drbdadm create-md r1
啓動服務
[root@node1 ~]# service drbd start
查看drbd監聽端口:
[root@node1 ~]# netstat -anput|grep 7789
tcp        0      0 10.0.0.105:7789             0.0.0.0:*                   LISTEN      -
tcp        0      0 10.0.0.105:55715            10.0.0.106:7789             TIME_WAIT   -
tcp        0      0 10.0.0.105:41264            10.0.0.106:7789             TIME_WAIT
注意:第一次啓動drbd時,兩個drbd節點默認都處於Secondary狀態,
[root@node1 ~]# drbdadm role r1
Secondary/Secondary
由於默認沒有主次節點之分,因而需要設置兩個主機的主次節點,選擇需要設置爲主節點的主機,然後執行如下命令:
[root@node1 /]# drbdadm -- --overwrite-data-of-peer primary all
第一次執行完此命令後,在後面如果需要設置哪個是主節點時,就可以使用另外一個命令:drbdadm primary r1 (這個r1是定義資源的角色)或者drbdadm primary all

查看資源的連接狀態
[root@node1 ~]# drbdadm cstate r1
Connected
資源的連接狀態;一個資源可能有以下連接狀態中的一種
StandAlone 獨立的:網絡配置不可用;資源還沒有被連接或是被管理斷開(使用 drbdadm disconnect 命令),或是由於出現認證失敗或是腦裂的情況
Disconnecting 斷開:斷開只是臨時狀態,下一個狀態是StandAlone獨立的
Unconnected 懸空:是嘗試連接前的臨時狀態,可能下一個狀態爲WFconnection和WFReportParams
Timeout 超時:與對等節點連接超時,也是臨時狀態,下一個狀態爲Unconected懸空
BrokerPipe:與對等節點連接丟失,也是臨時狀態,下一個狀態爲Unconected懸空
NetworkFailure:與對等節點推動連接後的臨時狀態,下一個狀態爲Unconected懸空
ProtocolError:與對等節點推動連接後的臨時狀態,下一個狀態爲Unconected懸空
TearDown 拆解:臨時狀態,對等節點關閉,下一個狀態爲Unconected懸空
WFConnection:等待和對等節點建立網絡連接
WFReportParams:已經建立TCP連接,本節點等待從對等節點傳來的第一個網絡包
Connected 連接:DRBD已經建立連接,數據鏡像現在可用,節點處於正常狀態
StartingSyncS:完全同步,有管理員發起的剛剛開始同步,未來可能的狀態爲SyncSource或PausedSyncS
StartingSyncT:完全同步,有管理員發起的剛剛開始同步,下一狀態爲WFSyncUUID
WFBitMapS:部分同步剛剛開始,下一步可能的狀態爲SyncSource或PausedSyncS
WFBitMapT:部分同步剛剛開始,下一步可能的狀態爲WFSyncUUID
WFSyncUUID:同步即將開始,下一步可能的狀態爲SyncTarget或PausedSyncT
SyncSource:以本節點爲同步源的同步正在進行
SyncTarget:以本節點爲同步目標的同步正在進行
PausedSyncS:以本地節點是一個持續同步的源,但是目前同步已經暫停,可能是因爲另外一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步
PausedSyncT:以本地節點爲持續同步的目標,但是目前同步已經暫停,這可以是因爲另外一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步
VerifyS:以本地節點爲驗證源的線上設備驗證正在執行
VerifyT:以本地節點爲驗證目標的線上設備驗證正在執行
查看資源角色的命令
[root@node1 ~]# drbdadm role r1
Primary/Secondary (在前面爲當前節點)
Parimary 主:資源目前爲主,並且可能正在被讀取或寫入,如果不是雙主只會出現在兩個節點中的其中一個節點上
Secondary 次:資源目前爲次,正常接收對等節點的更新
Unknown 未知:資源角色目前未知,本地的資源不會出現這種狀態
查看硬盤狀態
[root@node1 ~]# drbdadm dstate r1
UpToDate/UpToDate
本地和對等節點的硬盤有可能爲下列狀態之一:
Diskless 無盤:本地沒有塊設備分配給DRBD使用,這表示沒有可用的設備,或者使用drbdadm命令手工分離或是底層的I/O錯誤導致自動分離
Attaching:讀取無數據時候的瞬間狀態
Failed 失敗:本地塊設備報告I/O錯誤的下一個狀態,其下一個狀態爲Diskless無盤
Negotiating:在已經連接的DRBD設置進行Attach讀取無數據前的瞬間狀態
Inconsistent:數據是不一致的,在兩個節點上(初始的完全同步前)這種狀態出現後立即創建一個新的資源。此外,在同步期間(同步目標)在一個節點上出現這種狀態
Outdated:數據資源是一致的,但是已經過時
DUnknown:當對等節點網絡連接不可用時出現這種狀態
Consistent:一個沒有連接的節點數據一致,當建立連接時,它決定數據是UpToDate或是Outdated
UpToDate:一致的最新的數據狀態,這個狀態爲正常狀態
查看同步進度
[root@node1 ~]# cat /proc/drbd 或者 執行/usr/local/drbd/sbin/drbd-overview
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2016-04-24 20:16:24
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:2767088 nr:0 dw:0 dr:2774680 al:0 bm:168 lo:0 pe:1 ua:7 ap:0 ep:1 wo:f oos:18202972
[=>..................] sync'ed: 13.3% (17776/20476)M
finish: 0:12:59 speed: 23,344 (22,492) K/sec
由此可見:進度已經完成了13.3%,傳輸速度大概22M/S
注:
ds是磁盤狀態信息
dw是磁盤寫信息
dr是磁盤讀信息

###########################測試驗證###################################
格式化文件系統(文件格式根據自己的系統環境選擇)
[root@node1 ~]# mkfs.ext4 /dev/drbd0
掛載此文件系統
[root@node1 ~]# mkdir /data
[root@node1 ~]# mount /dev/drbd0  /data/
在掛載data目錄中創建一個測試文件,然後卸載掛載目錄,然後切換主備節點,在備用節點上查看剛剛建立的測試文件還是否存在
Node1:
[root@node1 ~]# mkdir  /data/test
[root@node1 ~]# umount /data/
將node1變爲備用節點
[root@node1 ~]# drbdadm secondary r1
[root@node1 ~]# drbdadm role r1
Secondary/Secondary
Node2上:
將node2變爲主節點
[root@node2 ~]# drbdadm primary  r1
[root@node2 ~]# drbdadm role r1
Primary/Secondary
掛載設備,然後看文件是否存在
[root@node2 ~]# mount /dev/drbd0 /mnt/
[root@node2 ~]# cd /mnt/
[root@node2 mnt]# ls
test
OK!  到這裏已經算是完成了!

##################################報錯信息###########################################
報錯1:
configure: error: Cannot build utils without flex, either install flex or pass the --without-utils option.
解決辦法:
yum  -y  intalls  flex
報錯2:
make:  [check-kdir] error 1
解決辦法:yum install -y kernel-devel
報錯3:
SORRY, kernel makefile not found.
You need to tell me a correct KDIR,
  Or install the neccessary kernel source packages.
報錯4:'drbd' not defined in your config (for this host).
這個因爲沒有加載到drbd模塊
啓動報錯:
Command 'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40
這是因爲sdb1已經有文件系統了,已經有數據存在了
解決方法:
[root@node1 ~]# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1
請檢查這個KDIR目錄指的路徑是否正確
##############################################################################################################################################################

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章