Heartbeat v2 + haresouce 實現WEB高可用

一、簡介

  heartbeat最後一個v2版本是2.1.4,可以使用v1版本的haresource和crm,本實驗以haresource爲crm來講解WEB的HA,haresource是不支持資源的監控操作,因此當資源出現了掛起,異常問題時不會導致heartbeat資源的轉移,就存在問題,因此需要切合其他方式來實現資源的健康控制,這邊我使用自己寫得腳本的SHELL腳本來實現。



二、拓撲

wKioL1UjkaaiDsXEAADeqj7ov7Y916.jpg

三、配置

  0、  HA前提:

         1.時間同步(心跳信息要時刻一致)

                utpdate  .....

         2.主機名通信(ha當中的心跳信息的傳遞是通過主機名解析得來)

                uname  -n   與/etc/hosts當中的一致

        3.ssh互信 (當heartbeat出現問題的時候,通過ssh來自動完成資源的轉移操作)


  1、說明:

         rhel5當中的heartbeat軟件包可以從epel當中下載或者源代碼編譯,rhel6開始已自帶


heartbeat的主要文件如下:

  

 /etc/ha.d/authkeys     #心跳信息認證
           ha.cf        #message line心跳信息的配置參數
           haresource   #v1版本的crm
 
 /usr/share/heartbeat/  #很多可執行的程序
                     hb_standy   #當前節點切換爲備份節點
                     hb_takeover  #搶回資源,變爲主節點
                     hb_delnode   #刪除節點



2、配置authkeys,認證信息

#chmod 600 /etc/ha.d/authkeys
#openssl rand -base64 16  >> /etc/ha.d/authkeys
# tail -5 /etc/ha.d/authkeys

wKioL1UjllKwyvZjAADMeV-KR0U688.jpg


3.配置ha.cf,心跳參數

..............
#debugfile /var/log/ha-debug   #調試日誌位置

#logfile /var/log/ha-log       #日誌記錄在本地文件位置
#logfacility    local0         #通過syslog記錄日誌(同上,2選1即可)

#keepalive 2                    #每2s發送一次心跳包
#deadtime 30                    #死亡時間
#warntime 10                    #警告時間
#initdead 120                   #初始化死亡時間

udpport 694                     #進程監聽udp 694端口

#baud   19200                    #波特率19200,使用com口才使用的配置,一般不用  
#       serial  serialportname ...
#serial /dev/ttyS0      # Linux
#serial /dev/cuaa0      # FreeBSD
#serial /dev/cuad0      # FreeBSD 6.x
#serial /dev/cua/a      # Solaris
#---------------------------------------------------

bcast   eth1            # Linux    #在eth1口使用廣播傳遞心跳信息
#bcast  eth1 eth2       # Linux
#bcast  le0             # Solaris
#bcast  le1 le2         # Solaris
#mcast eth0 225.0.0.1 694 1 0
#

#ucast eth0 192.168.1.2

auto_failback off

#node   ken3
node node1.yu.com                 #節點1
node node2.yu.com                 #節點2

ping 192.168.192.1                #pingnode節點爲192.168.192.1

#ping_group group1 10.10.10.254 10.10.10.253
.......



4.配置資源

node1.yu.com  192.168.192.222/24/eth0 httpd  #默認在node1節點啓動vip和http服務


5.HA測試

wKiom1UjmuaBSFusAADJmhzJlJ4661.jpg

wKioL1UjnC6SV7-ZAAj1mJ-eZgo570.jpg

wKiom1UjmumSiSl0AAfX10qbMb8523.jpg

wKioL1UjnDDSFR85AADCviLBQl8167.jpg

6.添加額外腳本實現資源監控


此時,HA即可實現,關閉heartbeat也能實現切換,但是如果vip 或者httpd進程異常,那麼heartbeat是不會現在資源轉移的,也就是說heartbeat是不會監控vip和httpd的健康狀態,因此爲了實現httpd異常時,也能保證HA,這邊我使用一個簡單地腳本來實現,如下:

[root@node1 html]# cat /etc/ha.d/1.sh

#!/bin/bash
#
vip="192.168.192.222";

while true;
do
ip addr show | grep $vip > /dev/null
ip_num=$?
nc 127.0.0.1 80 -z > /dev/null
port_return=$?
 if [ $ip_num -eq 0  ] && [ $port_return -eq 0 ] ;then
   let num=0
 elif [ $ip_num -eq 0 ] && [ $port_return -ne 0 ];then
    let num++
 elif [ $ip_num -ne 0 ] && [ $port_return -eq 0 ];then
    let num++
 elif [ $ip_num -ne 0 ] && [ $port_return -ne 0 ];then
    let num=0
 fi
sleep 1
 if [ $num -gt 2 ]; then
   service heartbeat stop > /dev/null
 fi
done

        ###大致的過程如下,判斷當前的節點是否有vip或者httpd進程,當一個爲0一個非爲0即表示存在問題的資源,這個時候休眠2s,然後再執行一次,如果還是一樣的問題,則關閉當前節點的heartbeat的服務,實現切換和資源的轉移。

 將1.sh加入到heartbeat的啓動腳本中,隨着heartbeat啓動和關閉:

  編輯/etc/init.d/heartbeat在start和stop處修改爲如下:

 start)
        StartLogd
        RunStartStop pre-start
        StartHA
        RC=$?
        Echo
        if
          [ $RC -eq 0 ]
        then
          [ ! -d $LOCKDIR ] && mkdir -p $LOCKDIR
          touch $LOCKDIR/$SUBSYS
        fi
        RunStartStop post-start $RC
        /etc/ha.d/1.sh &                ##讓1.sh也在後臺實時操作
        ;;
 
 stop)
        RunStartStop "pre-stop"
        StopHA
        RC=$?
        Echo
        if
          [ $RC -eq 0 ]
        then
          rm -f $LOCKDIR/$SUBSYS
        fi
        RunStartStop post-stop $RC
        StopLogd
        pkill 1.sh                ##殺掉1.sh的進程
        ;;
        
  restart)
        sleeptime=`ha_parameter deadtime`
        StopHA
        pkill  1.sh
        Echo
        EchoNoNl Waiting to allow resource takeover to complete:
        sleep $sleeptime
        sleep 10 # allow resource takeover to complete (hopefully).
        echo_success
        Echo
        StartHA
        /etc/ha.d/1.sh &
        Echo
        ;;


此時vip或者httpd的進程出現問題都可以實現資源的轉移。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章