跳到主要内容

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 进行实时监控。及时更新和维护配置,确保高可用架构的稳定运行。