当前位置: 首页 > news >正文

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 服务),需绑定不同 VIP

2. 多 VRRP 实例(双主/多主)
场景:实现双活架构(如跨机房双主)

3. 差异化健康检查策略
场景:不同业务需要独立检测机制

4. 环境差异化配置(开发/生产)
场景:不同环境使用不同检测阈值

5. 团队协作与权限分离
场景:网络团队管理 VIP,业务团队管理健康检查

 子配置文件核心优势

当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理 将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含 子配置文件

​核心优势​

​具体说明​

​应用场景示例​

​多业务隔离与灵活管理​

支持为不同业务(如Web/DB)配置独立的VIP和健康检查策略,避免配置冲突。子配置文件可独立修改(如web_vip.confdb_vip.conf)。

单服务器承载多个业务时,实现VIP和策略的模块化管理。

​故障隔离与系统稳定性​

单个子配置文件语法错误仅影响对应业务,不会导致整个Keepalived服务崩溃。支持热加载修复(需开启enable_dynamic_reload)。

生产环境中快速修复配置错误,避免服务全局中断。

​团队协作与权限分离​

网络团队管理VIP配置(vrrp_instance),业务团队管理健康检查脚本(vrrp_script),通过子配置文件实现权限隔离。

多团队协作场景,如运维与开发分工配置。

​复杂架构支持​

支持多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开回来

http://www.lryc.cn/news/601329.html

相关文章:

  • Java面试宝典:MySQL执行原理二
  • 字节跳动Coze Studio开源了!架构解析
  • 数据处理实战(含代码)
  • Web Worker:解锁浏览器多线程,提升前端性能与体验
  • 数据结构基础内容(第十篇:排序)
  • 力扣129. 求根节点到叶节点数字之和
  • 力扣热题100----------53最大子数组和
  • 【多模态】天池AFAC赛道四-智能体赋能的金融多模态报告自动化生成part2-报告输出
  • logstash采集springboot微服务日志
  • Spring经典“送命题”:BeanFactory vs FactoryBean
  • 力扣131:分割回文串
  • JavaScript单线程实现异步
  • 探秘CommonJS:Node.js模块化核心解析
  • GPT-4o实战应用指南:从入门到精通的技术心得
  • 物联网安装调试-物联网网关
  • 【图像处理基石】Segment Anything Model (SAM) 调研
  • MGRE综合实验
  • 望言OCR视频字幕提取2025终极评测:免费版VS专业版提全方位对比(含免费下载)
  • 20250707-2-Kubernetes 网络-Ingress暴露应用(http与https)_笔记
  • Flutter中实现页面跳转功能
  • iOS安全和逆向系列教程 第21篇:iOS应用加密与混淆技术深度剖析
  • macOS配置 GO语言环境
  • mac电脑安装docker图文教程
  • 智慧施工:施工流程可视化管理系统
  • 【秋招笔试】7月26日科大讯飞秋招第二题
  • 算法竞赛阶段二-数据结构(37)数据结构动态链表list
  • DDPM:重新定义图像生成的革命性技术
  • Ubuntu Linux 如何配置虚拟内存 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录8
  • RabbiteMQ安装-ubuntu
  • Android CameraX 使用指南:简化相机开发