您好,登錄后才能下訂單哦!
heartbeat中怎么自動切換網絡參數,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
一、環境
node0
eth0:192.168.32.30 service vip1:192.168.32.21 VMAC1:00:1E:68:1E:99:5E
eth2:10.160.100.30 heart RMAC:00:18:8B:8E:04:E2
node1
eth0:192.168.32.31 service vip1:192.168.32.21 VMAC1:00:1E:68:1E:99:5E
eth2:10.160.100.31 heart vip2:192.168.32.22 VMAC2:00:1E:68:1E:88:5E RMAC:00:1E:68:1E:19:5E
node2
eth0:192.168.32.32 service vip2:192.168.32.22 VMAC2:00:1E:68:1E:88:5E
eth2:10.160.100.32 heart RMAC:00:1E:68:1E:16:7E
實驗要求:
1、當node0的網絡出現故障時,node1自動切換將自己的ip、hostname、mac地址改成vip1、vman1、 nodevir1;故障恢復后node0自動切換回來,將自己的ip、hostname、mac改成vip1、vman1、nodevir,node1恢 復自身的網絡參數
2、當node2的網絡出現故障時,node1自動切換將自己的ip、hostname、mac地址改成vip2、vman2、 nodevir2;故障恢復后node0自動切換回來,將自己的ip、hostname、mac改成vip2、vman2、nodevir2,node1 恢復自身的網絡參數
二、heartbeat安裝(三臺node操作一樣)
1、安裝libnet
[root@node1 ~]# tar -zxvf libnet-1.1.4.tar.gz
[root@node1 ~]# cd libnet-1.1.4
[root@node1 libnet-1.1.4]# ./configure
[root@node1 libnet-1.1.4]# make;make install
#libnet是一個高層次API工具,使用heartbeat需要用到他
2、安裝heartbeat
[root@node1 ~]# tar -zxvf heartbeat-2.1.3.tar.gz
[root@node1 ~]# cd heartbeat-2.1.3
[root@node1 heartbeat-2.1.3]# ./ConfigureMe configure --disable-swig --disable-snmp-subagent
[root@node1 heartbeat-2.1.3]# make ; make install
[root@node1 heartbeat-2.1.3]# cp doc/ha.cf doc/haresource doc/anthkeys /etc/ha.d/
[root@node1 heartbeat-2.1.3]# cp ldirectord/ldiretord.cf /etc/ha.d/
[root@node1 heartbeat-2.1.3]# grouadd -g 694 haclient
[root@node1 heartbeat-2.1.3]# useradd -u 694 -g 694 hacluster
#heartbeat的安裝包中默認包含ldirectord插件,該插件主要用于管理負載均衡,為保證ldirectord可用還行安裝perl-Mailtools
三、配置
1 node0配置
1.1 創建網絡參數修改腳本(/etc/ha.d/resource.d/Remac1)
[root@node0 resource.d]# vim /etc/ha.d/resource.d/Remac1 #Remac1也可存放在/etc/rc.d/init.d目錄
#!/bin/bash
#discription : Start Real Server
VMAC=00:1E:68:1E:99:5E
RMAC=00:1E:68:1E:19:5E
GATEWAY=192.168.32.254
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Replace eth0's Real Mac addr to Virtual Mac addr"
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether $VMAC
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 192.168.32.21 broadcast 192.168.32.255 netmask 255.255.255.0
/bin/hostname nodevir
/sbin/route add default gw $GATEWAY
;;
stop)
echo "Restore eth0's Real Mac addr"
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether $RMAC
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 192.168.32.31 broadcast 192.168.32.255 netmask 255.255.255.0
/bin/hostname node1
/sbin/route add default gw $GATEWAY
;;
*)
echo "Usage : $0 {start|stop}"
exit 1
esac
1.2 heartbeat主配置文件(/etc/ha.d/ha.cf)
[root@node1 ha.d]# vim /etc/ha.d/ha.cf
#debugfile /var/log/ha-debug
logfile /var/log/ha-log
#指名heartbeat的日志存放位置。
#crm yes
#是否開啟Cluster Resource Manager(集群資源管理)功能。
bcast eth2
#指明心跳使用以太網廣播方式,并且是在eth2接口上進行廣播。
keepalive 2
#指定心跳間隔時間為2秒(即每兩秒鐘在eth2上發送一次廣播)。
deadtime 60
#指定備用節點在30秒內沒有收到主節點的心跳信號后,則立即接管主節點的服務資源。
warntime 20
#指定心跳延遲的時間為十秒。當10秒鐘內備份節點不能接收到主節點的心跳信號時,就會往日志中寫入一個警告日志,但此時不會切換服務。
initdead 240
#在某些系統上,系統啟動或重啟之后需要經過一段時間網絡才能正常工作,該選項用于解決這種情況產生的時間間隔。取值至少為deadtime的兩倍。
udpport 694 #設置廣播通信使用的端口,694為默認使用的端口號。
#baud 19200 #設置串行通信的波特率。
#serial /dev/ttyS0 #選擇串行通信設備,用于雙機使用串口線連接的情況。如果雙機使用以太網。
#ucast eth0 192.168.1.2 #采用網卡eth2的udp單播來組織心跳,后面跟的IP地址應為雙機對方的IP地址。
#mcast eth0 225.0.0.1 694 1 0 #采用網卡eth0的Udp多播來組織心跳,一般在備用節點不止一臺時使用。Bcast、ucast和mcast分別代表廣播、單播和多播,是組織心跳的三種方式,任選其一即可。
auto_failback on
#用來定義當主節點恢復后,是否將服務自動切回,heartbeat的兩臺主機分別為主節點和備份節點。主節點在正常情況下占用資源并運行所有 的服務,遇到故障時把資源交給備份節點并由備份節點運行服務。在該選項設為on的情況下,一旦主節點恢復運行,則自動獲取資源并取代備份節點,如果該選項 設置為off,那么當主節點恢復后,將變為備份節點,而原來的備份節點成為主節點。
#stonith baytech /etc/ha.d/conf/stonith.baytech
# stonith的主要作用是使出現問題的節點從集群環境中脫離,進而釋放集群資源,避免兩個節點爭用一個資源的情形發生。保證共享數據的安全性和完整性。
#watchdog /dev/watchdog
#該選項是可選配置,是通過Heartbeat來監控系統的運行狀態。使用該特性,需要在內核中載入"softdog"內核模塊,用來生成實際的設備文件,
如果系統中沒有這個內核模塊,就需要指定此模塊,重新編譯內核。編譯完成輸入"insmod softdog"加載該模塊。然后輸入"grep misc /proc/devices"(應為10),輸入"cat /proc/misc |grep watchdog"(應為130)。最后,生成設備文件:"mknod /dev/watchdog c 10 130" 。即可使用此功能。
node node0 #主節點主機名,可以通過命令“uanme –n”查看。
node node1 #備用節點主機名。
ping 192.168.32.254
#選擇ping的節點,ping 節點選擇的越好,HA集群就越強壯,可以選擇固定的路由器作為ping節點,但是最好不要選擇集群中的成員作為ping節點,ping節點僅僅用來測試網絡連接。
ping_group group1 192.168.12.251 192.168.12.239 #類似于ping。
#respawn hacluster /usr/local/ha/lib/heartbeat/ipfail
#apiauth pingd gid=haclient uid=hacluster
apiauth pingd gid=root uid=root
respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s
#該選項是可選配置,列出與heartbeat一起啟動和關閉的進程,該進程一般是和heartbeat集成的插件,這些進程遇到故障可以自動 重新啟動。最常用的進程是pingd,此進程用于檢測和監控網卡狀態,需要配合ping語句指定的ping node來檢測網絡的連通性。其中hacluster表示啟動pingd進程的身份。
#下面的配置是關鍵,也就是激活crm管理,開始使用v2 style格式
crm respawn
#注意,還可以使用crm yes的寫法,但這樣寫的話,如果后面的cib.xml配置有問題
#會導致heartbeat直接重啟該服務器,所以,測試時建議使用respawn的寫法
#下面是對傳輸的數據進行壓縮,是可選項
compression bz2
compression_threshold 2
#注意,v2 style不支持ipfail功能,須使用pingd代替
1.3 資源文件(/etc/ha.d/haresources)
[root@node0 ha.d]# vim /etc/ha.d/haresources
node0 Remac1
#haresources文件用于指定雙機系統的主節點、集群IP、子網掩碼、廣播地址以及啟動的服務等集群資源,文件每一行可以包含一個或多個資源腳本名,資源之間使用空格隔開,參數之間使用兩個冒號隔開,在兩個HA節點上該文件必須完全一致,此文件的一般格式為:
node-name network <resource-group>
#node-name表示主節點的主機名,必須和ha.cf文件中指定的節點名一致,network用于設定集群的IP地址、子網掩碼、網絡設 備標識等,需要注意的是,這里指定的IP地址就是集群對外服務的IP地址,resource-group用來指定需要heartbeat托管的服務,也就 是這些服務可以由heartbeat來啟動和關閉,如果要托管這些服務,必須將服務寫成可以通過start/stop來啟動和關閉的腳步,然后放到 /etc/init.d/或者/etc/ha.d/resource.d/目錄下,heartbeat會根據腳本的名稱自動去/etc/init.d或者 /etc/ha.d/resource.d/目錄下找到相應腳步進行啟動或關閉操作。
#LSB: Linux標準腳本文件(init script),通常放在/etc/init.d/目錄下,heartbeat1.x版本之前的管理腳本一半放在/etc/ha.d /resource.d,在這里是/usr/local/ha/etc/ha.d/resource.d
OCF:Open Cluster Framework,默認放在/usr/lib/resource.d/heartbeat/目錄下;在這里是/usr/local/ha/etc/ha.d/resource.d
#下面介紹一下ocf和lsb格式的區別:
LSB格式的腳本必須支持status功能,必須能接收start,stop,status,三個參數;而如果是OCF格式,則必須支持start,stop,monitor三個參數.其中status和monitor參數是用來監控資源的,非常重要.
例如LSB風格的腳本,運行./Mysql status時候, 返回值包含OK或則running則表示資源正常,返回值包含stopped或者No則表示資源不正常。 假如是OCF風格的腳本,運行./Mysql monitor時候, 返回0表示資源是正常的, 返回7表示資源出現問題.
#下面對配置方法進行具體說明:
node1 IPaddr::192.168.60.200/24/eth0/ Filesystem::/dev/sdb5::/webdata::ext3 httpd tomcat
#其中,node1是HA集群的主節點,IPaddr為heartbeat自帶的一個執行腳步,heartbeat首先將執行/etc/ha.d/resource.d/IPaddr 192.168.60.200/24 start的操作,也就是虛擬出一個子網掩碼為255.255.255.0,IP為192.168.60.200的地址,此IP為heartbeat對外提供服務的網絡地址,同時指定此IP使用的網絡接口為eth0,接著,heartbeat將執行共享磁盤分區的掛載操作,“Filesystem::/dev/sdf1::/data1::ext3”相當于在命令行下執行mount操作,即“mount –t ext3 /dev/sdf1 /data1”,最后依次啟動httpd和tomcat服務。
1.4 認證文件(/etc/ha.d/authkeys)
[root@node0 resource.d]# vim /etc/ha.d/authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
#authkeys文件用于設定heartbeat的認證方式,共有三種可用的認證方式:crc、md5和sha1,三種認證方式的安全性依次提高,但是占用的系統資源也依次增加。如果heartbeat集群運行在安全的網絡上,可以使用crc方式,如果HA每個節點的硬件配置很高,建議使用sha1,這種認證方式安全級別最高,如果是處于網絡安全和系統資源之間,可以使用md5認證方式。這里我們使用crc認證方式,設置如下:
auth 1
1 crc
#2 sha1 sha1_any_password
#3 md5 md5_any_password
#需要說明的一點是:無論auth后面指定的是什么數字,在下一行必須作為關鍵字再次出現,例如指定了“auth 6”,下面一定要有一行“6 認證類型”。最后確保這個文件的權限是600(即-rw-------)。
2 node1配置
2.1 創建網絡參數修改腳本(/etc/ha.d/resource.d/Remac1&2)
[root@node1 ~]# vim /etc/ha.d/resource.d/Remac1 #備份node0的網絡參數修改腳本
#!/bin/bash
#discription : Start Real Server
VMAC=00:1E:68:1E:99:5E
RMAC=00:1E:68:1E:19:5E #注意:與node0中Remac1中RMAC不一樣
GATEWAY=192.168.32.254
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Replace eth0's Real Mac addr to Virtual Mac addr"
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether $VMAC
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 192.168.32.21 broadcast 192.168.32.255 netmask 255.255.255.0
/bin/hostname nodevir
/sbin/route add default gw $GATEWAY
;;
stop)
echo "Restore eth0's Real Mac addr"
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether $RMAC
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 192.168.32.31 broadcast 192.168.32.255 netmask 255.255.255.0
/bin/hostname node1
/sbin/route add default gw $GATEWAY
;;
*)
echo "Usage : $0 {start|stop}"
exit 1
esac
[root@node1 ~]# cat /etc/ha.d/resource.d/Remac2 #備份node2的網絡參數修改腳本
#!/bin/bash
#discription : Start Real Server
VMAC=00:1E:68:1E:88:5E
RMAC=00:1E:68:1E:19:5E #注意:與node中Remac1中RMAC不一樣
GATEWAY=192.168.32.254
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Replace eth0's Real Mac addr to Virtual Mac addr"
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether $VMAC
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 192.168.32.22 broadcast 192.168.32.255 netmask 255.255.255.0
/bin/hostname nodevir2
/sbin/route add default gw $GATEWAY
;;
stop)
echo "Restore eth0's Real Mac addr"
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether $RMAC
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 192.168.32.31 broadcast 192.168.32.255 netmask 255.255.255.0
/bin/hostname node1
/sbin/route add default gw $GATEWAY
;;
*)
echo "Usage : $0 {start|stop}"
exit 1
esac
2.2 主配置文件(/etc/ha.d/ha.cf)
[root@node1 ~]# vim /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 60
warntime 20
initdead 240
udpport 694
auto_failback on
node node0 #主node0,排列順序越靠前越優先
node node2 #主node2
node node1 #備node1
ping 192.168.32.254
respawn root /usr/lib/heartbeat/ipfail
apiauth ipfail gid=root uid=root
deadping 60
#注意:由于修改網絡參數需要重啟網卡,需要大量的時間,所以在此將所有時間參數設置比較長。
2.3 資源文件(/etc/ha.d/haresource)
[root@node1 ~]# cat /etc/ha.d/haresources
node0 Remac1
node2 Remac2
#備份nod0用Remac1腳本,備份node2用Remac2腳本
2.4 認證文件(/etc/ha.d/authkeys)
同node0
3 node2配置
3.1 創建網絡參數修改腳本(/etc/ha.d/resource.d/Remac2)
[root@node2 ~]# cat /etc/ha.d/resource.d/Remac2
#!/bin/bash
#discription : Start Real Server
VMAC=00:1E:68:1E:88:5E
RMAC=00:1E:68:1E:16:7E
GATEWAY=192.168.32.254
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Replace eth0's Real Mac addr to Virtual Mac addr"
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether $VMAC
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 192.168.32.22 broadcast 192.168.32.255 netmask 255.255.255.0
/bin/hostname nodevir2
/sbin/route add default gw $GATEWAY
;;
stop)
echo "Restore eth0's Real Mac addr"
/sbin/ifconfig eth0 down
/sbin/ifconfig eth0 hw ether $RMAC
/sbin/ifconfig eth0 up
/sbin/ifconfig eth0 192.168.32.32 broadcast 192.168.32.255 netmask 255.255.255.0
/bin/hostname node2
/sbin/route add default gw $GATEWAY
;;
*)
echo "Usage : $0 {start|stop}"
exit 1
esac
3.2 主配置文件(/etc/ha.d/ha.cf)
[root@node1 ~]# vim /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 60
warntime 20
initdead 240
udpport 694
auto_failback on
node node2 #主node2,排列順序越靠前越優先
node node1 #備node1
ping 192.168.32.254
respawn root /usr/lib/heartbeat/ipfail
apiauth ipfail gid=root uid=root
deadping 60
#注意:由于修改網絡參數需要重啟網卡,需要大量的時間,所以在此將所有時間參數設置比較長。
3.3 資源文件(/etc/ha.d/haresource)
[root@node1 ~]# cat /etc/ha.d/haresources
node2 Remac2
3.4 認證文件(/etc/ha.d/authkeys)
同node0
四、測試heartbeat的高可用功能
如何才能得知HA集群是否正常工作,模擬環境測試是個不錯的方法,在把Heartbeat高可用性集群放到生產環境中之前,需要做如下幾個步驟的測試,從而確定HA是否正常工作:
1 正常關閉和重啟主節點的heartbeat
首先在主節點node1上執行“service heartbeat stop”正常關閉主節點的Heartbeat進程,此時通過ifconfig命令查看主節點網卡信息,正常情況下,應該可以看到主節點已經釋放了集群的 服務IP地址,同時也釋放了掛載的共享磁盤分區,然后查看備份節點,現在備份節點已經接管了集群的服務IP,同時也自動掛載上了共享的磁盤分區。
在這個過程中,使用ping命令對集群服務IP進行測試,可以看到,集群IP一致處于可通狀態,并沒有任何延時和阻塞現象,也就是說在正常關閉主節點的情況下,主備節點的切換是無縫的,HA對外提供的服務也可以不間斷運行。
接著,將主節點heartbeat正常啟動,heartbeat啟動后,備份節點將自動釋放集群服務IP,同時卸載共享磁盤分區,而主節點將再次接管集 群服務IP和掛載共享磁盤分區,其實備份節點釋放資源與主節點綁定資源是同步進行的。因而,這個過程也是一個無縫切換。
2 在主節點上拔去網線
拔去主節點連接公共網絡的網線后,heartbeat插件ipfail通過ping測試可以立刻檢測到網絡連接失敗,接著自動釋放資源,而就在此時,備用節點的ipfail插件也會檢測到主節點出現網絡故障,在等待主節點釋放資源完畢后,備用節點馬上接管了集群資源,從而保證了網絡服務不間斷持續運行。
同理,當主節點網絡恢復正常時,由于設置了“auto_failback on”選項,集群資源將自動從備用節點切會主節點。
3 關閉主節點的系統
在主節點拔去電源后,備用節點的heartbeat進程會立刻收到主節點已經shutdown的消息,備用節點就開始進行資源的接管,這種情況其實和主節點網絡故障的現象類似。
4 讓主節點系統內核崩潰
當主節點系統崩潰后,網絡也就失去了響應,那么備用節點的heartbeat進程就會立刻檢測到主節點網絡故障,然后進行資源切換,但是由于主節點系統內 核崩潰,導致自身不能卸載所占有的資源,例如共享磁盤分區、集群服務IP等,那么此時如果沒有類似Stonith設備的話,就會出現資源爭用的情況,但是 如果有Stonith備,Stonith設備會首先將故障的主節點電源關閉或者重啟此節點等操作,這樣就讓主節點釋放了集群資源,當Stonith設備 完成所有操作時,備份節點才拿到接管主節點資源的所有權,從而接管主節點的資源。
看完上述內容,你們掌握heartbeat中怎么自動切換網絡參數的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。