1. 程式人生 > >Nginx+keepalive反向代理

Nginx+keepalive反向代理

nginx、linux、反向代理

1.安裝keepalive

官方最新版 keepalived-1.2.7

tar zxvf keepalived-1.2.7.tar.gzcd 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/keepalivedchkconfig --add keepalived
chkconfig keepalived onmkdir /etc/keepalivedln -s /usr/local/sbin/keepalived /usr/sbin/

2.安裝Nginx

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 {
    [email protected]
        }
   notification_email_from [email protected]
   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 就可實現負載均衡及高可用集群了;

keepalive相關參數說明

 ! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]             #設置報警郵件地址,可以設置多個,每行一個。 需開啟本機的sendmail服務
   }
   notification_email_from  [email protected]        #設置郵件的發送地址
   smtp_server 127.0.0.1                                #設置smtp server地址
   smtp_connect_timeout 30                              #設置連接smtp server的超時時間
   router_id LVS_DEVEL                                  #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息
}

vrrp_instance VI_1 {
    state MASTER              #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器
    interface eth0            #指定HA監測網絡的接口
    virtual_router_id 51      #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的
    priority 100              #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級
    advert_int 1              #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {          #設置驗證類型和密碼
        auth_type PASS        #設置驗證類型,主要有PASS和AH兩種
        auth_pass 1111        #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信
    }
    virtual_ipaddress {       #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個
        10.0.0.148
    }
}

virtual_server 10.0.0.148 80 {      #設置虛擬服務器,需要指定虛擬IP地址和服務端口,IP與端口之間用空格隔開
    delay_loop 6                    #設置運行情況檢查時間,單位是秒
    lb_algo rr                      #設置負載調度算法,這裏設置為rr,即輪詢算法
    lb_kind DR                      #設置LVS實現負載均衡的機制,有NAT、TUN、DR三個模式可選
    persistence_timeout 50          #會話保持時間,單位是秒。這個選項對動態網頁是非常有用的,為集群系統中的session共享提供了一個很好的解決方案。
                                    #有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話的保持時間。
                                    #需要註意的是,這個會話保持時間是最大無響應超時時間,也就是說,用戶在操作動態頁面時,如果50秒內沒有執行任何操作,
                                    #那麽接下來的操作會被分發到另外的節點,但是如果用戶一直在操作動態頁面,則不受50秒的時間限制
    protocol TCP                    #指定轉發協議類型,有TCP和UDP兩種

    real_server 10.0.0.137 80 {     #配置服務節點1,需要指定real server的真實IP地址和端口,IP與端口之間用空格隔開
        weight 3                    #配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權值大小可以為不同性能的服務器
                                    #分配不同的負載,可以為性能高的服務器設置較高的權值,而為性能較低的服務器設置相對較低的權值,這樣才能合理地利用和分配系統資源
        TCP_CHECK {                 #realserver的狀態檢測設置部分,單位是秒
            connect_timeout 10      #表示3秒無響應超時
            nb_get_retry 3          #表示重試次數
            delay_before_retry 3    #表示重試間隔
            connect_port 80
        }
    }
    real_server 10.0.0.139 80 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}


Nginx+keepalive反向代理