heartbeat , drbd 切換節點前注意事項

heartbeat , drbd 在切換節點前注意事項
因為如果不能成功讓 secondary 接手就喪失 heartbeat 的意義
環境: node01 為 primary, node02 為 secondary

若 linux kernel 升級 下次用新的 kernel 開機時 drbd module 會失效
原因是 drbd 是 kernel 編譯的模組 若有和開機相對應的模組

所以 linux kernel 升級 -> 重新開機 -> apt-get remove drbd8-source drbd8-utils –> apt-get install drbd8-source drbd8-utils

2. 關掉 primary 時 請在 secondary 接手的機器做以下確認動作 ,

a. 檢查 /proc/drbd , 如果如下未 sync 完畢 請等待 sync 完畢 (通常是關機一段時間, 有大量的資料待 sync)

drbd driver loaded OK; device status:
version: 8.3.3 (api:88/proto:86-91)
GIT-hash: 49bfeeaf3690ad0b9afd5376feda9e9eb34a30f3 build by nobody@node02, 2010-05-07 10:45:39
m:res cs ro ds p mounted fstype
… sync’ed: 12.2% (4352/4952)M
0:r0 SyncTarget Secondary/Primary Inconsistent/UpToDate C
root@node02:~# more /root/drbd.status
version: 8.3.3 (api:88/proto:86-91)
GIT-hash: 49bfeeaf3690ad0b9afd5376feda9e9eb34a30f3 build by nobody@node02, 2010-04-29 01:22:52
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r—-
ns:9358320 nr:8306688 dw:19144016 dr:20373293 al:36175 bm:35703 lo:0 pe:298 ua:0 ap:0 ep:1 wo:b oos:162604
[===========>……..] sync’ed: 64.9% (162604/454208)K
finish: 0:01:41 speed: 1,436 (9,112) K/sec

b. 確認 heartbeat, drbd service

heartbeat
/etc/init.d/heartbeat status
heartbeat OK [pid 1590 et al] is running on node02 [node02]…

drbd
root@node02:~# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.3 (api:88/proto:86-91)
GIT-hash: 49bfeeaf3690ad0b9afd5376feda9e9eb34a30f3 build by nobody@node2, 2010-05-07 10:45:39
m:res cs ro ds p mounted fstype
0:r0 Connected Secondary/Primary UpToDate/UpToDate C

廣告

DRBD 資料不一致解法

有時候 DRBD 發生一些意外的情況
導致兩邊資訊不一置 無法兩邊都 UpToDate/UpToDate
可以參考下面作法

假設 node01 比 node02 新的話
node01 / # drbdadm connect all
node02 / # drbdadm — –discard-my-data connect all

DRBD 實做要點

假設有兩台節點 node01, node02, node01 為 primary, node02 為 secondary

1. 要重新 Sync 資料時,必須兩個 nodes 都在 secondary 狀態,
然後對其中一台下 drbdadm — –overwrite-data-of-peer primary resource

2. primary 節點若關機, secondary 節點若無法順利接手
請確認 drbd 狀態
[node02]# /etc/init.d/drbd status
若為 secondary 請提升到 primary
[node02]# drbdadm primary resource
然後重新啟動 heartbeat
[node02]#/etc/init.d/heartbeat restart

DRBD+Heartbeat 架設 HA NFS Server on CentOS 5

目標 : 由於 NFS Server 在公司非常重要,如果不能服務將會造成許多人無法工作,所以利用 DRBD 與 Heartbeat 來做出可以在NFS 主機當機時, NFS Server 會自動切換到備用機,來達成不停止服務的目標
目前這個方案的缺點是無法兩台同時服務,下次的目標是做出可以同時服務的 Cluster。

0. 環境
兩台主機 node1, node2, 虛擬 ip (vip) 為 172.16.1.10
node1 172.16.1.11
node2 172.16.1.12
vip 172.16.1.10
兩台均有兩顆硬碟, /dev/sda 作 OS 使用, 而 /dev/sdb 作 data 使用

在兩台主機
vi /etc/hosts
172.16.1.11 node1
172.16.1.12 node2

注意 主機名稱需與 /etc/sysconfig/network 的 HOSTNAME 相符
若有帶網域名稱, 則 /etc/hosts 也要使用網域名稱

1. 安裝套件

[node01],[node02] 皆執行
# yum -y install drbd83 kmod-drbd83 portmap nfs-utils heartbeat

NFS Service:
請設定 portmap 預測啟動, nfs 則可以不用 , Heartbeat 會自行啟動
[node01],[node02] 皆執行
chkconfig portmap on
service portmap start
service nfs on

NFS 分享設定: 分享 /data
[node01],[node02] 皆執行
vim /etc/exports
/data 172.16.1.0/255.255.255.0(rw,no_root_squash,no_all_squash,sync)

2. DRBD
分顆硬碟:
fdisk /dev/sdb -> 整顆切一塊為 /dev/sdb1
並會將 /dev/sdb1 在 drbd 指定為 r0 , 如下

