高可用性部署:Nginx + Keepalived
简介
本文档旨在提供在多台服务器上部署 Nginx 和 Keepalived 实现高可用性架构的指南。
目标
- 部署多个 Nginx 服务器实现负载均衡和高可用性。
- 使用 Keepalived 管理虚拟 IP 地址确保服务的连续性。
步骤概述
-
安装 Nginx:
- 使用适合您操作系统的包管理器或源码安装 Nginx。
- 配置 Nginx 作为负载均衡器。
-
安装 Keepalived:
- 在每个服务器上安装 Keepalived。
- 配置 Keepalived 以监视和管理虚拟 IP 地址。
-
配置文件:
- 编辑 Nginx 配置文件以定义负载均衡策略。
- 创建 Keepalived 配置文件指定虚拟 IP 地址。
-
故障切换测试:
- 模拟主服务器故障,验证 Keepalived 是否正确地将 VIP 切换到备用服务器。
- 测试流量是否正确地转移到备用服务器。
Nginx 配置基础
# Nginx 配置示例
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
# 添加更多后端服务器
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://backend;
# 可添加其他代理设置
}
}
}
Keepalived 基础配置示例
# Keepalived 配置示例
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_nginx
}
}
检查脚本
以下是一个示例检查 Nginx 运行状态的脚本 check_nginx.sh
:
#!/bin/bash
nginx_process=$(ps aux | grep 'nginx' | grep -v 'grep' | wc -l)
if [ "$nginx_process" -gt 0 ]; then
echo "Nginx is running."
exit 0
else
echo "Nginx is not running."
exit 1
fi
在 Keepalived 的多节点配置中,默认情况下,选举新的主节点是根据配置的优先级(priority)来确定的。每个节点都有一个配置的优先级值,优先级值高的节点将成为主节点。
时序图:
选举新主节点的规则:
-
优先级(priority)设置:
- 每个节点在 Keepalived 配置中都有一个设置的优先级值(priority),通常是一个整数。
- 默认情况下,优先级值越高,节点被选为主节点的可能性越大。
-
主节点失效:
- 当当前的主节点(Master)出现故障或不可用时,备用节点中优先级最高的节点会尝试接管主节点的角色。
- 当发生主节点失效时,备用节点中具有最高优先级的节点将竞选成为新的主节点。
-
检查通信和健康状态:
- Keepalived 会检查备用节点之间的通信和健康状态。
- 在故障切换过程中,备用节点需要确保它们可以正常通信,并且能够接管主节点的功能。
-
VIP 切换:
- 选举成功的节点将接管管理 VIP 的责任,开始管理虚拟 IP 地址。
这种基于优先级的选举机制确保了在主节点失效时,备用节点中配置优先级最高的节点有更高的机会成为新的主节点。优先级通常由管理员根据节点的重要性和角色来设置,以确保主节点选举的可控性和稳定性。