一、Keepalived双机热备基础知识
1. Keepalived概述及安装
Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol)协议的开源软件,用于实现服务器的高可用性(HA)。它通过虚拟 IP 地址(VIP)在主备服务器之间切换,确保服务在单点故障时自动恢复。Keepalived 还支持负载均衡功能,常与 LVS(Linux Virtual Server)结合使用。
(1) Keepalived的热备方式
Keepalived 采用 VRRP 协议实现双机热备。VRRP 允许多个服务器共享一个虚拟 IP 地址,其中一台服务器作为主服务器(Master),其他作为备用服务器(Backup)。主服务器负责处理流量,备用服务器监控主服务器状态。当主服务器故障时,备用服务器通过选举机制(基于优先级)接管虚拟 IP,实现无缝切换。这种方式确保了服务的高可用性和连续性。
(2) Keepalived的安装与服务控制
Keepalived 的安装通常通过 Linux 包管理器完成。以下是常见安装步骤和服务控制命令(以 Ubuntu 或 CentOS 为例):
-
安装命令:
bash# Ubuntu/Debian sudo apt update sudo apt install keepalived # CentOS/RHEL sudo yum install epel-release # 如果需要 sudo yum install keepalived -
服务控制:
- 启动服务:
sudo systemctl start keepalived - 停止服务:
sudo systemctl stop keepalived - 重启服务:
sudo systemctl restart keepalived - 设置开机自启:
sudo systemctl enable keepalived - 查看状态:
sudo systemctl status keepalived
- 启动服务:
安装后,配置文件位于 /etc/keepalived/keepalived.conf。编辑此文件进行配置。
2. 使用Keepalived实现双机热备
实现双机热备需配置主服务器和备用服务器,确保它们共享同一虚拟 IP。以下是详细步骤。
(1) 主服务器的配置
主服务器配置文件示例(/etc/keepalived/keepalived.conf):
conf
global_defs {
router_id master_node # 唯一标识符
}
vrrp_instance VI_1 {
state MASTER # 设置为MASTER
interface eth0 # 网络接口名
virtual_router_id 51 # 虚拟路由器ID,需与备用服务器一致
priority 100 # 优先级,值越高越优先(主服务器设置较高)
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS # 认证类型
auth_pass 1234 # 认证密码,需与备用服务器一致
}
virtual_ipaddress {
192.168.1.100 # 虚拟IP地址
}
}
配置后重启服务:sudo systemctl restart keepalived。
(2) 备用服务器的配置
备用服务器配置文件类似,但需调整状态和优先级:
conf
global_defs {
router_id backup_node # 唯一标识符
}
vrrp_instance VI_1 {
state BACKUP # 设置为BACKUP
interface eth0 # 网络接口名
virtual_router_id 51 # 与主服务器一致
priority 90 # 优先级低于主服务器
advert_int 1 # 心跳间隔
authentication {
auth_type PASS
auth_pass 1234 # 与主服务器一致
}
virtual_ipaddress {
192.168.1.100 # 虚拟IP地址
}
}
重启服务:sudo systemctl restart keepalived。
(3) 测试双机热备功能
测试步骤确保故障切换正常:
- 验证虚拟IP :在主服务器上运行
ip addr show eth0,确认虚拟 IP(192.168.1.100)绑定。 - 模拟故障 :停止主服务器服务:
sudo systemctl stop keepalived。 - 检查切换 :在备用服务器上运行
ip addr show eth0,确认虚拟 IP 已接管。 - 恢复测试:重启主服务器服务,检查虚拟 IP 是否回切。
- 日志监控 :查看日志:
journalctl -u keepalived,确认切换事件。
测试成功标准:虚拟 IP 在主服务器故障时自动切换到备用服务器,服务不中断。
二、使用Keepalived实现双机热备
此部分基于 LVS+Keepalived 实现高可用群集,适用于 Web 服务负载均衡。假设环境:两台调度器(主和从)、多台 Web 节点服务器。
1. 基础环境配置
前提条件:
-
网络设置 :所有服务器在同一局域网,分配静态 IP。例如:
- 主调度器:192.168.1.10
- 从调度器:192.168.1.11
- Web 节点:192.168.1.20, 192.168.1.21
- 虚拟 IP:192.168.1.100
-
软件安装 :
-
调度器:安装 Keepalived 和 IPVS(LVS 内核模块)。
bashsudo apt install keepalived ipvsadm # Ubuntu sudo yum install keepalived ipvsadm # CentOS -
Web 节点:安装 Web 服务器(如 Nginx 或 Apache)。
bashsudo apt install nginx # Ubuntu sudo yum install httpd # CentOS
-
-
防火墙配置:开放相关端口(如 VRRP 协议端口 112,HTTP 端口 80)。
2. 配置主调度器
编辑 Keepalived 配置文件 (/etc/keepalived/keepalived.conf),结合 LVS 设置:
conf
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 NAT # NAT 模式
protocol TCP
real_server 192.168.1.20 80 { # Web 节点1
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
real_server 192.168.1.21 80 { # Web 节点2
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
}
重启服务:sudo systemctl restart keepalived。
3. 配置从调度器
配置文件类似主调度器,但状态改为 BACKUP,优先级降低:
conf
global_defs {
router_id lvs_backup
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
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 NAT
protocol TCP
real_server 192.168.1.20 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
real_server 192.168.1.21 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
}
重启服务:sudo systemctl restart keepalived。
4. 配置Web节点服务器
在每个 Web 节点上配置 Web 服务:
-
安装并启动 Nginx(示例):
bashsudo apt install nginx sudo systemctl start nginx sudo systemctl enable nginx -
创建测试页面:编辑
/var/www/html/index.html,添加内容如 "Server 1" 或 "Server 2" 以区分节点。 -
确保 Web 服务监听 80 端口。
5. 测试LVS+Keepalived高可用群集
测试包括负载均衡和故障切换:
- 负载均衡测试 :
- 从客户端访问虚拟 IP:
curl http://192.168.1.100,多次请求应轮询到不同 Web 节点。 - 使用
ipvsadm查看连接状态:sudo ipvsadm -ln,确认流量分布。
- 从客户端访问虚拟 IP:
- 高可用测试 :
- 模拟主调度器故障:停止主调度器服务:
sudo systemctl stop keepalived。 - 检查虚拟 IP:在从调度器上运行
ip addr show eth0,确认 IP 接管。 - 客户端访问:服务应不中断,流量由从调度器处理。
- 恢复主调度器:重启服务,检查 IP 回切。
- 模拟主调度器故障:停止主调度器服务:
- 日志验证 :查看 Keepalived 日志:
journalctl -u keepalived,确认切换和健康检查事件。
成功标准:群集在故障时自动切换,负载均衡均匀分配请求。