搭建 Keepalived + Nginx 高可用
Keepalived 简介
Keepalived 是一个基于 VRRP 协议的高可用解决方案,主要用于实现服务器的高可用性。它能够检测服务器的状态,当主服务器出现故障时,自动将虚拟 IP 切换到备用服务器,确保服务的连续性。
主要特点
- 基于 VRRP 协议实现高可用
- 支持多种检测方式(TCP、HTTP、脚本等)
- 配置简单,易于维护
- 支持多组虚拟路由
- 支持邮件通知
架构图
实际案例:Web 服务高可用部署
环境准备
- 主服务器:192.168.1.101
- 备服务器:192.168.1.102
- 虚拟 IP:192.168.1.100
- 后端 Web 服务器:192.168.1.201, 192.168.1.202
1. 安装必要软件
在两台服务器上执行:
# CentOS/RHEL
yum install -y nginx keepalived
# Ubuntu/Debian
apt-get install -y nginx keepalived
2. 配置 Nginx
主备服务器上的 Nginx 配置(/etc/nginx/nginx.conf):
http {
upstream backend {
server 192.168.1.201:80;
server 192.168.1.202:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
3. 配置 Keepalived
主服务器配置(/etc/keepalived/keepalived.conf):
vrrp_script check_nginx {
script "pidof nginx"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
track_script {
check_nginx
}
}
备服务器配置:
vrrp_script check_nginx {
script "pidof nginx"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100
}
track_script {
check_nginx
}
}
4. 启动服务
在两台服务器上执行:
systemctl start nginx
systemctl start keepalived
systemctl enable nginx
systemctl enable keepalived
5. 验证配置
- 检查虚拟 IP 是否在主服务器上:
ip addr show eth0
- 测试高可用性:
# 在主服务器上停止 Nginx
systemctl stop nginx
# 观察虚拟 IP 是否自动切换到备服务器
故障排查
常见问题及解决方案
虚拟 IP 无法切换
- 检查防火墙设置
- 确认 VRRP 协议端口(112)是否开放
- 验证网络连接性
Nginx 无法启动
- 检查配置文件语法
- 查看错误日志:
tail -f /var/log/nginx/error.log
Keepalived 状态异常
- 检查日志:
journalctl -u keepalived - 确认配置文件权限
- 检查日志:
最佳实践
监控建议
- 使用 Prometheus + Grafana 监控服务器状态
- 配置邮件告警通知
- 定期检查日志文件
安全建议
- 修改默认的认证密码
- 限制 VRRP 协议的访问范围
- 定期更新系统和软件包
性能优化
- 根据实际负载调整 Nginx 工作进程数
- 配置适当的连接超时时间
- 启用 Nginx 缓存
总结
通过 Keepalived + Nginx 的配置,我们实现了一个高可用的负载均衡系统。该系统具有以下优势:
- 自动故障转移
- 负载均衡
- 易于维护
- 高可用性
在实际生产环境中,建议定期进行故障转移测试,确保系统在真实故障发生时能够正常工作。
