nginx+keepalived雙主熱備

一.結構以及配置:html

1.nginx基本結構信息
nginx

   Nginx+keepalived(兩臺)web

   192.168.1.77  nginx  lb0服務器

   192.168.1.60  nginx  lb1session


   192.168.1.80  vip0   lb0架構

   192.168.1.81  vip1   lb1app

 

   域名:負載均衡

   192.168.1.80   www.crh.comcurl

   192.168.1.81   www.crh.com ide

2.軟件安裝和配置

   #tar zxf keepalived-1.2.7

   #cd keepalived-1.2.7

   #./configure

   #make && make install

安裝完成以後,拷貝啓動文件和配置文件等。

   #cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

   #cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/keepalived

   #cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

配置文件:

   /home/ytb/server/conf/nginx_main.conf   (nginx主配置文件)

   /etc/keepalived/keepalived.conf   (keepalived主配置文件)

3.啓動腳本:

   /etc/init.d/nginx start

   /etc/inti.d/keepalived  start


二.Keepalived配置

1.Nginx雙主負載lb0服務器的keepalived配置文件的配置

   nginx  lb0 (192.168.1.77)

   #vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  router_id Nginx_Id_1  

}


vrrp_script chk_nginx {

   script "/root/bin/check_http.sh"  #定義檢測腳本

   interval 2      #檢測間隔

   weight 2

}


vrrp_instance Nginx1 {

   state MASTER

   interface eth1

   virtual_router_id 51

   priority 150


   authentication {

       auth_type PASS

       auth_pass w3e4r5t5

   }


   track_script {

       chk_nginx

   }


   virtual_ipaddress {

       192.168.1.80

   }

}


vrrp_instance Nginx2 {

   state BACKUP

   interface eth1

   virtual_router_id 52

   priority 110


   authentication {

       auth_type PASS

       auth_pass w3e4r5t5

   }


   virtual_ipaddress {

       192.168.1.81

   }

}

  檢測腳本:

url="http://www.kankanapp.com/test.html"

status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/  {print $2}')

if [ "$status" != "200" ];then

/etc/init.d/keepalived stop

fi


注: 以上腳本是判斷若是主服務器上的nginx 不正常,則立刻中止主服務器的keepalived 工做, IP 會自動切換到從服務器上,keepalive 只檢測兩個keepalived 是否正常工做來決定切換vip,不使用此腳本若是nginx 掛了就不會自動切換了。


2.Nginx雙主負載lb0服務器的keepalived配置文件的配置.

    Nginx 負載均衡備份服務器(同時此服務器也擔當其中的一臺源服務器)

    192.168.1.60 nginx lb1

    #vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id Nginx_Id_2

}


vrrp_script chk_nginx {

script "/root/bin/check_http.sh"

interval 2

weight 2

}


vrrp_instance Nginx1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 110


authentication {

auth_type PASS

auth_pass w3e4r5t5

}


virtual_ipaddress {

192.168.1.80

}

}



vrrp_instance Nginx2 {

state MASTER

interface eth0

virtual_router_id 52

priority 150


authentication {

auth_type PASS

auth_pass w3e4r5t5

}


track_script {

chk_nginx

}


virtual_ipaddress {

192.168.1.81

     }

}

LB1上面也有檢測腳本,跟上面LB0的檢測腳本同樣,把他們放到後臺運行就能夠達到檢測的效果了

三.切換測試

此架構是爲了充分利用服務器,並負載均衡,兩個vip 使用DNS 輪詢的方式將域名www.crh.com 綁定到這兩個IP 上

1.將nginx lb0 上的nginx 進程殺掉或down 機,vip0 會自動切換至nginx lb1 上.

2.當nginx lb0 服務器恢復之後,vip0 又切回lb0 上,爲了保持負載均衡.

 同理在lb1 上測試結果同樣.

3.測試配圖以下:

當lb0執行 pkill -9 nginx後

在LB0 上執行/etc/init.d/nginx start 啓動nginx,並執行service keepalived start 後:


四,補充說明

1.此文檔單純是爲了測試Nginx+KeepAlived 雙主,不涉及nginx 配置

2.兩個VIP 在應用正常的狀況下必定要分佈在兩臺機器上以達到負載均衡的目的,可是有可能在服務器故障恢復的時候出現session 不能同步的問題,是瞬間現象,若是想要不搶佔,請把MASTER設成BACKUP,並添加參數nopreempt

相關文章
相關標籤/搜索