:2026-07-05 11:39 点击:2
在当今互联网时代,Web服务的稳定性和可用性直接关系到用户体验和业务连续性,任何单点故障都可能导致服务中断,造成不可估量的损失,为了消除单点故障,构建高可用(High Availability, HA)集群成为企业级应用的标配,本文将详细介绍如何利用Keepalived软件,结合三台Web服务器,搭建一个高性能、高可用的Web服务集群方案。
为什么需要Keepalived与三台服务器集群?
传统的单台Web服务器面临着诸多风险,如硬件故障、系统崩溃、网络中断等,虽然双机热备(如主备模式)能提供一定的高可用性,但存在资源利用率低(备用服务器通常处于空闲状态)和单点隐患(主备切换时仍可能出现短暂服务中断)等问题。
引入三台服务器并结合Keepalived,可以构建更优的解决方案:

核心组件:Keepalived简介
Keepalived最初是为LVS(Linux Virtual Server)负载均衡器设计的,主要用来监控集群系统中各个服务节点的状态,后来,它逐渐演变成一个更通用的高可用解决方案,支持对任意TCP服务进行健康检查和故障转移。
其核心功能包括:
三台服务器集群架构设计
我们采用“一主两备”(Master-Backup-Backup)或“主主备”(Master-Master-Backup,需结合负载均衡软件)的常见架构,这里我们以更典型的“一主两备”结合负载均衡为例进行阐述。
假设我们有以下三台Web服务器:
核心组件部署:
168.1.100,对外提供服务的统一入口。为了简化,我们假设三台服务器都部署了相同的Web服务(如Nginx),VIP 168.1.100 由Keepalived动态分配给当前的主节点,用户请求访问VIP,实际由主节点上的Web服务处理,当主节点故障,VIP自动切换到Backup1,若Backup1也故障,则切换到Backup2。
配置步骤(以Nginx + Keepalived为例)
环境准备:
yum install -y keepalived (CentOS) 或 apt-get install -y keepalived (Ubuntu)。Keepalived配置:
主节点(Server 1, 192.168.1.10):
编辑 /etc/keepalived/keepalived.conf 文件:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL_MASTER # 路由器ID,主备节点不同
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_nginx {
script "/usr/local/sbin/check_nginx.sh" # 自定义检查Nginx状态的脚本
interval 2
weight -20
fall 3
rise 2
}
vrrp_instance VI_1 {
state MASTER # 主节点状态为MASTER
interface eth0 # 本地网卡名称,根据实际情况修改
virtual_router_id 51
priority 100 # 主节点优先级较高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:0 # 虚拟IP
}
track_script {
check_nginx # 调用自定义脚本检查Nginx
}
}
check_nginx.sh 脚本内容示例(用于检查Nginx进程是否存活):
#!/bin/bash
if ! pgrep nginx > /dev/null; then
exit 1
else
exit 0
fi
给脚本执行权限:chmod +x /usr/local/sbin/check_nginx.sh
备用节点1(Server 2, 192.168.1.11):
编辑 /etc/keepalived/keepalived.conf 文件,主要修改以下部分:
global_defs {
router_id LVS_DEVEL_BACKUP1
# ... 其他全局配置同主节点 ...
}
vrrp_script check_nginx {
script "/usr/local/sbin/check_nginx.sh"
interval 2
weight -20
fall 3
rise 2
}
vrrp_instance VI_1 {
state BACKUP # 备用节点状态为BACKUP
interface eth0
virtual_router_id 51
priority 90 # 优先级低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:0
}
track_script {
check_nginx
}
# nopreempt # 如果需要非抢占模式,取消注释(主节点恢复后不抢占)
}
备用节点2(Server 3, 192.168.1.12):
配置与备用节点1类似,只需修改 router_id(如 LVS_DEVEL_BACKUP2)和 priority(如 80,低于备用节点1)。
启动与测试:
systemctl start nginx,并设置为开机自启:systemctl enable nginx。systemctl start keepalived,并设置为开机自启:systemctl enable keepalived。ip addr 命令,应能看到虚拟IP 168.1.100 已经绑定到 eth0:0。http://192.168.1.100,应能看到Nginx的欢迎页面或测试页面。ip addr 查看)。本文由用户投稿上传,若侵权请提供版权资料并联系删除!