使用keepalived監控tomcat 達到雙機熱備


  通常說的雙機熱備是指兩台機器都在運行,但並不是兩台機器都同時在提供服務。
  當提供服務的一台出現故障的時候,另外一台會馬上自動接管並且提供服務,而且切換的時間非常短。下面來以keepalived結合tomcat來實現一個web服務器的雙機熱備。
  keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虛擬路由冗余協議。在VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。
VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。一組VRRP路由器協同工作,共同構成一台虛擬路由器。 Vrrp中存在着一種選舉機制,用以選出提供服務的路由即主控路由,其他的則成了備份路由。當主控路由失效后,備份路由中會重新選舉出一個主控路由,來繼續工作,來保障不間斷服務。
  我們在本文中的測試環境如下:
  兩台物理服務器和一個虛擬服務器(vip):
  master:192.168.248.128  
  backup: 192.168.248.129
  vip: 192.168.248.200 (虛擬ip)
測試環境的網絡圖如下:

在NodeA和NodeB分別部署tomcat並啟動,然后安裝keepalived幫助我們監控tomcat,我們通過vip:192.168.248.200可以訪問到tomcat,這時候訪問的其實是NodeA上的tomcat,我們如果關閉NodeA上面的tomcat,這時候NodeB會自動幫助我們接管,這樣我們的服務依舊可以運行,下面我們來安裝keepalived。

keepalived推薦使用yum安裝,源碼安裝之后的配置挺復雜的

yum install keepalived

  安裝完成后需要配置keepalived的配置文件,文件位於/etc/keepalived/keepalived.conf,下圖中為需要修改的部分,默認的配置文件中在其后還有很多內容,本實例只是簡單的DEMO,所以那些內容暫時用不上,可以全部刪除,接下來說下圖中這部分的配置

  • state 主服務器為MASTER,其他服務器均為BACKUP
  • interface 通信用的網卡,在之前查看IP時可以看到
  • virtual_router_id 主從服務器此ID必須一致
  • priority 優先級,主服務器必須大於其他服務器,數值越大優先級越高
  • authentication 主從服務器必須一致
  • virtual_ipaddress 虛擬IP地址,主從服務器必須一致,此IP為客戶端訪問時使用的IP

NodeA的keepalived.conf配置如下

! Configuration File for keepalived
global_defs {
    notification_email {
        zhouxiao@example.com
        itsection@example.com
    }
    notification_email_from itsection@example.com
    smtp_server mail.example.com
    smtp_connect_timeout 30
    router_id LVS_DEVEL
}
vrrp_script chk_tomcat {
    #script "killall -0 nginx"
    script "/etc/keepalived/tomcat_check.sh"
    interval 2
    weight -5
    fall 3  
    rise 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    mcast_src_ip 192.168.248.128
    virtual_router_id 51
    priority 101
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.248.200
    }
    track_script {
       chk_tomcat
    }
}

NodeB同樣使用 # yum install keepalived 安裝

配置文件如下

! Configuration File for keepalived
global_defs {
    notification_email {
        zhouxiao@example.com
        itsection@example.com
    }
    notification_email_from itsection@example.com
    smtp_server mail.example.com
    smtp_connect_timeout 30
    router_id LVS_DEVEL
}
vrrp_script chk_tomcat {
    #script "killall -0 nginx"
    script "/etc/keepalived/tomcat_check.sh"
    interval 2
    weight -5
    fall 3  
    rise 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    mcast_src_ip 192.168.248.129
    virtual_router_id 51
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.248.200
    }
    track_script {
       chk_tomcat
    }
}

這兩個配置文件不同的地方就是state 表示一個是主機一個是備機,mcast_src_ip 寫上當前服務器的ip,priority 主機要比備機的要高,更多的配置說明,可以在網上搜索更多的資料

接下來就是NodeA 和 NodeB都用到的檢測tomcat是否運行的腳本tomcat_check.sh

#!/bin/bash
JAVA_PROCESS=`ps -C java --no-heading| wc -l`
if [ $JAVA_PROCESS -eq 0 ];then
echo "tomcat is stop"
sleep 2
if [ `ps -C java --no-heading| wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi

 

關閉兩台服務器的防火牆

這個腳本的意思就是檢測是否有tomcat在運行,如果沒有的話,就把keepalived給停止掉,這樣vip就能從主機master切換到備機BACKUP上了。把這個文件分別放入兩台機器的/etc/keepalived文件夾內,然后#cd /etc/keepalived 進入到該文件夾內,輸入# chmod 777 tomcat_check.sh 為這個腳本添加可以執行的命令

我們可以使用 #./tomcat_check.sh 看看這個腳本能否執行,如果腳本報錯了,可能是文本的編碼問題,可以點擊這里解決

這樣就全部配置完了。然后我們分別開啟兩台機器上的tomcat以及keepalived

service keepalived restart

在NodeA 我們輸入 # ip addr

我們可以看到在 eth0這個網卡上綁定了我們的vip 192.168.248.200,

這時候,我們分別訪問http://192.168.248.128:8080/  http://192.168.248.200:8080/  http://192.168.248.129:8080/

 

 

 這時候,我們停掉主機128上的tomcat,依次訪問上面的三個網址,可以發現:

 

在NodeB 129服務器上,我們輸入# ip addr

vip切換到備份機器上來了,這時候說明我們使用keepalived監控tomcat成功了,如果NodeA上的tomcat突然停掉,NodeB上的tomcat就會即可接管服務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM