keepalived入门及其基础运用实验
一、概念
Keepalived 是一个用 C 语言编写的、轻量级的高可用性和负载均衡解决方案软件。 它的主要目标是在基于 Linux 的系统上提供简单而强大的故障转移功能,并可以结合 Linux Virtual Server 提供负载均衡。
1、Keepalived 主要提供两大功能:
1.高可用性:
原理: 基于 VRRP 协议。
以下是VRRP相关术语:
1. 虚拟路由器(Virtual Router)
定义:由多个物理路由器(Master和Backup)通过VRRP协议虚拟出的逻辑路由器,对外表现为单一的IP和MAC地址。终端设备仅需配置虚拟路由器的IP作为网关,无需感知具体物理设备
作用:解决单点故障问题,当Master故障时,Backup自动接管流量转发,实现无缝切换
2. 虚拟路由器标识(VRID)
范围:0-255,用于唯一标识同一局域网内的不同VRRP组。同一VRID组内的路由器共享相同的虚拟IP和MAC地址
示例:若VRID=1,则对应的虚拟MAC地址为
00-00-5E-00-01-01
(后两位为VRID的十六进制表示)
3. 虚拟IP(VIP, Virtual IP)
定义:虚拟路由器的IP地址,由管理员配置,通常作为局域网内主机的默认网关地址。可与物理路由器的接口IP相同(此时该路由器为IP地址拥有者)
特性:
多个物理路由器共享同一个VIP,但仅Master响应ARP请求
切换时,新Master会发送免费ARP更新网络设备的ARP缓存
4. 虚拟MAC(VMAC, Virtual MAC)
格式:固定前缀
00-00-5E-00-01-XX
,其中XX
为VRID(如VRID=3则MAC为00-00-5E-00-01-03
)作用:确保主备切换时终端设备的ARP表无需更新,因为VMAC保持不变
5. 物理路由器角色
Master(主设备):
职责:转发目的地址为VIP的流量,周期性发送VRRP通告报文(默认1秒/次)
选举规则:优先级最高者成为Master;若优先级相同,则接口IP较大者胜出
Backup(备用设备):
职责:监听Master的通告报文,若超时(默认3秒未收到)则接管Master角色
抢占模式:可配置为主动抢占(高优先级Backup立即接管)或非抢占模式
6. 优先级(Priority)
范围:0-255,默认值为100
255:保留给IP地址拥有者(即接口IP与VIP相同的设备),无需选举直接成为Master
0:表示设备主动退出Master竞选(如管理员手动降级)
1-254:可手动配置,值越大优先级越高
动态调整:可绑定上行链路监控,当上行故障时自动降低优先级触发切换
keeplalived.工作方式:
1.一组服务器(通常是两台或更多)运行 Keepalived 守护进程,形成一个 VRRP 实例。
2.这些服务器被配置为拥有一个或多个共享的虚拟 IP 地址。这个 VIP 是客户端实际访问的 IP 地址。
3.其中一台服务器被选举为 MASTER,其他服务器处于 BACKUP 状态。
4.MASTER 节点:
持有共享的 VIP。
定期发送 VRRP 通告给组内的其他节点,宣告自己还活着。
负责处理所有发送到该 VIP 的流量。
BACKUP 节点:
1.监听 MASTER 发来的 VRRP 通告。
2.如果在一段时间内(advert_int 间隔 + 超时时间)没有收到 MASTER 的通告,BACKUP 节点会认为 MASTER 发生了故障。
3.此时,优先级最高的 BACKUP 节点会发起选举,将自己提升为新的 MASTER,并通过 ARP 广播宣告自己接管了 VIP。
故障转移: 这个过程实现了自动故障转移。当主服务器宕机时,备份服务器几乎可以瞬间(毫秒级)接管 VIP 和服务,对客户端来说服务几乎是连续的(短暂中断或 TCP 重连)。
优势: 简单、高效、切换速度快。
2.负载均衡:
原理: 集成并管理 LVS。
工作方式:
Keepalived 自身不直接处理负载均衡流量。
它利用 Linux 内核的 LVS 框架来实现第四层(传输层,如 TCP/UDP)的负载均衡。
Keepalived 负责:
配置 LVS 规则: 在 MASTER 节点上,根据配置文件自动设置 LVS 的虚拟服务器、后端真实服务器池、调度算法(如轮询 rr、加权轮询 wrr、最少连接 lc 等)和健康检查机制。
管理 LVS 状态: 当发生主备切换时,新的 MASTER 会接管并重新配置 LVS 规则,确保负载均衡服务不中断。
健康检查: 对后端真实服务器进行健康检查(支持 TCP_CHECK, HTTP_GET, SSL_GET, MISC_CHECK 等多种方式)。如果检测到某个真实服务器故障,Keepalived 会将其从 LVS 池中移除;当服务器恢复时,再将其添加回来。
架构: Keepalived 节点(运行 VRRP 的 MASTER)通常作为 LVS Director,接收客户端请求,并根据调度算法将请求转发给后端的 Real Servers。客户端访问的是 Keepalived 节点持有的 VIP。
2、主要配置文件
/etc/keepalived/keepalived.conf: 核心配置文件,包含:
global_defs:全局配置(如通知邮件)。
vrrp_script:定义用于跟踪接口或进程状态的自定义脚本。
vrrp_instance:定义 VRRP 实例(组 ID、虚拟路由器 ID、状态、优先级、认证、VIP 等)。
virtual_server:定义 LVS 虚拟服务器(VIP + 端口)及关联的后端真实服务器池、调度算法和健康检查配置。
二.Keepalived 实验
2.1 前期的配置与安装
实验拓扑图如下(ip地址写自己的)
安装keepalived
dnf install keepalived -y
systemctl start keepalived
ps axf | grep keepalived
安装完后,先修改配置文件:
其后面的所有都注释
2.2.独立keepalived日志
将 Keepalived 日志从系统日志(如 /var/log/messages
)中分离出来,是生产环境运维的关键实践。
必配独立日志的四大场景
场景 | 问题 | 独立日志价值 |
高频健康检查 | 日志淹没系统日志,掩盖关键告警 | 避免 syslog 洪泛,精准定位问题 |
多节点集群排错 | 跨服务器查日志效率低下 | 单节点完整日志流,加速故障定位 |
安全审计合规 | 混合日志无法满足等保要求 | 独立存储VIP切换记录,满足审计追溯 |
性能瓶颈分析 | 无法统计VRRP报文延迟 | 记录毫秒级事件,定位网络抖动 |
[root@KA1 ~]# vim /etc/sysconfig/keepalivedKEEPALIVED_OPTIONS="-D -S 6"
[root@ka1 ~]#vim /etc/rsyslog.conflocal6.* #日志级别为0-7/var/log/keepalived.log
[root@ka1 ~]#systemctl restart keepalived.service rsyslog.service
[root@ka1 ~]#tail -f /var/log/keepalived.log
Apr 14 09:25:51 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10Apr 14 09:25:51 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10Apr 14 09:25:51 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10Apr 14 09:25:51 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: (VI_1) Sending/queueing gratuitous
ARPs on eth0 for 10.0.0.10Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for10.0.0.10
3.3独立子配置文件
当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理
将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含子配置文件
在 Keepalived 中配置独立子配置文件是管理复杂架构的核心实践,主要解决以下五大场景的配置痛点:
1. 多 VIP 多业务隔离
场景:单服务器承载多个业务(如 Web/DB 服务),需绑定不同 VIP2. 多 VRRP 实例(双主/多主)
场景:实现双活架构(如跨机房双主)3. 差异化健康检查策略
场景:不同业务需要独立检测机制4. 环境差异化配置(开发/生产)
场景:不同环境使用不同检测阈值5. 团队协作与权限分离
场景:网络团队管理 VIP,业务团队管理健康检查
子配置文件核心优势
当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理 将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含 子配置文件
核心优势 | 具体说明 | 应用场景示例 |
---|---|---|
多业务隔离与灵活管理 | 支持为不同业务(如Web/DB)配置独立的VIP和健康检查策略,避免配置冲突。子配置文件可独立修改(如 | 单服务器承载多个业务时,实现VIP和策略的模块化管理。 |
故障隔离与系统稳定性 | 单个子配置文件语法错误仅影响对应业务,不会导致整个Keepalived服务崩溃。支持热加载修复(需开启 | 生产环境中快速修复配置错误,避免服务全局中断。 |
团队协作与权限分离 | 网络团队管理VIP配置( | 多团队协作场景,如运维与开发分工配置。 |
复杂架构支持 | 支持多VRRP实例(如双活/多活)、差异化健康检查策略(HTTP/TCP检测)。子配置文件可独立定义优先级、认证参数等。 | 跨机房双主架构或不同业务(如Nginx和Haproxy)的高可用部署。 |
运维效率提升 | 增删VIP或调整策略时仅需操作独立文件,避免主配置冗长。日志与审计更聚焦,便于追踪变更(如VIP绑定记录)。 | 频繁调整负载均衡策略或需要精细化监控的场景。 |
mkdir /etc/keepalived/conf.d
vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {notification_email {594233887@qq.com}notification_email_from keepalived@KA1.timinglee.orgsmtp_server 127.0.0.1smtp_connect_timeout 30router_id KA1.timinglee.orgvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0vrrp_ipsets keepalivedvrrp_iptables}后加入include /etc/keepalived/conf.d/*.conf
将/etc/keepalived/conf.d中的
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 20priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:0}}
剪切到/etc/keepalived/conf.d/router.conf,重启服务即可
这里为了方便实验我做完得还原
3.4延迟抢占
Keepalived 的 延迟抢占(Delayed Preemption) 是一种精细化的故障恢复控制策略,用于解决主节点故障恢复后 立即切换(抢占) 可能引发的服务抖动问题。
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回VIP
默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动,
建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机
1. 抢占(Preemption)
定义:高优先级节点恢复后,立即夺回 Master 角色。
风险:若服务尚未完全启动,立即切换会导致二次中断。
2. 延迟抢占
核心思想:节点恢复后,等待指定时间再发起抢占,确保服务就绪。
价值:提升故障恢复的平滑性。
注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP
在两台KA上配置:
#ka1主机配置
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 20priority 100
preempt_delay 10
#优先级高
#抢占延迟10sadvert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:0}}#KA2主机配置
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 20priority 80
#优先级低
advert_int 1preempt_delay 10
authentication {auth_type PASSauth_pass 1111#抢占延迟10S
}virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:0}}
测试:
先关闭KA1的keepalived服务
systemctl stop keepalived.server
然后开个监视器,监视KA2的变化
watch -n1 ifconfig
tcpdump -i ens160 -nn host 224.0.0.44
查看ka2的变化
3.5组播变单播
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
还原实验环境
ka1
KA2保持不变,就删掉延迟抢占
重启服务
设置单播
ka1
ka2
重启服务,看出变成单播了
3.6 Keepalived 通知脚本配置
当keepalived的状态变化时,可以自动触发脚本的执行,比如:发邮件通知用户
默认以用户keepalived_script身份执行脚本
如果此用户不存在,以root执行脚本可以用下面指令指定脚本执行用户的身份
通知脚本类型
当前节点成为主节点时触发的脚本
notify_master <STRING>|<QUOTED-STRING>
当前节点转为备节点时触发的脚本
notify_backup <STRING>|<QUOTED-STRING>
当前节点转为“失败”状态时触发的脚本
notify_fault <STRING>|<QUOTED-STRING>
脚本的调用方法
在 vrrp_instance VI_1 语句块的末尾加下面行
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
创建通知脚本
[root@KA1 ~]# vim /etc/keepalived/mail.sh#!/bin/bashmail_dest='594233887@qq.com'mail_send(){mail_subj="$HOSTNAME to be $1 vip 转移"mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"echo "$mail_mess" | mail -s "$mail_subj" $mail_dest}case $1 inmaster)mail_send master;;backup)mail_send backup;;fault)mail_send fault;;*)exit 1;;esac
邮件配置
dnf install mailx -y
vim /etc/mail.rc
输入
set smtp=smtp.163.com
set smtp-auth=login
set smtp-auth-user= @163.com #自己的邮箱
set smtp-auth-password=TAb9vYbWevbPt #详见下面
set from= @163.com #自己邮箱
set ssl-verify=ignore
、不懂还有qq的自己搜一下,很简单
发送测试邮件
[root@KA1 ~]# dnf install s-nail sendmail -y[root@KA1 ~]# systemctl enable --now sendmail.service[root@KA1 ~]# echo test message |mail -s test xxxxxxxxx@qq.com
接着我们 实现keepalived状态切换的通知邮箱脚本
上面有的通知脚本
添加可执行权限
vim /etc/keepalived/keepalived.conf
#自己修改global_defs {notification_email {timinglee_zln@163.com}notification_email_from timinglee@timinglee.org
smtp_server 127.0.0.1smtp_connect_timeout 30router_id KA1.timinglee.orgvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 1vrrp_gna_interval 1enable_script_security
script_user root
#开启keepalived执行脚本功能
#指定脚本执行用户身份
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 20priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:0}unicast_src_ip 172.25.254.20unicast_peer {172.25.254.30}notify_master "/etc/keepalived/mail.sh master"notify_backup "/etc/keepalived/mail.sh backup"notify_fault "/etc/keepalived/mail.sh fault"}
#模拟master故障
[root@ka1-centos8 ~]#killall keepalived
设完成之后马上邮箱收到说明成功了,每当服务器主备转换,还有开启停机时,都会收到邮件,做完请还原,不然你的邮箱会一直响
3.7 RS的初步配置
配置vip
- 通过
arp_ignore=1
禁止Real Server响应非本地网卡的ARP请求。 - 通过
arp_announce=2
确保Real Server对外广播VIP时,使用正确的网卡IP作为源。
配置KA1/2
安装ipvsadm(两台KA都要)
virtual_server 172.25.254.100 80 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 172.25.254.10 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 2retry 3delay_before_retry 3}}real_server 172.25.254.20 80 {weight 1TCP_CHECK {connect_timeout 2retry 3delay_before_retry 3connect_port 80}}
}
这样就有策略了
3.8双主架构
master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。
master/master 的双主架构:
即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高 服务器资源利用率
#ha1主机配置
[root@rhel7-ka1 ~]# vim /etc/keepalived/keepalived.conf@@@@ 内容省略 @@@@vrrp_instance VI_1 {state MASTER #主interface ens33virtual_router_id 50priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.50 dev ens33 label ens33:0}}vrrp_instance VI_60 {state BACKUP #备interface ens33virtual_router_id 60priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.60 dev ens33 label ens33:1}}#ka2主机配置,和ka1配置只需五行不同
[root@rhel7-ka2 ~]# vim /etc/keepalived/keepalived.conf@@@@ 内容省略 @@@@vrrp_instance VI_1 {state BACKUP #备interface ens33virtual_router_id 50priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.50 dev ens33 label ens33:0}}vrrp_instance VI_60 {state MASTER #主interface ens33
virtual_router_id 60priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.60 dev eth0 label eth0:1}}
我们做的是双主组播,所以
关掉单播
复制多一份上面的模板,改变这些:
让KA1做DBVIP的BACKUP
KA2是DBVIP的master:
在KA2上看,就能发现另一个组播,这就是双主
如果我们把KA2的keepalived关掉
那么就会变成KA1为MASTER
数据库mariadb的双主实验
两台RS配置新的ip与启动mariadb服务
两台RS都要做,配置命令相同
然后开启两台RS的mariadb服务,最好systemctl status查看一下mariadb的服务是否开启
两台RS都做,配置命令相同
systemctl start mariadb.server
systemctl status mariadb.server
systemctl enable --now mariadb
两台KA配置数据库双主
两台KA都要做,配置命令相同
写完检测一下
keepalived -t -f /etc/keepalived/keepalived.conf
再查下策略
ipvsadm -Ln
可以发现已有3306端口的策略
再在client测试机
mysql -ulee -plee -h 172.25.254.200 -e 'select @@server_id'
关掉RS2的mariadb服务再测试
过一会,再测试就会发现只剩RS1的10
重新开开
就又能轮询了
在KA2查看一下,就能看到200ip的主是KA2
所以我们:
关闭KA2的keepalived服务再测试
这是我们发现服务能够继续,因为服务已经从主迁移到备了,不影响
测试完记得重新起开
3.7实现其它应用的高可用性 VRRP Script
keepalived利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先 动态调整,从而实现其它应用的高可用性功能
参考配置文件:/usr/share/doc/keepalived/keepalived.conf.vrrp.localcheck
VRRP Script
概念
VRRP Script 是 Keepalived 中一个极其重要的功能模块,它允许你通过自定义脚本来动态监控系统状态(如服务进程、资源利用率、网络连通性等),并将监控结果反馈给 VRRP 协议栈,从而影响 Master 节点的选举优先级或触发状态切换。它是实现基于应用健康状态的高可用性(HA) 的核心机制。
1)核心作用与原理
扩展监控能力:
默认的 VRRP 只能监控 Keepalived 守护进程本身和网络接口的存活状态。
VRRP Script 让你能够监控任何你关心的东西:例如 Nginx/MySQL 进程是否在运行、Web 页面是否可访问、磁盘空间是否不足、CPU 负载是否过高、到某个关键服务的网络是否通畅等。
动态调整优先级:
你定义一个脚本 (vrrp_script 块) 和一个监控间隔 (interval)。
Keepalived 会周期性地(每隔 interval 秒)执行这个脚本。
脚本的退出状态码 (Exit Code) 决定了监控结果:
0 (成功 / OK): 表示被监控项健康。脚本可以什么都不做直接 exit 0。
1 (警告 / WARN): 通常 也被视为健康(取决于配置),但可能用于记录日志或轻微通知。(实践中较少严格区分 1 和 0 的效果,主要关注非 0 是否触发故障)
>1 (错误 / FAIL): 表示被监控项不健康。
根据脚本的退出码(特别是非 0),Keepalived 可以动态调整该节点在 VRRP 实例 (vrrp_instance) 中的 priority 值。
触发状态切换:
1.当一个节点的优先级因为 vrrp_script 检测到故障而降低时:
如果它原来是 Master,并且降低后的优先级低于某个 Backup 节点的优先级(通常是初始优先级),那么 Backup 节点会感知到 Master 优先级变低。
Backup 节点(现在拥有更高优先级)会发起选举,将自己提升为新的 Master,并接管 Virtual IP (VIP)。
2.当故障恢复,脚本返回 0 时:
节点的优先级会恢复到初始值。
如果这个节点现在的优先级高于当前 Master 的优先级(通常是因为原 Master 可能也降权了或 者这个节点初始优先级就很高),它可能会重新夺回 Master 身份(取决于 nopreempt 配置)。
配置选项解释
vrrp_script <SCRIPT_NAME> { #定义一个检测脚本,在global_defs 之外配置script <STRING>|<QUOTED-STRING> #shell命令或脚本路径interval <INTEGER> #间隔时间,单位为秒,默认1秒timeout <INTEGER> #超时时间weight <INTEGER:-254..254> #默认为0,如果设置此值为负数,#当上面脚本返回值为非0时#会将此值与本节点权重相加可以降低本节点权重,
#即表示fall. #如果是正数,当脚本返回值为0,#会将此值与本节点权重相加可以提高本节点权重#即表示 rise.通常使用负值fall <INTEGER> #执行脚本连续几次都失败,则转换为失败,建议设为2以上rise <INTEGER> #执行脚本连续几次都成功,把服务器从失败标记为成功user USERNAME [GROUPNAME] #执行监测脚本的用户或组init_fail #设置默认标记为失败状态,监测成功之后再转换为成功状态
}
调用 VRRP script
vrrp_instance test {... ...track_script {check_down}}
通过脚本实现主从角色切换
[root@rhel7-ka1 ~]# vim /mnt/check_lee.sh#!/bin/bash[ ! -f "/mnt/lee" ][root@rhel7-ka1 ~]# chmod +x /mnt/check_lee.sh[root@rhel7-ka1 ~]# vim /etc/keepalived/keepalived.conf@@@@ 省略内容 @@@@vrrp_script check_lee {script "/mnt/check_lee.sh"
interval 1weight -30fall 2rise 2timeout 2}vrrp_instance web {state MASTERinterface ens33virtual_router_id 50priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100 dev ens33 label ens33:0}track_script {check_lee}}[root@rhel7-ka1 ~]# touch /mnt/lee[root@rhel7-ka1 ~]# tail -f /var/log/messages
利用脚本实现主从角色切换
#在两个ka1和ka2先实现haproxy的配置
[root@rhel7-ka1 & ka2 ~]# vim /etc/haproxy/haproxy.cfglisten webserverbind 172.25.254.100:80server web1 172.25.254.101:80 checkserver web2 172.25.254.102:80 check#在两个ka1和ka2两个节点启用内核参数
[root@rhel7-ka1 & ka2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1[root@rhel7-ka1 & ka2 ~]# sysctl -p#在ka1中编写检测脚本[root@rhel7-ka1 ~]# vim /etc/keepalived/scripts/haproxy.sh#!/bin/bash/usr/bin/killall -0 haproxy[root@rhel7-ka1 ~]# chmod +X /etc/keepalived/scripts/haproxy.sh#在ka1中配置keepalived[root@ka1-centos8 ~]#cat /etc/keepalived/keepalived.confvrrp_script check_haproxy {script "/etc/keepalived/scripts/haproxy.sh" interval 1weight -30fall 2rise 2timeout 2}vrrp_instance web {state MASTERinterface ens33virtual_router_id 50priority 100advert_int 1}authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100 dev ens33 label ens33:0}track_script {check_haproxy}#测试
root@rhel7-ka1 ~]# systemctl stop haproxy.service
注释之前两台ka配置的virtual-server配置
只要是virtual-server开头的都注释掉,两台KA都配置
注释后ipvsadm看一下
接着安装haproxy和编辑其配置文件
dnf install haproxy -y
#进入配置文件修改编辑
vim /etc/haproxy/haproxy.cfg
注释到后面
创建新的Listen
重启haproxy服务并配置开机自启
两台都要进行操作
配置非MASTER也有ip
两台KA都配置
检查haproxy服务是否存活的脚步
记得给权限
进入keepalived配置文件配置脚本
在KA1上配置
重启服务
关闭KA1的haproxy服务后
脚本就会检测到haproxy停止,这时脚本的返回值应该是变成1
测试完记得把KA1的haproxy开回来