keepalived服务器
keepalived高可用原理:搭建主、备服务器一样配置,在keepalived中配置相同的vip;主服务器发送“心跳消息”给备服务器,主服务器宕机,“心跳消息”停止发送,备服务器会让vip生效,产生“IP漂移”,备服务器成为主服务器;
- 注意不能同时有两个主服务器;
- 抢占模式(默认):主服务器优先级高于备服务器,主服务器恢复后会重新“抢回”vip;
- 非抢占模式(加上nopreempt参数才能开启):主服务器恢复后成为新的备份服务器,只有当原备份服务器宕机时,才会发生IP漂移;
- keepalived是基于VRRP协议来实现高可用的;
- VRRP 协议(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种 三层网络冗余协议,核心目标是解决 “网关单点故障” 问题 —— 通过将多台物理路由器(或服务器)虚拟化为一个 “逻辑网关”(即 “虚拟路由器”),确保当主网关故障时,备网关能自动接管,实现网络访问的 无感知高可用。
keepalived三大功能
-
高可用:VIP漂移,基于VRRP协议;
-
健康检测:通过执行检查脚本或网络请求等方式检测服务是否正常;
-
负载均衡:内置LVS管理器,通过keepalived配置LVS负载均衡功能;
keepalived的安装
#最少两台虚拟机一主一备
# CentOS7
yum install -y keepalived# Ubuntu
apt install -y keepalived
高可用的配置
#主服务器配置
vim /etc/keepalived/keepalived.conf
-------------------------------------------
! Configuration File for keepalivedglobal_defs {router_id hostname1 # 标识本节点的字符串,设置为hostname即可
}vrrp_instance VI_1 {state MASTER # 标识主节点服务(只有MASTER和BACKUP两种,大写)interface ens33 # VIP板顶的网卡接口virtual_router_id 51 # 虚拟路由id,和备节点保持一致priority 100 # 优先级,高于备节点的即可。# nopreempt # 禁止MASTER宕机恢复后抢占服务# smtp_alert # 激活故障时发送邮件告警mcast_src_ip 192.168.25.50 # 本机IP地址advert_int 1 # MASTER和BACKUP节点之间的同步检查时间间隔,单位为秒authentication { # 验证类型和验证密码auth_type PASS # PAAS(默认),HAauth_pass 1234 # MASTER和BACKUP使用相同明文才可以互通}virtual_ipaddress { # 虚拟IP地址池,可以多个IP192.168.25.213 # 虚拟IP1(VIP)}
}
-----------------------------------------------
# 保存退出
#重启keepalived
systemctl restart keepalived.service#备服务器配置
vim /etc/keepalived/keepalived.conf
-----------------------------------------------------------------
! Configuration File for keepalivedglobal_defs {router_id hostname2 # 标识本节点的字符串,设置为hostname即可
}vrrp_instance VI_1 {state BACKUP # 标识主节点服务(只有MASTER和BACKUP两种,大写)interface ens33virtual_router_id 51priority 99 # 优先级,低于主节点的即可。mcast_src_ip 192.168.25.51 # 本机IP地址advert_int 1authentication {auth_type PASSauth_pass 1234}#和主服务器的vip保持一致virtual_ipaddress {192.168.25.213}
}
------------------------------------------------------------------
# 保存退出
#重启keepalived
systemctl restart keepalived.service#进行验证测试
先在客户端访问vip 192.168.25.213 出来的应该是主服务器的网页
之后停掉主服务器的keepalived服务
systemctl stop keepalived.service
在到客户端访问vip 192.168.25.213 出来的应该是备份服务器的网页
之后在重新开启主服务器的keepalived服务
systemctl start keepalived.service
到客户端访问vip 192.168.25.213 出来的应该是主份服务器的网页
Keepalived高可用裂脑
在 Keepalived 高可用(主备)架构中,“裂脑(Split Brain)” 是最核心的故障场景—— 指主备节点之间的 “心跳链路” 中断,备节点误判主节点已故障,从而主动升级为 “主节点” 并抢占 VIP,最终导致集群中出现 “双主节点”(两个节点同时持有 VIP 并对外提供服务),引发数据冲突、服务混乱等问题。
解决方案
- 主备节点之间除了 “业务网卡”,额外添加一块 独立的心跳网卡(如 eth1),并在 Keepalived 中配置双心跳链路,避免单链路故障;
- 引入独立的 “仲裁节点”(如一台独立服务器、云服务商的健康检查服务),主备节点需同时向仲裁节点发送心跳,只有 “主节点心跳中断 + 仲裁节点确认”,备节点才会升级;