目录
一、keepalived 双机热备基础知识
1. keepalived 概述及安装
核心定位:
Keepalived 最初是为 LVS(Linux Virtual Server)设计的高可用辅助工具,提供 故障切换(Failover) 和 健康检查(Health Checking) 功能:
故障切换:当主节点(Master)故障时,自动将流量迁移至备用节点(Backup),业务恢复后切回主节点16。
健康检查:监控 LVS 调度器及后端节点服务器的可用性,自动隔离故障节点并重新纳入恢复节点37。
适用场景:负载均衡器高可用(如 LVS 主备调度器)。
非 LVS 环境(如 Web、数据库、FTP 服务的双机热备)
2. keepalived 的热备方式
基于 VRRP 协议实现:
VRRP(虚拟路由冗余协议):
多台服务器组成热备组,共享一个虚拟 IP(VIP)对外提供服务
主备角色:
MASTER:活跃节点,持有 VIP 并处理流量
BACKUP:待命节点,监听 MASTER 状态,故障时接管 VIP
VIP 漂移机制:
VIP 根据优先级(
priority
)在热备组内动态转移,无需手动配置虚拟接口(如eth0:0
)
核心优势:
透明切换:客户端无感知故障转移(仅 1-2 个数据包丢失)
跨服务兼容:适用于任何基于 IP 的服务(Web、SSH、DNS 等)
3. Keepalived 的安装与服务控制
(1)安装 Keepalived
yum install -y keepalived ipvsadm # 安装 Keepalived 及 LVS 管理工具
(2)控制Keepalived 服务
systemctl start keepalived # 启动服务
systemctl stop keepalived # 停止服务
systemctl enable keepalived # 启用开机自启
systemctl status keepalived # 查看运行状态
ip addr show dev eth0 # 检查 VIP 是否绑定(MASTER 节点可见
二、LVS+keepalived 案例 双机热备
环境
105:客户端 101,102:keepa+LVS 103,104:网站服务器
部署
-安装
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
dnf -y install keepalived ipvsadm
-配置文件是模板需拷贝
cd /etc/keepalived
cp keepalived.conf.sample keepalived.conf
--101
可选参数:nopreempt(不抢占模式)
vim /etc/keepalived/keepalived.conf
router_id LVS_01 #id可以一样,该id仅本地有效
#vrrp_strict #注销掉
vrrp_instance VI_1 {
state MASTER
virtual_router_id 51 //热备组号,需要在同一个组
interface ens33
priority 100 //优先级
advert_int 1
authentication { //热备组密码认证
auth_type PASS //特定认证类型
auth_pass 1111 //密码的认证机制
}
}
virtual_ipaddress {
192.168.10.172 #Vip
}
-------为LVS真实服务器设置
virtual_server 192.168.10.172 80 { //与vip保持一致
delay_loop 6 //检查状态的间隔时间
lb_algo rr //负载均衡算法
lb_kind DR //负载均衡类型
# persistence_timeout 50 //持久化超时时间
protocol TCP //传输控制协议
real_server 192.168.10.103 80 {
weight 1 //权重
TCP_CHECK { //检查机制,采用 TCP 协议进行健康检查
connect_port 80 //尝试连接的端口
connect_timeout 3 //连接超时时间
retry 3 //重试次数
delay_before_retry 3 //重试前的延迟时间
}
}
real_server 192.168.10.104 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
##:set paste 粘贴取消自动换行
--102
vim /etc/keepalived/keepalived.conf
router_id LVS_02
#vrrp_strict #注销掉
vrrp_instance VI_1 {
state BACKUP
nopreempt //不抢占,注意只有备可以设置
virtual_router_id 51 //热备组号,需要在同一个组
interface ens33
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
}
virtual_ipaddress {
192.168.10.172
}
virtual_server 192.168.10.172 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50 //测试先去掉
protocol TCP
real_server 192.168.10.103 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.10.104 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
-启动服务
systemctl restart keepalived
-查看VIP
ip add
#真实服务器网站部署
systemctl stop firewalld
systemctl distable firewalld
setenforce 0
dnf -y install httpd
--103
echo "test333333">/var/www/html/index.html
systemctl start httpd
systemctl enable httpd
--104
echo "test444444">/var/www/html/index.html
systemctl start httpd
systemctl enable httpd
#web服务器设置DR模式
-VIP设置
ip addr add 192.168.10.172/32 dev lo label lo:0
-重启
nmcli c reload
nmcli c up lo
-添加路由条目
ip route add local 192.168.10.172/32 dev lo //本地回环地址路由
或
route add -host 192.168.10.172 dev lo //针对特定主机的路由设置
-改内核(路由没成功)
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
-重载
sysctl -p
-重启服务
systemctl restart httpd
systemctl enable httpd
验证
#模拟故障
关闭一个web,测试网站访问是否正常
在101,102 用“ipvsadm -ln” 可以查看统计信息,发现少了关闭的web信息
重新打开后会恢复,体现出来keepalived的功能。
关闭一个 keepalived 服务器,测试 VIP 漂移效果