keepalived服务器
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 keepalived global_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(默认),HA auth_pass 1234 # MASTER和BACKUP使用相同明文才可以互通 } virtual_ipaddress { # 虚拟IP地址池,可以多个IP 192.168.25.213 # 虚拟IP1(VIP) } } ----------------------------------------------- # 保存退出 #重启keepalived systemctl restart keepalived.service #备服务器配置 vim /etc/keepalived/keepalived.conf ----------------------------------------------------------------- ! Configuration File for keepalived global_defs { router_id hostname2 # 标识本节点的字符串,设置为hostname即可 } vrrp_instance VI_1 { state BACKUP # 标识主节点服务(只有MASTER和BACKUP两种,大写) interface ens33 virtual_router_id 51 priority 99 # 优先级,低于主节点的即可。 mcast_src_ip 192.168.25.51 # 本机IP地址 advert_int 1 authentication { auth_type PASS auth_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 中配置双心跳链路,避免单链路故障;
- 引入独立的 “仲裁节点”(如一台独立服务器、云服务商的健康检查服务),主备节点需同时向仲裁节点发送心跳,只有 “主节点心跳中断 + 仲裁节点确认”,备节点才会升级;