1. 程式人生 > >【轉】keepalived多個虛IP的雙機叢集

【轉】keepalived多個虛IP的雙機叢集

本文轉自 http://blog.sina.com.cn/s/blog_5670025101015lnc.html

這兩天接了一個專案,專案要求多專線接入一個伺服器叢集,同時,還需要每個專線無法互訪,還需要在專線上不能出現多餘的路由跳數,也就是說,NAT是不允許的,專案在小範圍環境下測試通過了,放上來,有需要的能幫上忙的隨便拖走吧。
拓撲如下: keepalived多個虛IP的雙機叢集



通過專線鏈路接入到運營商後,由於不允許使用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的虛擬交換機直接透明連線到華為S5700vlan分別為67。根據子網進行劃分。


測試服務: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 { 
                script "/opt/mysql_chk.sh"         ###
監控指令碼 
                interval 2                             ###
監控時間 
                weight 2                                ###
權重

vrrp_script chk_web_port { 
                script "/opt/
url_chk.sh"         ###
監控指令碼 
                interval 2                             ###
監控時間 
                weight 2                                ###
權重

vrrp_instance VI_1 { 
        state MASTER                            ###
設定為 主 
        interface eth0                             ###
監控網絡卡,這裡一般考慮為心跳網絡卡    
        virtual_router_id 51                    ###
路由ID,實驗證明2個可以不一樣,否則會出現多IP

無法拉起
        priority 101                                 ###
權重值 MASTRE 一定要高於 BAUCKUP 
        authentication { 
                     auth_type PASS             ###
加密 
                     auth_pass eric                ###
加密的密碼,兩臺伺服器一定要一樣,不然會出錯 
        
        track_script { 
                chk_http_port

chk_web_port                     ### 執行監控的服務 
        
        virtual_ipaddress { 
             192.168.0.225/24

             192.168.6.225/24                            ###    VIP 地址 可以啟用多個,注意標註子網掩碼
        

 

從機的配置基本一致,需要更改的有優先順序和伺服器型別:


vrrp_script chk_mysql_port { 
                script "/opt/mysql_chk.sh"         ###
監控指令碼 
                interval 2                             ###
監控時間 
                weight 2                                ###
權重

vrrp_script chk_web_port { 
                script "/opt/
url_chk.sh"         ###
監控指令碼 
                interval 2                             ###
監控時間 
                weight 2                                ###
權重

vrrp_instance VI_1 { 
        state BACKUP                            ###
設定為 從 
        interface eth0                             ###
監控網絡卡,這裡一般考慮為心跳網絡卡    
        virtual_router_id 52                    ###
路由ID,實驗證明2個可以不一樣,否則會出現多IP無法拉起

        priority 100                                 ### 權重值 MASTRE 一定要高於 BAUCKUP 
        authentication { 
                     auth_type PASS             ###
加密 
                     auth_pass eric                ###
加密的密碼,兩臺伺服器一定要一樣,不然會出錯 
        
        track_script { 
                chk_http_port

                chk_web_port                     ### 執行監控的服務 

        
        virtual_ipaddress { 
             192.168.0.225/24

             192.168.6.225/24                            ###    VIP 地址 可以啟用多個,注意標註子網掩碼
        


配置完成後直接執行keepalived就可以,當然,註冊成服務更好


輸入ip addr進行檢查


當發現啟用了虛擬IP後,配置完成

伺服器的網絡卡都不設定閘道器,只在本子網內廣播,在兩個掩碼位位24的子網下測試通過,可以通過tcpdump -i 網絡卡 -vvn arp的方式發現到虛IP所獲得的廣播。

由於沒有得到業務的雙機關係,目前只測試了mysqlweb還有鏈路狀態的虛IP的漂移,全部測試通過,包括業務宕機後的切換。