一般說的雙機熱備是指兩臺機器都在運行,但並非兩臺機器都同時在提供服務。
當提供服務的一臺出現故障的時候,另一臺會立刻自動接管而且提供服務,並且切換的時間很是短。下面來以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
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就會便可接管服務。