Linux服务器高可用:Keepalived配置详解与故障切换方案
想象一下这样的场景:你的核心业务运行在一台Linux服务器上,突然服务器宕机,业务中断,造成巨大的损失。高可用,即High Availability (HA),就是为了解决这个问题而生的。其中,Keepalived 是一个非常流行的解决方案,尤其适用于Linux服务器集群。
Keepalived简介及工作原理
Keepalived 本质上是一个路由设备(router)的健康检查和故障转移机制。它基于VRRP(Virtual Router Redundancy Protocol)协议,通过虚拟IP地址(Virtual IP,VIP)实现主备服务器的切换。简单来说,就是多台服务器组成一个集群,对外提供一个VIP,客户端访问VIP就相当于访问集群服务。当主服务器出现故障时,Keepalived 会自动将VIP切换到备用服务器,从而保证服务的连续性。
VRRP协议的核心在于选举Master节点。集群中的所有节点会通过VRRP报文进行通信,根据优先级选举出一个Master节点。Master节点负责响应客户端的请求,而Backup节点则处于待命状态,随时准备接管Master节点的工作。
Keepalived配置详解
下面我们以一个具体的例子来说明 Keepalived 的配置。假设我们有两台服务器:server1 (192.168.1.100) 和 server2 (192.168.1.101),我们希望对外提供一个 VIP:192.168.1.200。server1 作为主服务器,server2 作为备用服务器。
1. 安装 Keepalived
在两台服务器上分别安装 Keepalived:
sudo apt update
sudo apt install keepalived
2. 配置 Keepalived (server1 – 主服务器)
编辑 /etc/keepalived/keepalived.conf 文件:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_http_port {
script "/etc/keepalived/check_http.sh"
interval 2
weight -20
fall 2
rise 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # 根据你的实际网卡名称修改
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200
}
track_script {
chk_http_port
}
}
3. 配置 Keepalived (server2 – 备用服务器)
编辑 /etc/keepalived/keepalived.conf 文件:
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script chk_http_port {
script "/etc/keepalived/check_http.sh"
interval 2
weight -20
fall 2
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0 # 根据你的实际网卡名称修改
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200
}
track_script {
chk_http_port
}
}
4. 健康检查脚本 (两台服务器)
创建 /etc/keepalived/check_http.sh 文件,用于检查HTTP服务是否正常运行:
#!/bin/bash
TIMEOUT=2
HTTP_PORT=80
curl --silent --max-time $TIMEOUT http://localhost:$HTTP_PORT/index.html > /dev/null 2>&1
if [ $? -eq 0 ]; then
exit 0
else
exit 1
fi
确保脚本具有执行权限:
sudo chmod +x /etc/keepalived/check_http.sh
5. 启动 Keepalived
在两台服务器上分别启动 Keepalived:
sudo systemctl start keepalived
sudo systemctl enable keepalived
配置项说明:
router_id: 集群中每台服务器的唯一标识。vrrp_instance: VRRP实例,可以配置多个实例。state: 服务器的角色,可以是MASTER或BACKUP。interface: 监听的网卡接口。virtual_router_id: VRRP实例的ID,同一个集群中必须相同。priority: 优先级,数值越大优先级越高,Master节点的优先级必须高于Backup节点。advert_int: VRRP报文的发送间隔,单位为秒。authentication: 认证信息,用于防止未经授权的服务器加入集群。virtual_ipaddress: 虚拟IP地址,客户端通过该地址访问集群服务。track_script: 健康检查脚本,用于检测服务器的健康状态。
故障切换方案
上述配置中,我们通过 track_script 配置了一个健康检查脚本。当 server1 上的HTTP服务出现故障时,该脚本会返回非零值,Keepalived 会降低 server1 的优先级,从而触发主备切换。server2 检测到 server1 的优先级降低后,会自动提升为Master节点,并接管VIP。
除了HTTP服务,你还可以根据实际情况配置其他健康检查脚本,例如检查数据库连接、磁盘空间等。关键在于编写合适的脚本,能够准确地检测服务器的健康状态。
Keepalived的进阶应用
Keepalived 的应用场景非常广泛,除了简单的Web服务,还可以用于数据库、负载均衡器等各种服务的HA。例如,你可以将 Keepalived 与 HAProxy 结合使用,构建一个高可用的负载均衡集群。你也可以为MySQL数据库配置Keepalived,实现数据库的主备切换。
另外, Keepalived 还支持多种高级特性,例如:
- 预先分配的VIP (Preempt): Backup服务器在恢复后立即抢占VIP。
- 延迟启动 (Delay): 避免服务器启动时立即抢占VIP。
- 多实例 (Multiple Instances): 在同一台服务器上运行多个
Keepalived实例。
结合vDisk云桌面解决方案
在企业IT架构