Keepalived+nginx造成流量异常
1、使用虛擬機搭建環境
也是A、B 2臺機器,使用一樣的配置和軟件。
環境:CentOS6.5 2臺虛擬機
keepalived版本1.2.19
tengine版本2.1.2
節點A :
[root@A keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {?
?? notification_email {?
???? admin@localhost.com???????????? #設置報警郵件地址,可以設置多個,每行一個。 需開啟本機的sendmail服務?
?? }?
?? notification_email_from? admin@lvtao.net??????? #設置郵件的發送地址?
?? smtp_server 127.0.0.1??????????????????????????????? #設置smtp server地址?
?? smtp_connect_timeout 30????????????????????????????? #設置連接smtp server的超時時間?
?? router_id LVS_DEVEL????????????????????????????????? #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息?
}
vrrp_script check_nginx {?
??? script "/etc/keepalived/check_http_port"?
??? interval 2????????????????? #檢查間隔?
??? weight 5??????????????????? #權重?
}
vrrp_instance VI_1 {?
??? state BACKUP????????????? #指定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負載均衡器之間同步檢查的時間間隔,單位是秒?
??? nopreempt???????????????? #設置 nopreempt 防止搶占資源,只生效BACKUP節點?
??? authentication {????????? #設置驗證類型和密碼?
??????? auth_type PASS??????? #設置驗證類型,主要有PASS和AH兩種?
??????? auth_pass 1111??????? #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信?
??? }?
??? virtual_ipaddress {?????? #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個?
??????? 10.0.0.15?
??? }?
??? track_script {?
??????? check_nginx?
??? }?
}
virtual_server 10.0.0.15 80 {?
??? delay_loop 6?
??? lb_algo wrr?
??? lb_kind DR?
??? persistence_timeout 50?
??? protocol TCP
??? real_server 10.0.0.13 80 {?
??????? weight 1?
??????? TCP_CHECK {?
??????????? connect_port 80?
??????????? connect_timeout 3?
??????????? delay_before_retry 3?
??????? }?
??? }
??? real_server 10.0.0.14 80 {?
??????? weight 1?
??????? TCP_CHECK {?
??????????? connect_port 80?
??????????? connect_timeout 3?
??????????? delay_before_retry 3?
??????? }?
??? }?
}
?
節點B:
[root@B keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {?
?? notification_email {?
???? admin@localhost.com???????????? #設置報警郵件地址,可以設置多個,每行一個。 需開啟本機的sendmail服務?
?? }?
?? notification_email_from? admin@lvtao.net??????? #設置郵件的發送地址?
?? smtp_server 127.0.0.1??????????????????????????????? #設置smtp server地址?
?? smtp_connect_timeout 30????????????????????????????? #設置連接smtp server的超時時間?
?? router_id LVS_DEVEL????????????????????????????????? #表示運行keepalived服務器的一個標識。發郵件時顯示在郵件主題的信息?
}
vrrp_script check_nginx {?
??? script "/etc/keepalived/check_http_port"?
??? interval 2????????????????? #檢查間隔?
??? weight 5??????????????????? #權重?
}
vrrp_instance VI_1 {?
??? state BACKUP????????????? #指定keepalived的角色,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器?
??? interface eth0??????????? #指定HA監測網絡的接口?
??? virtual_router_id 51????? #虛擬路由標識,這個標識是一個數字,同一個vrrp實例使用唯一的標識。即同一vrrp_instance下,MASTER和BACKUP必須是一致的?
??? priority 99?????????????? #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大于BACKUP的優先級?
??? advert_int 1????????????? #設定MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒?
??? nopreempt???????????????? #設置 nopreempt 防止搶占資源,只生效BACKUP節點?
??? authentication {????????? #設置驗證類型和密碼?
??????? auth_type PASS??????? #設置驗證類型,主要有PASS和AH兩種?
??????? auth_pass 1111??????? #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信?
??? }?
??? virtual_ipaddress {?????? #設置虛擬IP地址,可以設置多個虛擬IP地址,每行一個?
??????? 10.0.0.15?
??? }?
??? track_script {?
??????? check_nginx?
??? }?
}
virtual_server 10.0.0.15 80 {?
??? delay_loop 6?
??? lb_algo wrr?
??? lb_kind DR?
??? persistence_timeout 50?
??? protocol TCP
??? real_server 10.0.0.13 80 {?
??????? weight 1?
??????? TCP_CHECK {?
??????????? connect_port 80?
??????????? connect_timeout 3?
??????????? delay_before_retry 3?
??????? }?
??? }
??? real_server 10.0.0.14 80 {?
??????? weight 1?
??????? TCP_CHECK {?
??????????? connect_port 80?
??????????? connect_timeout 3?
??????????? delay_before_retry 3?
??????? }?
??? }?
}
?
[root@A keepalived]# cat relserver.sh?
#!/bin/bash?
#description: Config realserver
VIP=10.0.0.15
. /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
[root@A keepalived]#
?
[root@A keepalived]# cat check_http_port?
#!/bin/bash?
#思路:1、使用curl檢查本地nginx可用性?
#????? 2、檢查失敗嘗試啟動nginx?
#????? 3、仍失敗,則關閉本地keepalived
NGINX=/usr/local/nginx/sbin/nginx?
PORT="80"
#curl -v -I -m 10 -o /dev/null -s -w %{http_code}"\n"?http://127.0.0.1/?
curl?http://127.0.0.1:$PORT?
if [ $? -ne 0 ]; then?
??????? #重啟nginx?
??????? /etc/init.d/nginx restart?
#?????? $NGINX -s stop?
#?????? $NGINX?
??????? sleep 3?
??????? curl?http://127.0.0.1/?
??????? [ $? -ne 0 ] && /etc/init.d/keepalived stop?
fi
exit 0?
[root@A keepalived]#
?
2、3個客戶端,依次訪問。就能重現流量異常。
[root@tsm-test-centos6 ~]# curl 10.0.0.15?
<!DOCTYPE html>?
<html>?
<head>?
<title>Welcome to tengine!</title>?
<style>?
??? body {?
??????? 35em;?
??????? margin: 0 auto;?
??????? font-family: Tahoma, Verdana, Arial, sans-serif;?
??? }?
</style>?
</head>?
<body>?
Welcome to tengine! B?
If you see this page, the tengine web server is successfully installed and?
working. Further configuration is required.
For online documentation and support please refer to?
<a href="http://tengine.taobao.org/">tengine.taobao.org.
<em>Thank you for using tengine.</em>
</body>?
</html>?
[root@tsm-test-centos6 ~]#
?
?
[root@tsm-app-dev1 ~]# curl 10.0.0.15?
<!DOCTYPE html>?
<html>?
<head>?
<title>Welcome to tengine!</title>?
<style>?
??? body {?
??????? 35em;?
??????? margin: 0 auto;?
??????? font-family: Tahoma, Verdana, Arial, sans-serif;?
??? }?
</style>?
</head>?
<body>?
Welcome to tengine! A?
If you see this page, the tengine web server is successfully installed and?
working. Further configuration is required.
For online documentation and support please refer to?
<a href="http://tengine.taobao.org/">tengine.taobao.org.
<em>Thank you for using tengine.</em>
</body>?
</html>?
[root@tsm-app-dev1 ~]#
?
10.0.0.8(我的筆記本)
?
?
原因不得而知,在此記錄。便日后尋得原因。
本文轉自 ygqygq2 51CTO博客,原文鏈接:http://blog.51cto.com/ygqygq2/1785087,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Keepalived+nginx造成流量异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP编译遇到的问题
- 下一篇: 3年,感谢你与几维安全一起经历的风风雨雨