公司网站突然访问不了,客服电话立刻响个不停。排查一圈才发现,是后台服务器挂了,而且没有及时切换备用方案。这种情况其实在很多中小型企业里都发生过。为了避免单点故障,负载均衡的主备模式就成了关键配置。
什么是主备模式
主备模式,简单说就是“一个干活,一个待命”。正常情况下,主服务器处理所有请求,备用服务器不对外服务,但它一直盯着主服务器的状态。一旦主服务器宕机,备用服务器马上顶上,接替工作,整个过程对用户几乎是无感的。
这就像小区的供水系统:平时由A水泵供水,B泵停着;如果A泵坏了,系统自动切换到B泵,居民家里的水不会断。
常见场景:Nginx + Keepalived 实现主备
在实际部署中,Nginx 做反向代理,Keepalived 负责监控和故障转移,是常见的组合。两台服务器分别安装 Nginx 和 Keepalived,其中一台设为主(MASTER),另一台设为备(BACKUP)。
Keepalived 通过 VRRP 协议通信,虚拟出一个公用的 IP 地址(VIP)。外部访问都指向这个 VIP,而 VIP 实际绑定在当前的主服务器上。
配置示例
以下是一个 Keepalived 的主节点配置片段:
global_defs {<br> notification_email {<br> admin@example.com<br> }<br> router_id LVS_DEVEL<br>}
vrrp_instance VI_1 {<br> state MASTER<br> interface eth0<br> virtual_router_id 51<br> priority 100<br> advert_int 1<br> authentication {<br> auth_type PASS<br> auth_pass 123456<br> }<br> virtual_ipaddress {<br> 192.168.1.100<br> }<br>}
备用节点只需将 state 改为 BACKUP,priority 设得比主低(比如 90)即可。当主服务器网络中断或服务崩溃,Keepalived 会检测失败,在几秒内将 VIP 漂移到备用机器。
健康检查不能少
主备切换的核心在于“判断是否真的挂了”。可以在 Keepalived 配置中加入对 Nginx 的检查脚本:
vrrp_script chk_nginx {<br> script "/usr/local/bin/check_nginx.sh"<br> interval 2<br> weight -20<br>}
脚本内容可以很简单:尝试访问本地 Nginx,如果连续几次失败,就认为服务异常,触发降权,促使切换。
测试时注意别误操作
上线前一定要在测试环境验证。可以手动停止主服务器的 Nginx 或 Keepalived 服务,观察 VIP 是否自动漂移到备用节点。使用 ip addr show 查看 IP 绑定情况,用 ping 测试连通性。
曾经有团队在生产环境做切换测试,忘了改配置,结果主备同时抢 VIP,导致网络冲突,服务反而全断了。所以修改配置后记得重启服务,并确认只有一台持有 VIP。
适用场景与局限
主备模式适合预算有限、业务量不大的系统。它解决了单点故障问题,但备用服务器大部分时间闲置,资源利用率不高。如果并发高,建议考虑双主模式或多活架构。
另外,主备切换需要时间,通常在几秒内,这段时间内新连接会失败。对于金融类业务,可能还需要结合应用层的重试机制来弥补。