Nginx 高可用部署
高可用性概述
高可用性旨在确保系统在出现故障时仍能持续提供服务。对于 Nginx,构建高可用架构可以避免单点故障,提高网站或应用的可靠性和稳定性。笔者认为,实现 Nginx 高可用性的最终目标是确保服务的持续可用性和快速恢复能力。
构建高可用 Nginx 架构
使用负载均衡
负载均衡将流量分配到多台 Nginx 服务器,防止任何单一服务器过载。可以使用硬件负载均衡器或软件解决方案如 Nginx 自身的负载均衡功能。
http {
upstream backend {
server nginx1.example.com;
server nginx2.example.com;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
}
配置主从服务器
配置主从服务器可以在主服务器出现故障时,由从服务器接管服务。通常使用 Keepalived 或 Heartbeat 来管理主从切换。
使用 Keepalived 实现 Nginx 高可用
安装 Keepalived
在所有 Nginx 服务器上安装 Keepalived:
sudo apt update
sudo apt install keepalived
配置 Keepalived
编辑/etc/keepalived/keepalived.conf
文件,配置虚拟 IP 和健康检查:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt # 不抢占
preempt_delay 300 # 延迟抢占
authentication {
auth_type PASS
auth_pass secret
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.1.101 80 {
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.102 80 {
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
启动 Keepalived
sudo systemctl start keepalived
sudo systemctl enable keepalived
使用 DNS 轮询提高可用性
DNS 轮询通过配置多个 A 记录,将请求分配到不同的 Nginx 服务器。虽然配置简单,但缺乏健康检查和故障转移机制。
使用云服务的负载均衡器
利用云提供商的负载均衡器,如 AWS ELB 或 Azure Load Balancer,可以简化高可用性部署,并集成自动扩展和健康监控功能。
监控和维护
定期监控 Nginx 服务器的性能和健康状态,使用工具如 Prometheus 和 Grafana 进行实时监控。及时更新和维护配置,确保高可用架构的稳定运行。