keepalived入门及其基础运用实验

发布于:2025-07-28 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、概念

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/keepalived
 KEEPALIVED_OPTIONS="-D -S 6"                            
[root@ka1 ~]#vim /etc/rsyslog.conf
 local6.*                                               #日志级别为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 for
 10.0.0.10
 Apr 14 09:25:51 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for
 10.0.0.10
 Apr 14 09:25:51 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for
 10.0.0.10
 Apr 14 09:25:51 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for
 10.0.0.10
 Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for
 10.0.0.10
 Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: (VI_1) Sending/queueing gratuitous 
ARPs on eth0 for 10.0.0.10
 Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for
 10.0.0.10
 Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for
 10.0.0.10
 Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for
 10.0.0.10
 Apr 14 09:25:56 ka1 Keepalived_vrrp[1263]: Sending gratuitous ARP on eth0 for
 10.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 keepalived
 global_defs {
 notification_email {
 594233887@qq.com
 }
 notification_email_from keepalived@KA1.timinglee.org
 smtp_server 127.0.0.1
 smtp_connect_timeout 30
 router_id KA1.timinglee.org
 vrrp_skip_check_adv_addr
 vrrp_strict
 vrrp_garp_interval 0
 vrrp_gna_interval 0
 vrrp_ipsets keepalived
 vrrp_iptables
 }后加入
 include /etc/keepalived/conf.d/*.conf 

将/etc/keepalived/conf.d中的

 vrrp_instance VI_1 {
 state MASTER
 interface eth0
 virtual_router_id 20
 priority 100
 advert_int 1
 authentication {
 auth_type PASS
 auth_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 BACKUP
 interface eth0
 virtual_router_id 20
 priority 100        
preempt_delay 10    
#优先级高
#抢占延迟10s
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 172.25.254.100/24 dev eth0 label eth0:0
 }
 }
 #KA2主机配置
vrrp_instance VI_1 {
 state BACKUP
 interface eth0
 virtual_router_id 20
 priority 80             
#优先级低
advert_int 1
 preempt_delay 10        
authentication {
 auth_type PASS
 auth_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/bash
 mail_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 in
     master)
     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.1
 smtp_connect_timeout 30
 router_id KA1.timinglee.org
 vrrp_skip_check_adv_addr
 #vrrp_strict
 vrrp_garp_interval 1
 vrrp_gna_interval 1
 enable_script_security           
script_user root                 
#开启keepalived执行脚本功能
#指定脚本执行用户身份
}
 vrrp_instance VI_1 {
 state MASTER
 interface eth0
 virtual_router_id 20
 priority 100
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 172.25.254.100/24 dev eth0 label eth0:0
 }
 unicast_src_ip 172.25.254.20
 unicast_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 6
    lb_algo rr
    lb_kind DR
    protocol TCP
 
    real_server 172.25.254.10 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 2
            retry 3
            delay_before_retry 3
        }
    }
 
    real_server 172.25.254.20 80 {
        weight 1
        TCP_CHECK {
 
            connect_timeout 2
            retry 3
            delay_before_retry 3
            connect_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 ens33
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.50 dev ens33 label ens33:0
    }
 }
 vrrp_instance VI_60 {
    state BACKUP        #备
    interface ens33
    virtual_router_id 60
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_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 ens33
    virtual_router_id 50
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.50 dev ens33 label ens33:0
    }
 }
 vrrp_instance VI_60 {
    state MASTER        #主
    interface ens33
virtual_router_id 60
 priority 100
 advert_int 1
 authentication {
 auth_type PASS
 auth_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 1
 weight -30
 fall 2
 rise 2
 timeout 2
 }
 vrrp_instance web {
 state MASTER
 interface ens33
 virtual_router_id 50
 priority 100
 advert_int 1
 authentication {
 auth_type PASS
 auth_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.cfg
 listen webserver
     bind 172.25.254.100:80
     server web1 172.25.254.101:80 check
     server 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.conf
 vrrp_script check_haproxy {
 script "/etc/keepalived/scripts/haproxy.sh"    
     interval 1
     weight -30
     fall 2
     rise 2
     timeout 2
 }
 vrrp_instance web {
 state MASTER
     interface ens33
     virtual_router_id 50
     priority 100
     advert_int 1
 }
 authentication {
     auth_type PASS
     auth_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开回来


网站公告

今日签到

点亮在社区的每一天
去签到