設定 drbd.conf:
[node01],[node02] 皆執行
vim /etc/drbd.conf

global {
usage-count yes;
}

common {
syncer { rate 100M; }
}

resource r0 {
protocol C;
startup {
wfc-timeout 0;
degr-wfc-timeout 120;
}

disk {
on-io-error detach;
# no-disk-flushes;
# no-md-flushes
# size 1G;
}

net {
}

on node01 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.1.12:7788;
meta-disk internal;
}

on node02 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.1.12:7788;
meta-disk internal;
}
}

初始化 drbd :
node01, node02 兩台都執行以下指令

drbdadm create-md r0
chkconfig drbd on

service drbd start
Starting DRBD resources: [ d(r0) s(r0) n(r0) ].

查看 drbd 狀態, 一開始 node01, node02 都會是 Secondary 的狀態
cat /proc/drbd
version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by mockbuild@v20z-x86-64.home.local, 2009-08-29 14:02:24
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r—-
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1044124

等 drbd 作完後, 把 node01 的 drbd 設為 primary
[node01]# drbdadm primary r0

作完後,開始格式化
[node01]# mkfs.ext3 /dev/drbd0
[node01]# mount /dev/drbd0 /data

注意: 若此時要變更 primary 由 node01 到 node02, 最安全的方法
先將 node01 變成 secondary, 即兩台都是 secodary
[node01]# umount /data
[node01]# drbdadm secondary r0
此時才把 node01 提升為 primary
[node02]# drbdadm primary r0
[node02]# mount /data

3. HA 的部分
[node01], [node02] 兩台設定均同

vim /etc/ha.d/ha.cf

#debugfile /var/log/ha-debug.log
logfile /var/log/ha-log
logfacility local0

keepalive 2 #設定心跳(監測)時間時間為2秒
warntime 5
deadtime 20
initdead 120
#hopfudge 1

udpport 694 #使用 UDP Port 694 進行心跳監測
auto_failback off #如果主要伺服器故障後修復完成,另一台伺服器是否該放棄資源
#baud 19200
bcast eth0 #使用eth0做心跳監測 (注意:如果電腦只有 eth0, 請改成 eth0)
#ucast eth0 172.16.1.11

#watchdog /dev/watchdog
#crm on

node node01 #節點1,必須要與 hostname 或 uname -n 顯示的主機名稱相符合才可以,此處也可以寫為 node01
node node02 #節點2,此處也可以寫為 node02

ping 172.16.1.254 #使用 ping Gateway 當成檢查主要主機是否仍在運作 (心跳是否正常)
#ping 172.16.1.11 172.16.1.12 172.16.1.10
#deadping 5

#ping_group lbgroup 10.0.0.101 10.0.0.102
#ping_group lbgroup 172.16.1.11 172.16.1.12

#設定和 heartbeat 一起啟動、關閉的進程
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

vim /etc/ha.d/authkeys

auth 1
1 crc

chmod 600 /etc/ha.d/authkeys

vim /etc/ha.d/haresources

node01 IPaddr::172.16.1.10/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3 nfs

vim /etc/ha.d/resource.d/nfs

killall -9 nfsd; /etc/init.d/nfs restart; exit 0

以上參考所實作,
http://forum.icst.org.tw/phpbb/viewtopic.php?f=10&t=17893&start=0

啟動與測試:

假設 node01 是主結點, node02 為副節點,所以請在 [node01] 執行後, 再到 [node02] 執行
[node01]# service heartbeat start
[node01]# /etc/init.d/heartbeat start
[node02]# service heartbeat start
[node02]# /etc/init.d/heartbeat start

Case01, 假設 node01 死掉, 切到 node02
[node01]# /etc/init.d/heartbeat stop
將會把 VIP (172.16.1.10) 切到 node02

建議, 若 node01 若恢復正常, 請將 heartbeat 切回去
[node01]# /etc/init.d/heartbeat start
[node02]# /etc/init.d/heartbeat stop
[node01]# /etc/init.d/heartbeat start

Case02: 若在切回至 node01 , 相當於假設 node02 死掉
要先讓 node01 的 heartbeat 為啟動狀態, 才能從 node02 接手過來
[node01]# /etc/init.d/heartbeat start
[node02]# /etc/init.d/heartbeat stop
等 node02 恢復
[node02]# /etc/init.d/heartbeat start
此時 VIP 仍在 node01

ps.
原有兩個錯誤
1. /etc/ha.d/haresources 內容為,
centos1.lu.idv.tw IPaddr::192.168.128.100/22/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/d::ext3 nfs
遮罩應為 24, 才能順利啟動 heartbeat

2. /etc/ha.d/resource.d/killnfsd, 根據 haresources 設定名稱應為 /etc/ha.d/resource.d/nfs,
否則 heartbeat 會找不到 /etc/ha.d/resource.d/nfs, 而無法順利啟動 nfs service