一、Keepalived 双机热备基础知识
1. Keepalived 概述及安装
Keepalived 是一个基于 VRRP协议的开源软件,用于实现服务器的高可用性。它通过主备模式自动切换,确保服务在故障时无缝转移。主要应用于负载均衡、Web 服务器等场景
(1) Keepalived 的热备方式
Keepalived 采用 VRRP 协议实现热备。在双机热备中:
主服务器(Master):承担服务流量,定期发送心跳包
备用服务器(Backup):监控主服务器状态。当主服务器故障时,备用服务器接管虚拟 IP(VIP),成为新的主服务器
虚拟路由器 ID(VRID):主备服务器需配置相同的 VRID,以标识同一个虚拟路由器组。
优先级机制:通过优先级值(如 100 为主,50 为备)决定切换顺序
切换过程可表示为: $$ \text{主服务器故障} \implies \text{备用服务器提升为主} \implies \text{服务恢复} $$
(2) Keepalived 的安装与服务控制
在 Linux 系统上安装 Keepalived,以 Ubuntu 为例:
bash
# 安装 Keepalived
sudo apt-get update
sudo apt-get install keepalived -y
服务控制命令:
启动服务:sudo systemctl start keepalived
停止服务:sudo systemctl stop keepalived
重启服务:sudo systemctl restart keepalived
查看状态:sudo systemctl status keepalived
2. 使用 Keepalived 实现双机热备
(1) 主服务器的配置
编辑主服务器的配置文件 /etc/keepalived/keepalived.conf:
plaintext
global_defs {
router_id LVS_MASTER # 唯一标识
}
vrrp_instance VI_1 {
state MASTER # 角色为主
interface eth0 # 网络接口
virtual_router_id 51 # VRID,需一致
priority 100 # 优先级,主高于备
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS # 认证类型
auth_pass 1234 # 密码,需一致
}
virtual_ipaddress {
192.168.1.100 # 虚拟 IP
}
}
重启服务:sudo systemctl restart keepalived
(2) 备用服务器的配置
备用服务器配置文件类似,但修改状态和优先级:
plaintext
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP # 角色为备
interface eth0
virtual_router_id 51
priority 50 # 优先级低于主
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.1.100
}
}
重启服务:sudo systemctl restart keepalived
(3) 测试双机热备功能
连通性测试
使用 ping 命令测试虚拟 IP 的连通性:
bash
ping 192.168.1.100
如果主服务器故障,应能继续 ping 通,IP 切换到备服务器
Web 访问测试
假设虚拟 IP 指向 Web 服务:
bash
curl http://192.168.1.100
在主服务器宕机时,服务应无中断
查看日志记录
检查 Keepalived 日志以验证切换:
bash
tail -f /var/log/syslog | grep keepalived
日志中应有类似条目:
plaintext
Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
二、使用 Keepalived 实现双机热备
1. 基础环境配置
网络设置 :确保主备服务器在同一网段,虚拟 IP 为 192.168.1.100
Web 节点 :准备至少两台后端 Web 服务器(如 IP: 192.168.1.101, 192.168.1.102),安装 Nginx 或 Apache
防火墙:开放 VRRP 协议端口(如 UDP 112)和 Web 端口(如 TCP 80)
2. 配置主调度器
在主服务器上配置 Keepalived 和 LVS:
plaintext
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.1.100
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6
lb_algo rr # 轮询算法
lb_kind DR # 直接路由模式
protocol TCP
real_server 192.168.1.101 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.1.102 80 {
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
重启服务:sudo systemctl restart keepalived
3. 配置从调度器
在备用服务器上,使用类似配置,但修改为 state BACKUP 和 priority 50
4. 配置 Web 节点服务器
在每个 Web 节点上:
设置 ARP 抑制(避免 VIP 冲突):
bash
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p
配置 Web 服务(以 Nginx 为例):
bash
sudo apt-get install nginx -y
echo "Server response from $(hostname)" > /var/www/html/index.html
5. 测试 LVS+Keepalived 高可用群集
模拟故障:手动停止主服务器的 Keepalived 服务:
bash
sudo systemctl stop keepalived
测试切换:
使用 curl 访问虚拟 IP:
bash
curl http://192.168.1.100
应能获得 Web 响应,无中断
查看备用服务器日志:
bash
tail -f /var/log/syslog | grep keepalived
应有提升为主服务器的记录
恢复测试:重启原主服务器,验证是否自动恢复为备角色