Nginx HA(Keepalived)
2014-06-02 by dongnan
环境
Nginx-VIP: 172.27.233.94
Nginx-Master: 172.27.233.95/10.0.0.95
Nginx-BACKUP: 172.27.233.96/10.0.0.96
Web1: 10.0.0.87
Web2: 10.0.0.88
目标
使用 Keepalive
为 Nginx
负载均衡器配置HA
高可用,确保负载均衡器在架构中不是单点。
配置文件
Keepalived
配置文件
Master
! Configuration File for keepalived
#Global
global_defs {
router_id nginx-cp
}
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 3
fall 3
rise 1
weight -30
}
#VRRP
vrrp_instance VI_1 {
state MASTER
interface eth0
track_interface {
eth0
eth1
}
virtual_router_id 35
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass zongming.net
}
track_script {
chk_nginx
}
virtual_ipaddress {
172.27.233.94
}
}
Backup
! Configuration File for keepalived
#Global
global_defs {
router_id nginx-cp
}
vrrp_script chk_nginx {
script "killall -0 nginx"
interval 3
fall 3
rise 1
weight -30
}
#VRRP
vrrp_instance VI_1 {
state BACKUP
interface eth0
track_interface {
eth0
eth1
}
virtual_router_id 35
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass zongming.net
}
track_script {
chk_nginx
}
virtual_ipaddress {
172.27.233.94
}
}
测试
网络故障
各种原因导致 keepalive
无法接收 vrrp
网络数据包导致VIP
切换。
模拟 master
故障,backup
获得VIP
:
backup
日志:
May 27 10:53:22 cp-lb2 Keepalived_vrrp[2892]: VRRP_Script(chk_nginx) succeeded
May 27 10:54:38 cp-lb2 Keepalived_vrrp[2892]: VRRP_Instance(VI_1) Transition to MASTER STATE
May 27 10:54:39 cp-lb2 Keepalived_vrrp[2892]: VRRP_Instance(VI_1) Entering MASTER STATE
May 27 10:54:39 cp-lb2 Keepalived_vrrp[2892]: VRRP_Instance(VI_1) setting protocol VIPs.
May 27 10:54:39 cp-lb2 Keepalived_vrrp[2892]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.27.233.94
May 27 10:54:39 cp-lb2 Keepalived_healthcheckers[2891]: Netlink reflector reports IP 172.27.233.94 added
May 27 10:54:44 cp-lb2 Keepalived_vrrp[2892]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.27.233.94
模拟 master
恢复,重新获取 VIP
:
backup
日志:
May 27 10:56:40 cp-lb2 Keepalived_vrrp[2892]: VRRP_Instance(VI_1) Received higher prio advert
May 27 10:56:40 cp-lb2 Keepalived_vrrp[2892]: VRRP_Instance(VI_1) Entering BACKUP STATE
May 27 10:56:40 cp-lb2 Keepalived_vrrp[2892]: VRRP_Instance(VI_1) removing protocol VIPs.
May 27 10:56:40 cp-lb2 Keepalived_healthcheckers[2891]: Netlink reflector reports IP 172.27.233.94 removed
master
日志:
May 27 10:56:40 cp-lb1 Keepalived_vrrp[31865]: VRRP_Script(chk_nginx) succeeded
May 27 10:56:41 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Transition to MASTER STATE
May 27 10:56:42 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Entering MASTER STATE
May 27 10:56:42 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) setting protocol VIPs.
May 27 10:56:42 cp-lb1 Keepalived_healthcheckers[31864]: Netlink reflector reports IP 172.27.233.94 added
May 27 10:56:42 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.27.233.94
May 27 10:56:47 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.27.233.94
Nginx Crash
各种原因导致 Nginx
进程崩溃导致VIP
切换。
模拟 master
故障,backup
获得VIP
:
master
日志:
May 27 11:01:52 cp-lb1 Keepalived_vrrp[31865]: VRRP_Script(chk_nginx) failed
May 27 11:01:54 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Received higher prio advert
May 27 11:01:54 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Entering BACKUP STATE
May 27 11:01:54 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) removing protocol VIPs.
May 27 11:01:54 cp-lb1 Keepalived_healthcheckers[31864]: Netlink reflector reports IP 172.27.233.94 removed
backup
日志:
May 27 11:01:53 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) forcing a new MASTER election
May 27 11:01:54 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) Transition to MASTER STATE
May 27 11:01:55 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) Entering MASTER STATE
May 27 11:01:55 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) setting protocol VIPs.
May 27 11:01:55 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.27.233.94
May 27 11:01:55 cp-lb2 Keepalived_healthcheckers[3303]: Netlink reflector reports IP 172.27.233.94 added
May 27 11:02:00 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.27.233.94
模拟 master
进程恢复,重新获取VIP
:
master
日志:
May 27 11:04:17 cp-lb1 Keepalived_vrrp[31865]: VRRP_Script(chk_nginx) succeeded
May 27 11:04:17 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) forcing a new MASTER election
May 27 11:04:18 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Transition to MASTER STATE
May 27 11:04:19 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Entering MASTER STATE
May 27 11:04:19 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) setting protocol VIPs.
May 27 11:04:19 cp-lb1 Keepalived_vrrp[31865]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.27.233.94
May 27 11:04:19 cp-lb1 Keepalived_healthcheckers[31864]: Netlink reflector reports IP 172.27.233.94 added
backup
日志:
May 27 11:04:17 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) Received higher prio advert
May 27 11:04:17 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) Entering BACKUP STATE
May 27 11:04:17 cp-lb2 Keepalived_vrrp[3304]: VRRP_Instance(VI_1) removing protocol VIPs.
May 27 11:04:17 cp-lb2 Keepalived_healthcheckers[3303]: Netlink reflector reports IP 172.27.233.94 removed