nginx keepalived配置
时间: 2025-04-09 19:25:06 浏览: 28
<think>好的,用户想要配置Nginx和Keepalived来实现高可用性负载均衡。首先,我需要回忆一下Nginx和Keepalived各自的作用。Nginx作为反向代理和负载均衡器,可以将流量分发到多个后端服务器,而Keepalived则用于实现高可用性,通过VRRP协议确保主备服务器之间的故障切换。
根据提供的引用内容,特别是引用[1]和引用[2],用户需要准备两台Nginx服务器,一主一从,都安装Keepalived。首先应该确认这两台服务器的安装步骤,比如使用yum安装Keepalived。然后,配置Nginx的负载均衡部分,引用[3]中的示例展示了如何配置upstream块,设置权重和备份服务器,这部分需要详细说明。
接下来是Keepalived的配置。主备服务器需要不同的优先级,主服务器优先级更高,比如设置为100,备服务器设为90。同时,需要配置虚拟IP(VIP),这样当主服务器故障时,VIP会漂移到备服务器,保持服务可用性。此外,健康检查脚本是关键,确保Keepalived能监控Nginx的状态,如果Nginx进程停止,自动触发主备切换。这部分可能需要编写一个简单的脚本,定期检查Nginx进程是否存在,并在失败时停止Keepalived服务,让备服务器接管。
在配置过程中,需要注意防火墙设置,确保VRRP协议(通常是协议号112)的通信不被阻止,如引用[2]中提到的关闭防火墙或者开放相应端口。同时,虚拟IP需要在两台服务器上正确配置,确保网络接口正确,比如ens33或eth0。
用户可能的疑问点包括如何验证配置是否正确,如何测试故障转移,以及如何处理可能出现的配置错误。因此,在回答中需要包含验证步骤,例如使用curl命令访问VIP,或者手动停止主服务器的Nginx服务观察是否切换。此外,日志检查也是一个重要的排错手段,查看Keepalived和Nginx的日志可以帮助定位问题。
最后,应该生成相关问题,帮助用户进一步学习,比如如何优化负载均衡策略,或者如何处理更复杂的高可用架构。确保引用标记正确,比如引用[1]、[2]、[3]在适当的位置,让用户知道信息的具体来源。</think>### 分步配置Nginx+Keepalived高可用负载均衡
#### 一、基础环境准备
1. **服务器规划**
- 准备2台Nginx服务器(主:Nginx_Master,备:Nginx_Backup),安装Nginx和Keepalived
- 虚拟IP(VIP):172.16.90.200(需与后端Web服务器同网段)
- 后端Web服务器:至少2台,提供实际服务[^2]
2. **安装依赖**
在两台Nginx服务器上执行:
```bash
yum -y install nginx keepalived # CentOS安装命令[^1]
```
---
#### 二、配置Nginx负载均衡
1. **修改Nginx配置文件**
编辑`/etc/nginx/nginx.conf`,添加负载均衡策略(示例为加权轮询):
```nginx
upstream web_cluster {
server 172.16.90.113 weight=10; # Web1节点,权重10
server 172.16.90.114 weight=5; # Web2节点,权重5
server 172.16.90.115 backup; # 备用节点[^3]
}
server {
listen 80;
location / {
proxy_pass http://web_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
重启Nginx:`systemctl restart nginx`
---
#### 三、配置Keepalived高可用
1. **主节点配置**(Nginx_Master)
编辑`/etc/keepalived/keepalived.conf`:
```conf
global_defs {
router_id nginx_master # 唯一标识
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh" # 健康检查脚本
interval 2 # 检测间隔2秒
weight -20 # 失败后优先级降低20
}
vrrp_instance VI_1 {
state MASTER # 主节点
interface ens33 # 网卡名称(需根据实际修改)
virtual_router_id 51 # 虚拟路由ID(主备需一致)
priority 100 # 优先级(主>备)
virtual_ipaddress {
172.16.90.200/24 # 虚拟IP
}
track_script {
chk_nginx # 关联健康检查
}
}
```
2. **备节点配置**(Nginx_Backup)
修改以下参数即可:
```conf
state BACKUP # 备节点
priority 90 # 优先级低于主节点
```
3. **创建健康检查脚本**
`/etc/keepalived/check_nginx.sh`:
```bash
#!/bin/bash
if ! pgrep -x "nginx" >/dev/null; then
systemctl stop keepalived # Nginx异常时停止Keepalived触发切换
fi
```
赋予执行权限:`chmod +x /etc/keepalived/check_nginx.sh`
4. **启动服务**
```bash
systemctl enable --now keepalived
systemctl restart keepalived
```
---
#### 四、验证配置
1. **检查VIP绑定**
在主节点执行`ip addr show ens33`,应看到VIP绑定
```bash
inet 172.16.90.200/24 scope global secondary ens33
```
2. **模拟故障测试**
手动关闭主节点Nginx:
```bash
systemctl stop nginx
```
观察VIP是否自动迁移至备节点(通过`ip addr`命令查看)
3. **访问测试**
通过VIP访问服务:
```bash
curl http://172.16.90.200
```
---
#### 常见问题排查
- **VRRP通信失败**:检查防火墙是否放行VRRP协议(协议号112)[^2]
- **VIP不切换**:确认`virtual_router_id`主备一致,检查脚本执行权限
- **日志分析**:查看`journalctl -u keepalived` 和 `/var/log/nginx/error.log`
---
阅读全文
相关推荐


















