Nginx+keepalive主從 雙機熱備 + 自動切換解決方案

jopen 12年前發布 | 36K 次閱讀 Nginx Web服務器

環境采集cenots 6.3 64位迷你安裝,因為安裝前,你需要做一些工作
yum install -y make wget 
如果你愿意可以更新下系統,更換下yum源.
1.安裝keepalive
官方最新版  keepalived-1.2.7 
tar zxvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
在此之前。請安裝一下一些簡單的工具 
yum install -y gcc openssl-devel popt-devel
不然會編譯不成功的。
然后
./configure
make && make install 

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
chmod +x /etc/init.d/keepalived
chkconfig --add keepalived
chkconfig keepalived on
mkdir /etc/keepalived
ln -s /usr/local/sbin/keepalived /usr/sbin/

2.安裝nginx 
nginx-1.2.5.tar.gz
tar zxvf  nginx-1.2.5.tar.gz
cd nginx-1.2.5
安裝一下相關組件.
yum install -y pcre-devel
./configure --prefix=/usr/local/nginx --user=www --group=www  --with-http_stub_status_module --with-http_ssl_module
make && make install 

3.配置keepalive
兩臺服務器端keepalived.conf內容都為如下,都設置為backup,不搶占,注意修改優先級不同,更詳細的keepalived配置文件說明可以執行man keepalived.conf查看:

! Configuration File for keepalived
global_defs {
   notification_email {
    admin@lvtao.net
        }
   notification_email_from admin@lvtao.net
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

監控服務.NGINX mysql等

vrrp_script chk_nginx {
    script "/home/check_nginx.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP  #主從設置 MASTER
    interface eth2  #網卡名
    virtual_router_id 51
    mcast_src_ip 10.0.1.133 #本機IP
    priority 50  #從機小于主機
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass chtopnet
    }
    virtual_ipaddress {
        10.0.1.2  #VIP 的IP
    }
    track_script {
        chk_nginx  #檢測腳本
    }

}

virtual_server 10.0.1.2 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 10.0.1.132 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 10.0.1.133 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

啟動相關服務。我在這兒使用的是nginx ,每個上面開了一個站點,通過IP可以直接訪問的。啟動keepalive后,就可以通過VIP的虛擬IP 10.0.1.2來訪問站點了,測試方法就是 停止任何其中一個站點,看它是否能自動切換到從服務器上。

上面代碼中 nginx的檢測腳本如下 :

!/bin/bash

if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
 /usr/local/nginx/sbin/nginx
 sleep 5
 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
 then
 killall keepalived
 fi
fi


在兩臺Web Server上執行realserver.sh腳本,為lo:0綁定VIP地址10.0.1.2、抑制ARP廣播。

!/bin/bash

description: Config realserver


VIP=10.0.1.2
 
/etc/rc.d/init.d/functions
 
case "$1" in
start)
       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /sbin/route add -host $VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       /sbin/ifconfig lo:0 down
       /sbin/route del $VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
 
exit 0

分別在主從機上執行   sh realserver.sh start  就可實現負載均衡及高可用集群了;

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!