在生产环境中实现Nginx的高可用性至关重要,以下是几种常见的实现方案:
实现原理: - 使用Keepalived实现虚拟IP(VIP)漂移 - 主节点故障时,VIP自动漂移到备用节点
配置步骤:
1. 在两台服务器上安装Nginx和Keepalived
2. 配置Keepalived:
conf
vrrp_instance VI_1 {
state MASTER # 主节点设为MASTER,备节点设为BACKUP
interface eth0 # 绑定网卡
virtual_router_id 51
priority 100 # 主节点优先级高,备节点设为较低值
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100 # 虚拟IP地址
}
}
3. 配置Nginx健康检查脚本,供Keepalived调用
优点:实现简单,切换快速(秒级) 缺点:备用节点资源闲置
实现方案: - DNS轮询:将同一域名解析到多个Nginx服务器IP - LVS(DR模式):使用LVS作为前端负载均衡器
LVS配置示例:
ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g
优点:充分利用所有服务器资源 缺点:DNS轮询有缓存问题,LVS配置较复杂
主流云平台方案: - AWS: ALB(Application Load Balancer) + Nginx - 阿里云: SLB + Nginx - Azure: Application Gateway + Nginx
配置要点: 1. 创建负载均衡实例 2. 添加后端Nginx服务器 3. 配置健康检查路径 4. 设置会话保持(如需要)
Nginx官方商业版提供原生高可用功能: - 内置健康检查 - 会话持久化 - 动态配置更新 - 监控仪表板
在K8s环境中实现Nginx高可用:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ha
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
选择哪种方案取决于您的具体需求、预算和技术栈。对于大多数企业,Keepalived+VIP或云负载均衡器是性价比较高的选择。