【轉】keepalived多個虛IP的雙機叢集
本文轉自 http://blog.sina.com.cn/s/blog_5670025101015lnc.html
這兩天接了一個專案,專案要求多專線接入一個伺服器叢集,同時,還需要每個專線無法互訪,還需要在專線上不能出現多餘的路由跳數,也就是說,NAT是不允許的,專案在小範圍環境下測試通過了,放上來,有需要的能幫上忙的隨便拖走吧。拓撲如下:
通過專線鏈路接入到運營商後,由於不允許使用NAT,因此,採用了多埠繫結多個基於子網的VLAN的接入方式,可以保證隔離每個VLAN的同時,不會產生多餘的雜波。並且也滿足了客戶不允許出現在伺服器端的子網問題。
軟體為keepalived 伺服器數量,這裡只寫兩個,多個同理。
監控的服務,web,mysql 交換機是華為的,埠模式為hybrid 設定了20個埠併入多個VLAN,VLANID 為6和7,分別對應192.168.0.0/24子網和192.168.6.0/24子網。
測試環境:
ip地址:伺服器A:192.168.0.223/24
192.168.6.223/24
伺服器B:192.168.0.224/24
192.168.6.224/24
虛擬IP:192.168.0.225/24
192.168.6.225/24
交換機為esxi4的虛擬交換機直接透明連線到華為S5700上。vlan分別為6和7。根據子網進行劃分。
測試服務:tomcat,mysql
監測mysql指令碼:
這裡的指令碼有兩種監控方式,請自行取捨
指令碼1:
#i /bin/bash
MYSQL_ALIVE=`ps -C mysqld |grep -v PID|wc -l`
if [ $MYSQL_ALIVE -eq 0 ];then
service mysql restart
sleep 3
if [ `ps -C mysqld |grep -v PID |wc -l` -eq 0 ];then
killall keepalived
fi
fi
指令碼2:
這個需要提前建立一個至少許可權是reload的使用者,一般來說,許可權不用很高,因為使用這個指令碼需要連結資料庫
#! /bin/bash
STATUS=`mysqladmin ping -u設定的使用者名稱 -p設定的密碼`
if [ “$STATUS” != “mysqld is alive” ];then
service mysql restart
RE=$?
sleep 3
if [ $RE != 0 ];then
killall keepalived
fi
fi
監控web伺服器指令碼:
#! /bin/bash
#注意,這裡需要tomcat開啟了所有IP地址的web請求,
URL=這裡填寫首頁的index地址
URL_STATUS=`curl -o /dev/null -s -w %{http_code} $URL`
if [ $URL_STATUS != 200 ];then
killall tomcat #這裡直接查到PID殺掉也可以,方法自由
/opt/tomcat/bin/start.sh #這裡是啟動tomcat,當然,有其他方法也可以
sleep 3
if [ `curl -o /dev/null -s -w %{http_code} $URL` != 200 ];then
killall keepalived
fi
fi
安裝及配置keepalived
安裝檔案有2個,分別是依賴庫libnet-1.1.4.tar.gz和自身程式keepalived-1.1.19.tar.gz
首先安裝依賴庫
tar -zxvf libnet-1.1.4.tar.gz
進入libnet目錄
cd libnet-1.1.4
編譯
./configure
編譯完成後
make && make install
安裝keepalived
tar -zxvf keepalived-1.1.19.tar.gz
進入目錄
cd keepalived-1.1.19
編譯
./configure
完成後安裝
make && make install
拷貝配置檔案
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig
cp /usr/loc al/etc/rc.d/init.d/keepalived /etc/init.d #這裡有個問題,如果是在suse的系統上,會出現
service的時候找不到一個系統內建指令碼,這裡暫
時不執行
修改主機配置檔案
vim /etc/keepalived/keepalived.conf
vrrp_script chk_mysql_port {
}
vrrp_script chk_web_port {
}
vrrp_instance VI_1 {
無法拉起
chk_web_port
}
從機的配置基本一致,需要更改的有優先順序和伺服器型別:
vrrp_script chk_mysql_port {
}
vrrp_script chk_web_port {
}
vrrp_instance VI_1 {
}
配置完成後直接執行keepalived就可以,當然,註冊成服務更好
輸入ip addr進行檢查
當發現啟用了虛擬IP後,配置完成
伺服器的網絡卡都不設定閘道器,只在本子網內廣播,在兩個掩碼位位24的子網下測試通過,可以通過tcpdump -i 網絡卡 -vvn arp的方式發現到虛IP所獲得的廣播。
由於沒有得到業務的雙機關係,目前只測試了mysql和web還有鏈路狀態的虛IP的漂移,全部測試通過,包括業務宕機後的切換。