一、引言
在互联网应用中,Nginx 是一款非常常用的高性能 Web 服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。但在实际生产环境里,单台 Nginx 服务器可能会因为硬件故障、软件崩溃等原因出现服务中断的情况,这就会影响用户的正常访问。为了保证服务的高可用性,我们可以使用 Keepalived 来实现 Nginx 的故障自动切换。接下来,咱们就详细聊聊这个方案。
二、应用场景
想象一下,你经营着一家电商网站,每天都有大量的用户访问。要是 Nginx 服务器突然挂了,用户就无法正常浏览商品、下单,这会给你带来巨大的损失。这时候,Nginx 高可用方案就派上用场了。通过 Keepalived 实现故障自动切换,当主 Nginx 服务器出现问题时,能迅速将流量切换到备用服务器,保证网站的正常运行。
再比如一些企业的内部办公系统,员工需要通过这个系统进行日常工作。如果 Nginx 服务中断,员工就无法正常办公,影响工作效率。采用高可用方案,就能避免这种情况的发生。
三、Keepalived 与 Nginx 结合的原理
Keepalived 是一个基于 VRRP(虚拟路由冗余协议)的高可用解决方案。简单来说,它会监控 Nginx 服务器的状态。在一个 Nginx 集群中,有主服务器和备用服务器。Keepalived 会在主服务器上运行一个监控程序,不断检查 Nginx 是否正常工作。如果主服务器上的 Nginx 出现故障,Keepalived 会自动将虚拟 IP(VIP)从主服务器切换到备用服务器,这样用户访问的 VIP 就会指向备用服务器,实现故障自动切换。
四、环境准备
4.1 服务器准备
我们需要准备两台服务器,一台作为主服务器,一台作为备用服务器。这里假设主服务器的 IP 是 192.168.1.100,备用服务器的 IP 是 192.168.1.101,虚拟 IP 是 192.168.1.102。
4.2 安装 Nginx 和 Keepalived
在两台服务器上都安装 Nginx 和 Keepalived。以 CentOS 系统为例,使用以下命令进行安装:
# 技术栈:Linux Shell
# 安装 Nginx
yum install -y nginx
# 安装 Keepalived
yum install -y keepalived
五、配置 Nginx
5.1 主服务器配置
在主服务器上,编辑 Nginx 配置文件 /etc/nginx/nginx.conf,添加以下内容:
# 技术栈:Nginx
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
然后启动 Nginx 服务:
# 技术栈:Linux Shell
systemctl start nginx
systemctl enable nginx
5.2 备用服务器配置
备用服务器的 Nginx 配置和主服务器类似,同样编辑 /etc/nginx/nginx.conf,添加相同的内容,然后启动 Nginx 服务。
六、配置 Keepalived
6.1 主服务器配置
编辑主服务器的 Keepalived 配置文件 /etc/keepalived/keepalived.conf,内容如下:
# 技术栈:Keepalived
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER # 主服务器状态
interface eth0 # 网卡名称
virtual_router_id 51
priority 100 # 优先级,数值越高越优先
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.102 # 虚拟 IP
}
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" # 检查 Nginx 状态的脚本
interval 2 # 检查间隔时间
weight -20 # 如果检查失败,优先级降低 20
}
track_script {
chk_nginx
}
创建检查 Nginx 状态的脚本 /etc/keepalived/check_nginx.sh,内容如下:
# 技术栈:Linux Shell
#!/bin/bash
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
systemctl start nginx
sleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
exit 1
fi
fi
exit 0
给脚本添加执行权限:
# 技术栈:Linux Shell
chmod +x /etc/keepalived/check_nginx.sh
启动 Keepalived 服务:
# 技术栈:Linux Shell
systemctl start keepalived
systemctl enable keepalived
6.2 备用服务器配置
编辑备用服务器的 Keepalived 配置文件 /etc/keepalived/keepalived.conf,内容如下:
# 技术栈:Keepalived
! Configuration File for keepalived
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP # 备用服务器状态
interface eth0 # 网卡名称
virtual_router_id 51
priority 90 # 优先级,低于主服务器
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.102 # 虚拟 IP
}
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" # 检查 Nginx 状态的脚本
interval 2 # 检查间隔时间
weight -20 # 如果检查失败,优先级降低 20
}
track_script {
chk_nginx
}
同样创建检查 Nginx 状态的脚本 /etc/keepalived/check_nginx.sh,并添加执行权限,然后启动 Keepalived 服务。
七、技术优缺点
7.1 优点
- 高可用性:通过 Keepalived 实现故障自动切换,能保证 Nginx 服务的高可用性,减少服务中断时间。
- 配置简单:Keepalived 的配置相对简单,易于上手,即使是没有太多经验的开发者也能快速配置。
- 成本低:不需要额外的硬件设备,只需要在现有的服务器上安装 Keepalived 即可。
7.2 缺点
- 单点故障风险:虽然实现了 Nginx 的高可用,但 Keepalived 本身可能成为单点故障。如果 Keepalived 出现问题,可能会影响故障切换的正常进行。
- 资源浪费:备用服务器在正常情况下处于闲置状态,会造成一定的资源浪费。
八、注意事项
- 网络环境:确保主服务器和备用服务器在同一个局域网内,并且网络连接稳定。
- 权限问题:在配置 Keepalived 和 Nginx 时,要确保相关文件和脚本有足够的权限。
- 日志监控:定期查看 Keepalived 和 Nginx 的日志,及时发现并解决问题。
九、测试故障切换
我们可以手动停止主服务器上的 Nginx 服务,模拟故障情况,观察虚拟 IP 是否会自动切换到备用服务器。
# 技术栈:Linux Shell
systemctl stop nginx
然后使用 ping 命令测试虚拟 IP 是否能正常访问。如果能正常访问,说明故障切换成功。
十、文章总结
通过使用 Keepalived 实现 Nginx 的故障自动切换,我们可以大大提高 Nginx 服务的可用性。在实际应用中,我们需要根据具体的业务需求和环境进行合理的配置。同时,要注意技术的优缺点和相关的注意事项,确保系统的稳定运行。
评论