服务器集群搭建实现高可用架构:新手完整实战指南
服务器集群搭建实现高可用架构:新手完整实战指南
很多刚接触运维的朋友,听到“集群”“高可用”就会觉得复杂。
其实用两台服务器组合成一个高可用集群,并不需要很深的网络知识。
今天我就以最常见的 Keepalived + Nginx 双机主备方案 为例,带你从零开始,把一台单点服务变成能自动切换的高可用集群。
为什么需要这样搭建
单台服务器跑业务,最怕两个问题:机器宕机或网络不通。
哪怕是临时关机维护,用户也会因为没法访问而流失。服务器集群搭建实现高可用架构之后,主服务出问题时,备用服务器会自动接替,用户几乎无感知。
这套方案成本低、配置简单,很适合中小团队起步。
准备工作:两台服务器 + 一个虚拟IP
硬件上你需要两台安装了 CentOS 7 或 Ubuntu 20.04 的云服务器或虚拟机。
软件方面只用到两个开源组件:
- Keepalived:负责虚拟IP(VIP)漂移和健康检查。
- Nginx:作为反向代理或静态服务,实际业务可以换成任意Web服务。
另外还需要一个未被占用且与服务器在同一个局域网段的额外 IP(虚拟IP)。
比如你的服务器A内网IP是 192.168.1.10,服务器B是 192.168.1.11,那么可以选 192.168.1.100 作为VIP(前提是没人用)。
云服务商一般允许在控制台添加辅助内网IP,记下这个地址。
核心步骤:配置Keepalived实现自动切换
1. 两台服务器都安装Keepalived和Nginx
如果使用 CentOS,执行:
yum install -y keepalived nginx
systemctl enable keepalived nginx
systemctl start nginx
Ubuntu 用户替换为 apt install -y keepalived nginx。
两台机器都同样操作。
2. 配置主服务器(MASTER)
编辑 /etc/keepalived/keepalived.conf,清空内容后写入以下配置(根据实际网络修改 interface 和 VIP):
vrrp_instance VI_1 {
state MASTER
interface eth0 # 替换为你的网卡名,使用 ip a 查看
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.1.100/24 # 替换为你规划的VIP
}
}
# Nginx健康检查脚本(可选但推荐)
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx" # 检查nginx进程是否存在
interval 2
weight -20
}
注意,要把 state MASTER 和 priority 100 搭配使用。virtual_ipaddress 中的地址和子网掩码要写正确。
如果想让Keepalived自动检测Nginx是否存活,加上 track_script { chk_nginx } 行。
3. 配置备用服务器(BACKUP)
在第二台服务器上同样编辑 /etc/keepalived/keepalived.conf,区别如下:
state BACKUPpriority 90(数值低于MASTER)- 其他参数(interface, virtual_router_id, virtual_ipaddress)与主服务器一致。
4. 启动Keepalived并检查VIP漂移
两台服务器都执行:
systemctl start keepalived
使用 ip addr show dev eth0 查看,正常情况下主服务器上会出现VIP(比如 192.168.1.100),备用服务器上没有。
避坑指南:新手最容易踩的三个坑
- 防火墙拦截VRRP协议:Keepalived依靠VRRP组播发送心跳,默认使用IP协议号112。请确认两台服务器的防火墙放行该协议,或者暂时关闭防火墙做测试。
- CentOS 7:
firewall-cmd --add-protocol=vrrp --permanent && firewall-cmd --reload - Ubuntu:
ufw allow proto vrrp
- 网卡名或VIP写错:
interface必须与服务器实际网卡名一致(用ip a确认),virtual_ipaddress的掩码长度(如/24)要和服务器所在子网一致。 - Nginx未监听VIP:需要确保Nginx
listen配置里包含0.0.0.0:80或者显式监听VIP,否则切换后流量打不过来。
验证方法:模拟主服务器宕机
在确认VIP已经出现在主服务器后,我们来验证切换是否正常。
执行以下操作:
- 停掉主服务器的Keepalived进程:
systemctl stop keepalived - 查看备用服务器的IP:
ip addr show dev eth0,几秒内备用服务器应该自动绑定VIP。 - 访问VIP:用浏览器或
curl http://192.168.1.100应该能正常显示Nginx默认页面(Nginx已在两台服务器上启动)。 - 恢复主服务器:
systemctl start keepalived,VIP会重新回到主节点(因为优先级更高)。
高频问题解答
Q: VIP为什么一直不切换到备用?
A: 检查双方防火墙是否放行VRRP;检查virtual_router_id是否一致;检查eth0网卡名是否正确;查看Keepalived日志 journalctl -u keepalived 定位原因。
Q: 能否做多于两台服务器?
A: 可以,Keepalived支持多个节点,但建议用组播 + 不同优先级实现多主或N+1备份。不过双机主备对于大多数业务已经足够。
Q: 集群内服务怎么同步数据?
A: 高可用只解决服务可用性,不自动同步数据。业务数据(如用户上传文件、数据库)需要额外用rsync、NFS共享或数据库主从方案。
写在最后
通过上面几步,你已经完成了一个最简单的服务器集群搭建实现高可用架构。
这套组合可以保证当任意一台Web节点出问题时,流量自动切到备用节点,业务中断时间一般不超过10秒。
如果后续想进一步扩展,可以在Nginx前面再加一层LVS,也可以将Keepalived换成更现代的方式。
但核心的VIP漂移和健康检查思路是一样的。
建议你先在虚拟机里完整跑一遍流程,熟悉后再到生产环境部署。
遇到异常时,先从防火墙、网卡名和日志入手排查,大部分问题都能快速解决。