歡迎您光臨本站 註冊首頁

利用heartbeat實現三台主機自動切換網路參數

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

一、環境

node0
eth0:192.168.32.30 service vip1:192.168.32.21 VMAC1:00:1E:68:1E:99:5E
eth1: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
eth1: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
eth1: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 eth1   
#指明心跳使用乙太網廣播方式,並且是在eth1介面上進行廣播。  
keepalive 2 
#指定心跳間隔時間為2秒(即每兩秒鐘在eth1上發送一次廣播)。  
deadtime 60 
#指定備用節點在30秒內沒有收到主節點的心跳信號后,則立即接管主節點的服務資源。  
warntime 20 
#指定心跳延遲的時間為十秒。當10秒鐘內備份節點不能接收到主節點的心跳信號時,就會往日誌中寫入一個警告日誌,但此時不會切換服務。  
initdead 240  
#在某些系統上,系統啟動或重啟之後需要經過一段時間網路才能正常工作,該選項用於解決這種情況產生的時間間隔。取值至少為deadtime的兩倍。   
udpport 694   #設置廣播通信使用的埠,694為默認使用的埠號。  
#baud 19200    #設置串列通信的波特率。  
#serial /dev/ttyS0   #選擇串列通信設備,用於雙機使用串口線連接的情況。如果雙機使用乙太網。  
#ucast eth0 192.168.1.2 #採用網卡eth1的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   
 
#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設備 完成所有操作時,備份節點才拿到接管主節點資源的所有權,從而接管主節點的資源。
【責任編輯:枯木 TEL:(010)68476606】



[火星人 ] 利用heartbeat實現三台主機自動切換網路參數已經有941次圍觀

http://coctec.com/docs/net/show-post-68183.html