一.結構以及配置: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