本文已参与「新人创作礼」活动,一起开启掘金创作之路。
nginx常见的高可用方式有两种:
1、主备方式:搭建两个NG实例,配置文件一致,使用keepalive进行VIP的绑定,主节点异常时,VIP漂移到备节点
优点:搭建简单
缺点:浪费一个NG节点
2、F5对NG做负载均衡:多个相同配置文件的NG实例使用F5做负载均衡,保证了NG的高可用
优点:架构稳定,健壮性更强
缺点:F5太贵,一般公司应该不会去用
本文介绍另一种KeepAlive的NG搭建方式,也比较实用的nginx在生产中的架构模式:
nginx+keepalive+双VIP
架构图如下:
主机1异常时,VIP1切换到主机2,此时两个VIP都指向主机2,等主机1恢复,VIP1自动切回主机1
nginx的安装这里就不过多描述了,主要讲讲keepalive的配置
假设主机和VIP如下:
主机:1.1.1.1,2.2.2.2
VIP:11.11.11.11,22.22.22.22
具体keepalive配置 以及 keepalive使用到的nginx健康检查脚本 如下:
【1.1.1.1主机 keepalive配置】
! Configuration File for keepalived
global_defs {
router_id sz-lvs1
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -50
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 246
priority 100
authentication {
auth_type PASS
auth_pass 2461
}
virtual_ipaddress {
11.11.11.11
}
track_script {
check_nginx
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 247
priority 70
authentication {
auth_type PASS
auth_pass 2471
}
virtual_ipaddress {
22.22.22.22
}
track_script {
check_nginx
}
}
【2.2.2.2主机 keepalive配置】
! Configuration File for keepalived
global_defs {
router_id sz-lvs1
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -50
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 246
priority 70
authentication {
auth_type PASS
auth_pass 2461
}
virtual_ipaddress {
11.11.11.11
}
track_script {
check_nginx
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 247
priority 100
authentication {
auth_type PASS
auth_pass 2471
}
virtual_ipaddress {
22.22.22.22
}
track_script {
check_nginx
}
}
【keepalive配置的nginx健康检查脚本check_nginx.sh】
#!/bin/sh
count=`ps aux | grep -v grep |grep -v "check_nginx\|nginx.conf" | grep nginx | wc -l`
if [ $count -gt 0 ]; then
exit 0
else
exit 1
fi
这样就完成高可用的nginx的搭建了