天天看點

利用heartbeat實作三台主機自動切換網絡參數(兩主一備)

 利用heartbeat實作三台主機自動切換網絡參數(IP、MAC、Hostname)

一、環境

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 hw ether $RMAC

  /sbin/ifconfig eth0 192.168.32.31 broadcast 192.168.32.255 netmask 255.255.255.0

  /bin/hostname node1

  *)

  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  <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的網絡參數修改腳本

VMAC=00:1E:68:1E:99:5E  

RMAC=00:1E:68:1E:19:5E                              #注意:與node0中Remac1中RMAC不一樣

[root@node1 ~]# cat /etc/ha.d/resource.d/Remac2   #備份node2的網絡參數修改腳本

VMAC=00:1E:68:1E:88:5E

RMAC=00:1E:68:1E:19:5E                            #注意:與node中Remac1中RMAC不一樣

  /sbin/ifconfig eth0 192.168.32.22 broadcast 192.168.32.255 netmask 255.255.255.0

  /bin/hostname nodevir2

  /sbin/ifconfig eth0 192.168.32.31 broadcast 192.168.32.255 netmask 255.255.255.0  

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  

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  

RMAC=00:1E:68:1E:16:7E

  /sbin/ifconfig eth0 192.168.32.32 broadcast 192.168.32.255 netmask 255.255.255.0

  /bin/hostname node2

3.2 主配置檔案(/etc/ha.d/ha.cf)

node    node2            #主node2,排列順序越靠前越優先

3.3 資源檔案(/etc/ha.d/haresource)

3.4 認證檔案(/etc/ha.d/authkeys)

四、測試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裝置完成所有操作時,備份節點才拿到接管主節點資源的所有權,進而接管主節點的資源。 

本文轉自netsword 51CTO部落格,原文連結:http://blog.51cto.com/netsword/768671