使用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)
測試環境的網絡圖以下:java

在NodeA和NodeB分別部署tomcat並啓動,而後安裝keepalived幫助咱們監控tomcat,咱們經過vip:192.168.248.200能夠訪問到tomcat,這時候訪問的實際上是NodeA上的tomcat,咱們若是關閉NodeA上面的tomcat,這時候NodeB會自動幫助咱們接管,這樣咱們的服務依舊能夠運行,下面咱們來安裝keepalived。nginx

keepalived推薦使用yum安裝,源碼安裝以後的配置挺複雜的

yum install keepalived

  安裝完成後須要配置keepalived的配置文件,文件位於/etc/keepalived/keepalived.conf,下圖中爲須要修改的部分,默認的配置文件中在其後還有不少內容,本實例只是簡單的DEMO,因此那些內容暫時用不上,能夠所有刪除,接下來講下圖中這部分的配置web

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

NodeA的keepalived.conf配置以下tomcat

! 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 安裝bash

配置文件以下服務器

! 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

 

關閉兩臺服務器的防火牆ui

這個腳本的意思就是檢測是否有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就會便可接管服務。

相關文章
相關標籤/搜索