環境:
CentOS6.5_x64,兩塊硬盤,用sdb1作drbd分區(sdb1建立好分區即可,不用格式化和掛載)
masternfs eth0:192.168.140.128 (heartbeat,drbd,nfs服務端)
backupnfs eth0:192.168.140.131 (heartbeat,drbd,nfs服務端)
VIP: 192.168.140.133
客戶機:192.168.140.132 (nfs客戶端)
一、添加HOSTS記錄(主備):
192.168.140.128 masternfs
192.168.140.131 backupnfs
二、安裝DRBD(主備):
1、安裝epel源:
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
2、安裝依賴包:
yum install -y gcc gcc-c++ make perl kernel-devel kernel-headers flex drbd84-utils kmod-drbd84
如果報錯:Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
解決方法:編輯[epel]下的baseurl前的#號去掉,mirrorlist前添加#號
3、安裝drbd:
wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz tar xvf drbd-8.4.4.tar.gz cd drbd-8.4.4 ./configure --prefix=/usr/local/drbd --with-km make KDIR=/usr/src/kernels/`uname -r`/ make install mkdir -p /usr/local/drbd/var/run/drbd cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/ chkconfig --add drbd chkconfig drbd on cp drbd/drbd.ko /lib/modules/`uname -r`/kernel/lib/ modprobe drbd lsmod | grep drbd
如果modprobe drbd報錯,可以用 yum install kernel* 方式來更新,需要重啓系統,重新安裝一次
4、配置DRBD
cd /usr/local/drbd/etc/drbd.d mv global_common.conf global_common.conf.bak
重新建立global_common.conf
global { usage-count yes; } common { protocol C; disk { on-io-error detach; } syncer { rate 100M; } } resource web { on masternfs { device /dev/drbd0; disk /dev/sdb1; address 192.168.140.128:7899; meta-disk internal; } on backupnfs { device /dev/drbd0; disk /dev/sdb1; address 192.168.140.131:7899; meta-disk internal; } }
5、創建DRBD記錄信息數據塊
drbdadm create-md web service drbd start #(主備一起啓動)
6、設置主備節點:
主:
drbdadm -- --overwrite-data-of-peer primary web
備:
drbdadm secondary web
7、格式化並掛載分區:
備:
[root@masternfs opt]# mkfs.ext4 /dev/drbd0 mke2fs 1.41.12 (17-May-2010) mkfs.ext4: Wrong medium type while trying to determine filesystem size
報錯,因爲不能在備上操作這塊分區
主:
[root@backupnfs ~]# mkfs.ext4 /dev/drbd0 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1310720 inodes, 5241029 blocks 262051 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 160 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 32 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
8、測試:
主:
cd /data/ mkdir test #建立一個文件夾,測試用 umount /data #卸載分區 drbdadm secondary web #把本節點設爲備節點
查看狀態drbdadm role web,此時是顯示兩個secondary,然後把另外一個備節點設成主節點,看看剛剛建立的文件夾還在不在
備:
drbdadm primary web #設成主節點 mount /dev/drbd0 /data #掛載分區
結果,test文件夾還在!
查看資源的連接狀態
[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是磁盤讀信息
三、安裝NFS:
yum -y install nfs-utils rpcbind cat > /etc/exports << EOF /data 192.168.140.132/24(rw,no_root_squash) #(IP爲客戶機的IP) EOF service rpcbind start service nfs start chkconfig rpcbind on chkconfig nfs on
四、安裝配置Heartbeat
yum install heartbeat* -y cd /usr/share/doc/heartbeat-3.0.4 cp ha.cf authkeys haresources /etc/ha.d/ cd /etc/ha.d/ cat > authkeys << EOF auth 2 2 sha1 HI! EOF chmod 600 authkeys cat > ha.cf << EOF logfile /var/log/ha-log logfacility local0 #如果未定義上述日誌,默認寫入/var/log/message keepalive 2 #心跳間隔 deadtime 30 #死亡閥值 warntime 10 #警告時間 initdead 120 #首次啓動heartbeat,等待多久才啓動主服務資源 udpport 694 #連接端口 bcast eth0 #使用什麼方式組織心跳,最好用ucast方式 auto_failback off #當主節點故障恢復後,自動獲取資源並取代從節點 node masternfs #主節點主機名 node backupnfs #備份節點主機名 ping 192.168.140.2 EOF cat > haresources << EOF masternfs IPaddr::192.168.140.133/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/data::ext4 killnfsd EOF cat > resource.d/killnfsd << EOF killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0 EOF chmod +x resource.d/killnfsd cp /opt/drbd-8-4.4/scripts/drbddisk /etc/ha.d/resource.d/ #源碼包找到drbddisk腳本 chmod 755 /etc/ha.d/resource.d/drbddisk service heartbeat start
遇到報錯:
heartbeat: udpport setting must precede media statementsheartbeat[2244]: 2016/01/28_17:38:57 ERROR: Bad permissions on keyfile [/etc/ha.d//authkeys], 600 recommended.
heartbeat[2244]: 2016/01/28_17:38:57 ERROR: Authentication configuration error.
heartbeat[2244]: 2016/01/28_17:38:57 ERROR: Configuration error, heartbeat not started.
解決辦法:
chmod 600 authkeys
報錯:
ResourceManager(default)[2251]: 2016/01/27_23:44:39 ERROR: Cannot locate resource script drbddisk
解決辦法:
cd /opt/drbd-8.4.4
cp scripts/drbddisk /etc/ha.d/resource.d/
chmod 755 /etc/ha.d/resource.d/drbddisk
主備都啓動heartbeat後,看看VIP是否能PING通,然後再做一下故障測試看看IP是否會自動遷移,及drbd分區是否會自動掛載,nfs功能是否正常。
美中不足:雖然能自動切換,但是切換時會先造成nfs客戶端一小陣子卡住