高可用集群类型负载均衡集群LB通过分发请求到多台服务器提升性能避免单台服务器过载。高可用集群HA利用冗余机制主备切换确保服务持续可用典型场景如数据库、Web服务。单点故障解决方案SPoF消除系统中单一故障点例如通过冗余电源、网络链路或存储设备。高性能计算集群HPC用于大规模并行计算任务如科学模拟或大数据处理。可用性指标与计算SLA等级99.9%三个九年停机时间≤8.76小时99.99%四个九年停机时间≤52.6分钟可用性公式[ A \frac{MTBF}{MTBF MTTR} ]MTBF平均无故障时间MTTR平均修复时间优化方向降低MTTR快速故障恢复增加冗余多节点、多链路VRRP协议核心术语解释VRID虚拟路由器标识同一组设备需一致VIP虚拟IP客户端访问的地址VMAC虚拟MAC格式为00-00-5E-00-01-{VRID}Master/Backup主设备优先处理流量备设备监听状态优先级规则范围1-254默认100值越大优先级越高优先级0表示主动释放Master角色工作模式抢占式Master恢复后自动夺回VIP非抢占式需手动切换Keepalived功能与配置核心功能VIP漂移基于VRRP健康检测TCP/HTTP/自定义脚本自动生成IPVS规则集成LVS配置文件结构/etc/keepalived/keepalived.conf ├── global_defs # 全局参数邮件通知、路由ID ├── vrrp_instance # 定义VRRP组优先级、VIP └── virtual_server # LVS规则可选启用keepalived日志功能把日志文件独立出来方便后续查看[rootKA1 ~]# vim /etc/sysconfig/keepalived KEEPALIVED_OPTIONS-D -S 6 #日志级别为0-7[rootka1 ~]#vim /etc/rsyslog.conf [rootka1 ~]#systemctl restart keepalived.service rsyslog.service [rootka1 ~]#tail -f /var/log/keepalived.log实现独立子配置文件当生产环境复杂时 /etc/keepalived/keepalived.conf 文件中内容过多不易管理可以单独区分出来将不同集群的配置比如不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含子配置文件。格式include /path/file示例mkdir /etc/keepalived/conf.d -p vi /etc/keepalived/conf.d/webvip.conf在主配置全局子配置路由把你要分开放置的文件部分粘贴到该文件中webvip_conf源文件的这部分删掉换成子文件命令检查语法有没有问题没有问题重启文件即可健康检测示例TCP_CHECK { connect_port 80 # 检测80端口 connect_timeout 3 }实战架构方案单主架构一个Master持有VIPBackup监听故障时切换。双主架构两个VRRP实例节点互为主备均衡负载。IPVS高可用Keepalived LVS实现负载均衡与故障转移。HAProxy高可用Keepalived监控HAProxy进程异常时切换VIP。关键机制详解VRRP状态同步主节点周期性发送Advertisement报文默认1秒。备节点超时默认3倍Advertisement间隔未收到报文时触发切换。健康检测联动检测失败时降低优先级触发VIP迁移。通知脚本绑定notify脚本在状态切换时执行自定义操作如告警。双主模式原理节点A管理VIP1节点B管理VIP2互不冲突提升资源利用率。Keepalived 高可用集群总结核心知识点VRRP协议用于解决单点故障问题通过虚拟路由器实现 VIP 漂移。Master/Backup 角色由优先级决定优先级高的节点成为 Master 并持有 VIP。抢占模式是默认行为Master 恢复后重新抢占 VIP非抢占模式需要所有节点设置为state BACKUP。Keepalived提供 VIP 管理功能基于 VRRP 实现 IP 高可用同时支持对后端服务如 Nginx、MySQL的健康检测。通知脚本可通过notify_master/backup/fault触发自定义动作例如邮件告警。高可用架构分为单主模式和双主模式。单主模式中一个 Master 和一个 Backup 节点管理单个 VIP双主模式通过两个 VIP 分别由不同节点管理提高资源利用率。IPVSLVS集成允许 Keepalived 自动配置 LVS 规则实现负载均衡与高可用支持 DR、NAT 和 TUN 模式。关键配置项包括vrrp_instance定义虚拟路由器、优先级和 VIP、virtual_server配置 LVS 的 VIP 和后端 RS以及track_script调用自定义脚本监控服务状态。实验Keepalived 基于 VRRP 的集群部署实验实验目的如果只有一台调度器调度器本身就是单点故障调度器一挂整个业务全部断了。本实验基于 VRRP 协议部署 Keepalived实现调度器的主备冗余与 VIP 漂移解决调度器单点故障结合 Keepalived 集成 IPVS 的健康检测能力实现后端服务器故障自动隔离保障业务持续可用。生产一般用主备还是双主答两种都有。对稳定性优先级极高的业务多用主备Active‑Standby一台全力干活另一台待命需要压榨硬件性能流量大会用双主 Active‑Active。F5 两种部署模式都支持。环境准备两台虚拟机IP在同一个网段KA1KA2vi /etc/chrony.conf安装 Keepalivedyum install keepalived -y systemctl enable --now keepalived查看当前策略如果这行注释了就能ping了查看策略是没有的如果没注释就有策略显示但是ping不通下面全部注释掉1.基础配置单主模式一台主调度器干活一台备用待命。主挂了备接管 VIP。缺点备用机器平时完全空闲资源浪费只有主在扛流量。VRRP切换策略抢占模式默认故障恢复后的主节点一启动立刻抢回 VIP。坑如果主机器服务还没完全启动好就把 VIP 抢回来业务直接崩。网络抖动也会引发反复抢 VIPVIP 抖动业务间歇性断。非抢占模式主恢复之后不抢回 VIP就让备机继续干活。适合生产避免切换抖动缺点故障后不会自动切回原来的主机器。延迟抢占模式主节点恢复等待一段时间之后再抢回 VIP。给服务留足启动时间既最终切回主机又防止抢的太快业务异常简单总结抢占快但容易出问题非抢占稳但故障后不自动复原延迟抢占折中方案企业实际常用a.抢占模式默认1. 配置 Master 节点KA1vim /etc/keepalived/keepalived.conf配置如图224.0.0.44是组播地址检测文件内容有没有问题keepalived -t if /etc/keepalived/keepalived.conf重启服务细节说明2. 配置 Backup 节点KA2把文件从KA1复制过来#配置文件和master基本一致只需修改三行修改state BACKUP并设置priority 80。3.测试查看网卡KA1优先级高所以抢占VIPKA2则没有抓包观察谁有VIP就跟组播地址说我活了不说就是挂了tcpdump -i eth0 -nn host 224.0.0.18此时在KA2看到的也是KA1的IP跟组播地址传讯如果KA1挂了才会变成KA2跟组播地址说这就是抢占模式测试 VIP 漂移时停止 KA1 的 Keepalived 并观察 VIP 是否迁移到 KA2ip addr show ens160 或者ifconfigb.非抢占模式默认为抢占模式preempt即当高优先级的主机恢复在线后会抢占低先级的主机的master角色这样会使vip在KA主机中来回漂移造成网络抖动建议设置为非抢占模式 nopreempt 即高优先级主机恢复后并不会抢占低优先级主机的master角色非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机注意要关闭 VIP抢占必须将各 keepalived 服务器state配置为BACKUP所有节点配置为state BACKUP并添加nopreemptvrrp_instance VI_1 { state BACKUP nopreempt priority 100 # KA1 ... }c.延迟抢占模式抢占延迟模式即优先级高的主机恢复后不会立即抢回VIP而是延迟一段时间默认300s再抢回VIP注意各 keepalived 服务器state配置为BACKUP并且不要启用 vrrp_strict指定抢占延迟时间为10s默认延迟300sVIP单播配置keepalived主机之间利用多播相互通告消息会造成网络拥塞可以替换成单播减少网络流量先查看还是组播状态时的抓包显示谁有VIP谁发给组播IP修改文件 其他不变指定对方主机的IP路线KA1192.168.1.50KA2192.168.1.60重启查看单播50可以发60发不了因为没用VIP把50停掉就60可以发了systemctl stop keepalived ifconfig #查看VIP此时VIP已经被60抢占 tcpdump -i ens160 -nn src host 192.168.1.60 and dst 192.168.1.502.实现 双主架构单主架构同一时间只有一个Keepalived对外提供服务此主机繁忙而另一台主机却很空闲利用率低下可以使用master/master的双主架构解决此问题。一台主调度器干活一台备用待命。主挂了备接管 VIP。缺点备用机器平时完全空闲资源浪费只有主在扛流量。 所以引出双主 (Master/Master) 模式双主就是两台调度器同时工作互为主备。两台机器都承担业务流量把两台机器算力都利用起来不浪费服务器资源。注意VIP是一个虚拟IP不需要特意创建和KA在同一个网段能ping即可配置两个vrrp_instance分别管理不同 VIP测试:两台机器都有自己的VIPIPVS 高可用LVS的流量转发模式实验DR / NAT / TUN实验目的如果只有一台调度器调度器本身就是单点故障调度器一挂整个业务全部断了。所以要用 KeepalivedLVS 做调度器的高可用解决调度器单点问题同时实现后端服务器的故障自动隔离健康检查保障业务不中断。只部署一台 LVS 调度器PVSLVS 内核模块本身只有四层流量分发功能没有高可用能力。单台 IPVS 调度器是单点调度器宕机整个负载均衡全部瘫痪。所以必须两台调度器做冗余。IPVS 高可用IPVS(做四层流量分发) Keepalived(VRRP 协议)给调度器做双机冗余实现 VIP 漂移、调度器故障自动切换同时对后端 RealServer 做健康检查故障 RS 自动摘除集群IPVS 负责转发数据包Keepalived 负责 “保活”解决调度器单点故障监控后端节点健康ipvs只管调度器和后端 RS 之间不关心 KA1 和 KA2 谁拿 VIP。组合 1Keepalived【单主备架构 延迟抢占】 IPVS【DR 模式】实验思路准备 2 台调度器、2 台后端 Web RS所有机器安装 ipvsadm、keepalived。RSDR 模式lo 网卡绑定 VIP调内核 ARP 参数解决 ARP 冲突问题。配置 keepalived单主备主节点 state MASTER、priority 优先级高备机 state BACKUP、优先级低配置 VRRP 认证、VIP配置 virtual_server 定义 LVS 规则、TCP 健康检查。启动服务客户端访问 VIP流量走主调度器。故障模拟停止主节点 keepalived观察 VIP 漂移到备机业务不间断恢复主节点观察 VIP 抢占。1.环境新建两台虚拟机充当服务器服务器配置完文件后只做验证不安装别的KA1、KA2 两台 Keepalived 调度器LVSRS1 (192.168.1.10)、RS2 (192.168.1.20) 后端真实 Web 服务器VIP192.168.1.100模式LVS‑DR 直接路由模式Keepalived 既管理 VIP 漂移又写 ipvs 转发规则、做后端健康检查2.配置 LVS-DR 模式时后端 RS 需绑定 VIP 到lo并设置 ARP 抑制DR 模式特点请求经过 LVS 调度器但是响应数据包不经过 LVS后端 RS 直接回包给客户端。客户端访问 VIP 192.168.1.100数据包到 LVS 调度器LVS 改写目标 MAC转给后端 RS。RS 收到包目标 IP 是 VIP如果 RS 本机没有 VIP这个包会直接丢弃所以必须在lo回环网卡绑定 VIP但 lo 网卡绑了 VIP 之后所有 RS 机器都有同一个 VIP当 ARP 广播询问 VIP 的 MAC 地址所有 RS 都会应答 ARP网络就乱套这就是 ARP 冲突。所以这 4 条内核参数就是干这个net.ipv4.conf.all.arp_ignore1 net.ipv4.conf.all.arp_announce2 net.ipv4.conf.lo.arp_ignore1 net.ipv4.conf.lo.arp_announce2arp_ignore1仅当请求 IP 是入接口上配置 IP 才回复 ARPRS 收到 ARP不会对外应答 VIP 的 ARParp_announce2对外广播 ARP 的时候尽量使用出接口的 IP不用 lo 上的 VIP 去应答 ARP两台KA都要装3.Keepalived单主备架构Keepalived 启动后自动调用ipvsadm写入内核转发规则不需要手动敲 ipvsadm 命令重启 KA 服务规则自动重建。KA1节点的配置virtual_server 192.168.1.100 80 { delay_loop 6 #每隔六秒访问后端一次 lb_algo rr lb_kind DR protocol TCP real_server 192.168.1.10 80 { #服务器IP weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 retry 3 delay_before_retry 3 } } real_server 192.168.1.20 80 { weight 1 TCP_CHECK { connect_timeout 2 retry 3 delay_before_retry 3 connect_port 80 #第二台服务器给它一个端口 } } }KA2文件配置一模一样谁有VIP谁生效VRRP 靠优先级 priority区分主备配置文件内容相同但 priority 数值不一样谁是 Master谁拿到 VIPBackup 机器不会绑定 VIP4.重启文件后策略就自动写上了访问测试随便开一台主机注意如果可以单独curl但是流量不显示没用发送也没用收到停止服务后依然如此可能是长期没用VIP休眠了需要ping一下删掉两个KA的单播配置此时两个主机应该都有VIP—— 这个现象就是脑裂⚠脑裂 脑裂VRRP 组播 / 单播通信中断两台 KA 都认为自己是 Master两台机器同时拿到同一个 VIP。 原因防火墙拦截 VRRP 组播报文224.0.0.18、或者网络隔离。 解决手段选一 使用单播模式unicast_peer { 对端IP }不用组播 开启vrrp_strict严格模式限制异常 VIP 行为 防火墙放行 VRRP 协议。5.模拟故障停掉其中一台的keepalived服务查看另一台会发现两个VIP都在高可用的实现理念无论那个主机挂了都不会影响VIP通知脚本切换发邮件告警Keepalived 在 VRRP 状态切换的时候backup→master、master→backup、fault 故障会调用notify_*指定脚本把状态作为参数传给脚本。脚本收到master/backup/fault参数触发发送 QQ/163 邮件告警。注意点脚本必须给执行权限chmod x mail.sh没有权限切换不会执行脚本linux 自带mail工具需要配置/etc/mail.rc填写邮箱、授权码不能用 QQ 登录密码要用第三方授权码服务器需要开放 25 端口smtp云服务器很多运营商封禁 25 端口邮件直接发不出去频繁切换会大量发邮件会导致邮箱封号实验结束注释 / 删除 notify 脚本。默认情况下是不能执行外部i脚本的所以要先给脚本一个权限触发切换安装发送邮件的#邮箱配置 vim /etc/mail.rc #输入 set smtpsmtp.qq.com set smtp-authlogin set smtp-auth-userxxxxxxxxxnqq.com set smtp-auth-passwordTAb9vYbWevbPtN4m #授权码 set fromxxxxxxxxxqq.com set ssl-verifyignore #如果是网易163邮箱 set smtpsmtp.163.com set smtp-authlogin set smtp-auth-userxxxxx163.com set smtp-auth-passwordTAb9vYbWevbPtN4m #授权码 set fromxxxxx163.com set ssl-verifyignore授权码如何获取qq邮箱163邮箱打开邮件投递端口25查看有没有发送测试写一个发送邮件脚本反应比较慢可以重启一下定义脚本[rootKA1 KA2 ~]# vim /etc/keepalived/mail.sh #!/bin/bash mail_destxxxxxxxxxqq.com mail_send() { mail_subj$HOSTNAME to be $1 vip 转移 mail_messdate %F\ %T: vrrp 转移,$HOSTNAME 变为 $1 echo $mail_mess | mail -s $mail_subj $mail_dest } case $1 in master) mail_send master ;; backup) mail_send backup ;; fault) mail_send fault ;; *) exit 1 ;; esac增加执行权限如果存在VIP就执行脚本如果VIP被抢走了就生成faild文件触发VIP切换此时VIP会转移到KA2做完邮件测试就可以把脚本删了否则频繁发邮件会封号关键原理VRRP 协议中Master 周期性发送组播通告默认 224.0.0.18Backup 监听。若超时未收到通告Backup 接管 VIP。健康检测通过TCP_CHECK或HTTP_GET监控后端服务失败时调整优先级触发切换。脑裂问题可通过vrrp_strict严格模式避免配置冲突或使用单播unicast_peer替代组播。日志分离需配置local6.* /var/log/keepalived.log并重启rsyslog。组合 2Keepalived【双主架构】 IPVS【NAT 模式】没实操含义两台调度器互为主备各持有一个 VIP同时承担流量流量转发使用 NAT 地址转换模式。组合 3Keepalived【单主备 非抢占】 IPVS【TUN 隧道模式】含义调度器故障切换后原主机恢复也不抢回 VIP后端 RS 跨网段用 IP 隧道转发数据包。典型问题解决VIP 无法访问时检查防火墙和 ARP 抑制设置firewall-cmd --add-port80/tcp服务未注册到 systemd 时手动创建服务文件vim /etc/systemd/system/nginx.service抢占失败时确认nopreempt和优先级配置正确。