keepalived搭建与基础配置

news2024/12/23 16:59:08

目录

1 keepalived部署与环境准备

1.1 Keepalived 实验环境准备

1.2 Keepalived 相关文件

1.3 Keepalived 安装

1.4 KeepAlived 配置说明

1.5 配置语法说明

2 企业应用示例与配置

2.1 主从架构

2.1.1 启用keepalived日志功能

2.1.2 vrrp_iptables 参数

2.1.3 实现独立子配置文件

2.1.4 主从架构示例

2.2 抢占模式和非抢占模式

2.3 抢占延迟模式 preempt_delay

2.4 VIP单播配置

2.5 Keepalived 通知脚本配置


1 keepalived部署与环境准备

1.1 Keepalived 实验环境准备

  • 各节点时间必须同步:ntp, chrony
  • 关闭防火墙及SELinux
  • 各节点之间可通过主机名互相通信:非必须
  • 建议使用/etc/hosts文件实现:非必须
  • 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须

1.2 Keepalived 相关文件

  • 软件包名:keepalived
  • 主程序文件:/usr/sbin/keepalived
  • 主配置文件:/etc/keepalived/keepalived.conf
  • 配置文件示例:/usr/share/doc/keepalived/
  • Unit File:/lib/systemd/system/keepalived.service
  • Unit File的环境配置文件:/etc/sysconfig/keepalived

1.3 Keepalived 安装

[root@keep01 ~]# yum install keepalived -y

[root@keep01 ~]# systemctl start keepalived

[root@keep02 ~]# yum install keepalived -y

[root@keep02 ~]# systemctl start keepalived

1.4 KeepAlived 配置说明

配置文件组成部分

配置文件:/etc/keepalived/keepalived.conf

配置文件组成

  • GLOBAL CONFIGURATION

                Global definitions: 定义邮件配置,route_id,vrrp配置,多播地址等

  • VRRP CONFIGURATION

                VRRP instance(s): 定义每个vrrp虚拟路由器

  • LVS CONFIGURATION

                Virtual server group(s)         Virtual server(s): LVS集群的VS和RS

1.5 配置语法说明

帮助

man keepalived.conf

keepalived.conf实现IP接管部分参数说明

# Configuration File for keepalived
global_defs {   # 全局定义部分
    notification_email {   # 邮件通知设置
        acassen@firewall.loc         # 收件人1
        failover@firewall.loc       # 收件人2
        sysadmin@firewall.loc      # 收件人3
    }
    notification_email_from Alexandre.Cassen@firewall.loc  # 发件人地址
    smtp_server 192.168.200.1          # SMTP 服务器地址
    smtp_connect_timeout 30        # SMTP 连接超时时间(秒)
    router_id LVS_DEVEL            # 路由器标识符
    
    vrrp_skip_check_adv_addr       # 忽略 VRRP 广播地址检查
    vrrp_strict                 # 严格模式,禁止非 VRRP 主机接收 VRRP 报文
    vrrp_garp_interval 0         # GARP(Gratuitous ARP)广播间隔为 0(关闭此功能)
    vrrp_gna_interval 0         # GNA通告间隔为 0(关闭此功能)
}

这个配置文件中的全局定义部分包含了邮件通知的相关设置,包括收件人的邮箱地址、发件人的邮箱地址、SMTP 服务器地址以及超时时间等。这些设置可以帮助 Keepalived 在发生故障时发送通知给管理员。

配置虚拟路由器参数说明

vrrp_instance VI_1 {   # 定义一个 VRRP 实例,名称为 VI_1
    state MASTER           # MASTER或者BACKUP  必须为大写
    interface eth0        # 使用 eth0 网络接口
    virtual_router_id 51    #虚拟路由器 ID
                            #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一
                            #否则服务无法启动
                            #相同id管理同一个虚拟路由
                            #同属一个虚拟路由器的多个keepalived节点必须相同
                            #务必要确认在同一网络中此值必须唯一

    priority 100         #当前物理节点在此虚拟路由器的优先级,范围:1-254
                         #值越大优先级越高,每个keepalived主机节点此值不同

    advert_int 1         # 广告间隔(秒)
    
    authentication {     # 认证设置
        auth_type PASS   # 认证类型为密码认证
        auth_pass 1111   # 密码
    }
    
    virtual_ipaddress {   # 虚拟 IP 地址列表
        192.168.200.16    #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认32
        192.168.200.17/24 dev eth1
        192.168.200.18/24 dev eth2 label eth2:1
    }
}

这个配置告诉 Keepalived 使用 eth0 接口,并且设置了虚拟路由器 ID、优先级、广告间隔、认证方式和密码等参数。同时,它也指定了三个虚拟 IP 地址,这些 IP 地址将在主节点和备节点之间进行切换。

不抢占模式

nopreempt 设置的是高可用集群中的不抢占功能。 在一个 HA 集群中, 如果主节点死机了, 备用节点会进行接管, 主节点再次正常启动后一般会自动接管服务。 对于实时性和稳定性要求不高的业务系统来说, 这种来回切换的操作还是可以接受的。 而对于稳定性和实时性要求很高的业务系统来说, 不建议来回切换, 毕竟服务的切换存在一定的风险和不稳定性, 在这种情况下, 就需要设置 nopreempt 这个选项。 设置 nopreempt 可以实现主节点故障恢复后不再切回到主节点, 让服务一直在备用节点下工作, 直到备用节点出现故障才会进行切换。 在使用不抢占功能时, 只能在“state” 状态为 “BACKUP” 的节点上设置, 而且这个节点的优先级必须高于其他节点 

抢占延迟模式

抢占延迟模式(preempt_delay)是 Keepalived 中的一个特性,用于控制主节点在从故障中恢复后是否立即重新成为主节点。如果启用了抢占延迟模式,主节点会在从故障中恢复后等待一段时间再重新成为主节点,以确保备用节点能够正常工作。

2 企业应用示例与配置

2.1 主从架构

实现MASTER/BACKUP Keepalived 单主架构

# MASTER配置

# Configuration File for keepalived
global_defs {   # 全局定义部分
    notification_email {   # 邮件通知设置
        1282318338@qq.com  # 收件人1
    }
    notification_email_from wawa@shuyan.com  # 发件人地址
    smtp_server 127.0.0.1              # SMTP 服务器地址
    smtp_connect_timeout 30          # SMTP 连接超时时间(秒)
    router_id keep1.shuyan.com        # 路由器标识符
    vrrp_skip_check_adv_addr        # 忽略 VRRP 广播地址检查
    vrrp_strict                  # 严格模式,禁止非 VRRP 主机接收 VRRP 报文
    vrrp_garp_interval 0          # GARP 广播间隔为 0(关闭此功能)
    vrrp_gna_interval 0          # GNA 通告间隔为 0(关闭此功能)
    vrrp_mcast_group4 224.0.0.18    # VRRP 组播组地址

# vrrp_garp_interval 0 :
    # GARP(Gratuitous ARP)广播间隔,用于更新本地 ARP 表。
    # 默认情况下,VRRP 主机会周期性地发送 GARP 包来更新本地 ARP 表,
    # 以便让其他主机知道虚拟 IP 地址现在属于哪个物理机器。将其设置为 0 将禁用此功能。

# vrrp_gna_interval 0 :
    # GNA(Gratuitous Neighbor Advertisement)通告间隔,
    # 用于更新本地 NDP 表。类似地,默认情况下,
    # VRRP 主机会周期性地发送 GNA 包来更新本地 NDP 表,
    # 以便让其他主机知道虚拟 IP 地址现在属于哪个物理机器。将其设置为 0 将禁用此功能。


}
vrrp_instance VI_1 {   # 定义一个 VRRP 实例,名称为 VI_1
    state MASTER             # 当前节点状态为主节点
    interface eth0          # 使用 eth0 网络接口
    virtual_router_id 100    # 虚拟路由器 ID
    priority 100            # 优先级,数值越大优先级越高

    advert_int 1         # 指定 VRRP 报文的发送间隔,单位是秒。
                         # VRRP 报文是用来告知其他节点当前节点的状态变化的,
                         # 例如从 Master 切换到 Backup 或者从 Backup 切换到 Master。
                         # 这个值越小,其他节点收到状态变化信息的速度就越快,
                         # 但是也会增加网络负担。一般来说,这个值应该设置得足够大,
                         # 以便减少不必要的报文传输,但也不能太大以至于影响到故障恢复的时间。
    
    authentication {       # 认证设置
        auth_type PASS      # 认证类型为密码认证
        auth_pass 1111     # 密码
    }
    
    virtual_ipaddress {     # 虚拟 IP 地址列表
        192.168.239.100/24 dev eth0 label eth0:1  # 虚拟 IP 地址及网络接口
}




# BACKUP 配置

! Configuration File for keepalived

global_defs {
   notification_email {
        1282318338@qq.com
   }
   notification_email_from wawa@shuyan.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep2.shuyan.com
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_mcast_group4 224.0.0.18
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100    # 同一VIP,必须要和MASTER一样
    priority 80        # 优先级改为80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }
}

使用tcpdump来查看发送vrrp包的情况

keep01

[root@keep01 ~]# tcpdump -i eth0 -nn host 224.0.0.18

停止keepalived服务

[root@keep01 ~]# systemctl stop keepalived.service   

再次使用tcpdump查看vrrp发送的情况  --这个时候就出现了地址漂移,在keep02上查看发现VIP从keep01已经移动到了keep02机子上

keep01上重启服务由于优先度高并且是master 地址就被抢占回来了

2.1.1 启用keepalived日志功能
 

[root@keep01 ~]# vim /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -S 6"

[root@keep01 ~]# vim /etc/rsyslog.conf 
local6.*                                    /var/log/keepalived.log
[root@keep01 ~]# systemctl restart rsyslog.service 
[root@keep01 ~]# systemctl restart keepalived.service 
# 查看日志是否生成
[root@keep01 ~]# ll /var/log/ | grep keepalive
-rw-------. 1 root   root    833349 8月  12 21:49 keepalived.log

2.1.2 vrrp_iptables 参数

如果没有使用 vrrp_iptables 选项,那么在 VRRP 主机之间 ping 通虚拟 IP 地址可能会出现问题。这是因为默认情况下,VRRP 使用内核模块来更新 IP 路由表,而不是使用 iptables 规则。 在截图中,可以看到 iptables 输出中的 FORWARD 链中有两条规则,其中一条是拒绝所有流量的规则。这条规则可能会阻止 VRRP 主机之间的通信,因为它们试图通过虚拟 IP 地址进行通信。 要解决这个问题,可以使用 vrrp_iptables 选项来启用 iptables 更新 IP 路由表的功能。这样,VRRP 就可以在两个 VRRP 主机之间建立正确的 IP 路由表条目,从而使它们能够相互 ping 通虚拟 IP 地址。

[root@keep01 ~]# vim /etc/keepalived/keepalived.conf

实现效果

2.1.3 实现独立子配置文件

当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理

将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含子配置文件

格式:

include /etc/keepalived/conf.d/*.conf

[root@keep01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
        1282318338@qq.com
   }
   notification_email_from wawa@shuyan.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep1.shuyan.com
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
}

include /etc/keepalived/conf.d/*.conf   # 增加这一行,并删除实例


[root@keep01 ~]# mkdir -p /etc/keepalived/conf.d

# 在子配置文件中添加实例
[root@keep01 ~]# vim /etc/keepalived/conf.d/router.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }
}

2.1.4 主从架构示例

# MASTER
! Configuration File for keepalived

global_defs {
   notification_email {
        1282318338@qq.com
   }
   notification_email_from wawa@shuyan.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep1.shuyan.com
   vrrp_skip_check_adv_addr
   # vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }
}

# BACKUP
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep2.shuyan.com
   vrrp_skip_check_adv_addr
   # vrrp_strict
   vrrp_mcast_group4 224.0.0.18
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }
}

# 抓包观察
[root@keep01 ~]# tcpdump -i eth0 -nn host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
22:19:31.578997 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:32.580005 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:33.581029 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:34.582014 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:35.583065 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:36.584233 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:37.585250 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:38.586526 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:39.587776 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
22:19:40.588296 IP 192.168.239.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

2.2 抢占模式和非抢占模式

非抢占模式 nopreempt

  • 默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色,
  • 这样会使vip在KA主机中来回漂移,造成网络抖动。
  • 建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色
  • 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机

keep01与keep02均需要增加

############## MASTER ################################
! Configuration File for keepalived

global_defs {
   notification_email {
        1282318338@qq.com
   }
   notification_email_from wawa@shuyan.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep1.shuyan.com
   vrrp_skip_check_adv_addr
   # vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
   
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100       # 优先级高
    nopreempt        #非抢占模式
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }
}


########################### BACKUP ##############################

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep2.shuyan.com
   vrrp_skip_check_adv_addr
   # vrrp_strict
   vrrp_mcast_group4 224.0.0.18
   vrrp_garp_interval 0
   vrrp_gna_interval 0

}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80        # 优先级低
    nopreempt        # 非抢占模式
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }
}

使用tcpdump查看vrrp

[root@keep01 ~]# tcpdump -i eth0 -nn host 224.0.0.18

将keep01的keepalived服务停止,这个时候VIP就到keep02上了

启动keep01的keepalived服务发现优先级高的keep01并没有抢占VIP变成192.168.239.10

2.3 抢占延迟模式 preempt_delay

preempt_delay # #指定抢占延迟时间为#s,默认延迟300s

注意:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict

示例:

####################### MASTER ################################    
! Configuration File for keepalived

global_defs {
   notification_email {
        1282318338@qq.com
   }
   notification_email_from wawa@shuyan.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep1.shuyan.com
   vrrp_skip_check_adv_addr
   # vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100        # 高优先级
    advert_int 1
    # nopreempt
    preempt_delay 10s  # 延迟抢占
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }
}

####################### BACKUP ################################ 

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep2.shuyan.com
   vrrp_skip_check_adv_addr
   # vrrp_strict
   vrrp_mcast_group4 224.0.0.18
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80       # 低优先级
    advert_int 1
    # nopreempt
    preempt_delay 10s # 延迟抢占
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }
}

以下是动图效果

2.4 VIP单播配置

默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量

注意:启用 vrrp_strict 时,不能启用单播

#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使

用业务网络

unicast_src_ip <IPADDR> #指定发送单播的源IP

unicast_peer {

<IPADDR> #指定接收单播的对方目标主机IP

......

}

#启用 vrrp_strict 时,不能启用单播,否则服务无法启动

两台机子都需要加

####################### MASTER ################################ 

! Configuration File for keepalived

global_defs {
   notification_email {
        1282318338@qq.com
   }
   notification_email_from wawa@shuyan.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep1.shuyan.com
   vrrp_skip_check_adv_addr
   # vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   # vrrp_mcast_group4 224.0.0.18  # 组播注释掉
   # vrrp_iptables
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    # nopreempt
     preempt_delay 10s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }

    unicast_src_ip 192.168.239.10    # 自己的地址,源地址
    unicast_peer {
          192.168.239.20             # 目的地址
      }
}


####################### BACKUP ################################ 


! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id keep2.shuyan.com
   vrrp_skip_check_adv_addr
   # vrrp_strict                # 注释此参数,与单播冲突
   # vrrp_mcast_group4 224.0.0.18        # 组播注释掉
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80       # 低优先级
    advert_int 1
    # nopreempt
    # preempt_delay 10s # 延迟抢占

    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.100/24 dev eth0 label eth0:1
    }

    unicast_src_ip 192.168.239.20   # 自己的地址,源地址
    unicast_peer {
            192.168.239.10        # 发给对方的地址
      }
}

查看单播效果

[root@keep01 ~]# tcpdump -i eth0 -nn src host 192.168.239.10 and dst 192.168.239.20 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
23:54:22.124492 ARP, Reply 192.168.239.10 is-at 00:0c:29:6f:17:68, length 28
23:54:28.122100 IP 192.168.239.10 > 192.168.239.20: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
23:54:29.123921 IP 192.168.239.10 > 192.168.239.20: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
23:54:30.125550 IP 192.168.239.10 > 192.168.239.20: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
23:54:31.126694 IP 192.168.239.10 > 192.168.239.20: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

# 停止keep01 之后 keep02就能发送组播了,优先度 priority
[root@keep01 ~]# systemctl stop keepalived

[root@keep02 ~]# tcpdump -i eth0 -nn src host 192.168.239.20 and dst 192.168.239.10 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
01:01:22.033415 ARP, Reply 192.168.239.20 is-at 00:0c:29:45:d5:b6, length 28
01:01:47.708026 IP 192.168.239.20 > 192.168.239.10: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
01:01:48.710298 IP 192.168.239.20 > 192.168.239.10: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
01:01:49.711593 IP 192.168.239.20 > 192.168.239.10: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
01:01:50.713440 IP 192.168.239.20 > 192.168.239.10: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
01:01:51.714853 IP 192.168.239.20 > 192.168.239.10: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
01:01:52.715121 ARP, Request who-has 192.168.239.10 tell 192.168.239.20, length 28

2.5 Keepalived 通知脚本配置

邮件配置

安装邮件发送工具

[root@keep01 ~]# yum install mailx -y
[root@keep02 ~]# yum install mailx -y

QQ邮箱设置

[root@keep01 ~]# vim /etc/mail.rc 
set bsdcompat
set from=1282318338@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1282318338@qq.com
set smtp-auth-password=qweqweqweqwecfqwf   # 乱填的,这个得自己找自己的认证码
set smtp-auth=login
set ssl-verify=ignore


[root@keep02 ~]# vim /etc/mail.rc 
set bsdcompat
set from=1282318338@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1282318338@qq.com
set smtp-auth-password=pzmdvotmwnwagaea
set smtp-auth=login
set ssl-verify=ignore

授权码获取

# 格式:
echo 内容 | mail -s 标题  1282318338@qq.com

[root@keep01 ~]# echo hello word | mail -s shuyan  1282318338@qq.com

Keepalived 通知脚本配置

当keepalived的状态变化时,可以自动触发脚本的执行,比如:发邮件通知用户

默认以用户keepalived_script身份执行脚本

如果此用户不存在,以root执行脚本可以用下面指令指定脚本执行用户的身份

global_defs {
......
script_user <USER>
......
}

通知脚本类型

当前节点成为主节点时触发的脚本

notify_master  <STRING>|<QUOTED-STRING>

当前节点转为备节点时触发的脚本

notify_backup  <STRING>|<QUOTED-STRING>

当前节点转为“失败”状态时触发的脚本

notify_fault  <STRING>|<QUOTED-STRING>

通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

notify  <STRING>|<QUOTED-STRING>

当停止VRRP时触发的脚本

notify_stop  <STRING>|<QUOTED-STRING> 1

脚本的调用方法

在 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"

创建通知脚本--keep01和keep02都要创建

# 第一种方法 case

[root@keep02 keepalived]# vim /etc/keepalived/mail.sh 
#!/bin/bash

dest='1282318338@qq.com'
function mail_send(){
    mail_sub="$HOSTNAME to be $1 vip 转移"
    mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
    echo "$mail_mess" | mail -s "$mail_sub" $dest

}
case $1 in
    master)
    mail_send master
    ;;
    backup)
    mail_send backup
    ;;
    fault)
    mail_send fault
    ;;
    *)
    exit 1
    ;;
esac

# 第二种if elif

[root@keep01 keepalived]# vim /etc/keepalived/mail.sh 
#!/bin/bash
dest='1282318338@qq.com'

mail_send()
{
        mail_sub="`date +%F\ %T ` $HOSTNAME to be $1 have vip "
        mail_time_mess="`date +%F\ %T `:vrrp 转移,$HOSTNAME 变为 $1"
        echo "$mial_time_mess" | mail -s "$mail_sub" $dest
}

if [[ $1 == master ]];then
        mail_send master
elif [[ $1 == backup ]];then
        mail_send backup
elif [[ $1 == fault ]];then
        mail_send fault
else
        exit 1
fi


# 重启服务
[root@keep01 ~]# systemctl restart keepalived.service 
[root@keep02 ~]# systemctl restart keepalived.service 

模拟master出故障

[root@keep01 ~]# systemctl stop keepalived

重启master主机

[root@keep01 ~]# systemctl start keepalived

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python实现模型训练期间定时查询解析GPU资源详细信息,根据实际显存占用量动态启动新模型训练任务

经常要做模型开发训练的人一定对于GPU的查询不会陌生&#xff0c;实例如下&#xff1a; 详情数据如下&#xff1a; Tue Aug 13 16:42:31 2024 ----------------------------------------------------------------------------- | NVIDIA-SMI 450.80.02 Driver Versi…

oracle普通导出导入

原始的普通导出导入工具&#xff0c;是一个客户端工具。使用导出工具&#xff08;export utility简称exp&#xff09;是将数据从oracle数据库以二进制形式写入操作系统文件&#xff0c;这个文件存储在数据库之外&#xff0c;并且可以被另一个数据库使用导入工具&#xff08;imp…

大数据系列之:Flink Doris Connector,实时同步数据到Doris数据库

大数据系列之&#xff1a;Flink Doris Connector&#xff0c;实时同步数据到Doris数据库 一、版本兼容性二、使用三、Flink SQL四、DataStream五、Lookup Join六、配置通用配置项接收器配置项查找Join配置项 七、Doris 和 Flink 列类型映射八、使用Flink CDC访问Doris的示例九、…

Unity协程WaitForSeconds在编辑器和WebGL表现不同问题的解决方法参考

最近做的一个效果让下面为了让下面这种图片生成一个翻页效果&#xff08;使用ShaderGraph中的FlipBook节点&#xff09;&#xff0c;我通过携程来实现连续翻页。 先是定义一个Coroutine coroutine null&#xff1b; 然后在一定情况下执行coroutine StartCoroutine(KeepPrevie…

Spring入门讲解

这里写目录标题 Spring基础概念关键重点主要特性主要优势Spring与Java EE的对比Spring生态系统概述总结 Spring 基础概念 Spring是一个开源的轻量级Java开发框架&#xff0c;它提供了全面的基础设施支持&#xff0c;简化了企业级应用的开发和部署。Spring的核心理念是依赖注入…

基于华为atlas下的yolov5+BoT-SORT/ByteTrack煤矿箕斗状态识别大探索

写在前面&#xff1a; 本项目的代码原型基于yolov5yolov8。其中检测模型使用的yolov5&#xff0c;跟踪模型使用的yolov8。 这里说明以下&#xff0c;为什么不整体都选择yolov8呢&#xff0c;v8无疑是比v5优秀的&#xff0c;但是atlas这块经过不断尝试没有过去&#xff0c;所以…

前端进行分页Vue3+Setup写法

当后端不方便提供数据分页查询接口时&#xff0c;就需要前端来自己分割进行分页操作 在有可能的情况下还是建议用分页查询接口&#xff0c;减少网络数据传输 首先el-table绑定数组 分页组件&#xff0c;变量自己定义防止报错 <el-paginationlayout"->, total, siz…

Springboot实现doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频在线预览功能,你学“废”了吗?

最近工作中&#xff0c;客户需要生成包含动态内容的word/pdf报告&#xff0c;并且需要在线预览。 刚开始使用后台直接生成word文档&#xff0c;返回文件流给前端&#xff0c;浏览器预览会发生格式错乱问题&#xff0c;特别是文档中的图片有些还不显示。 想到最简单的办法就是…

在原生未启用kdump的BCLinux 8系列服务器上启用kdump及报错处理

本文记录了在原生未启用kdump的BCLinux 8系列操作系统的服务器上手动启用kdump服务及报错处理的过程。 一、问题描述 BCLinux 8系列操作系统&#xff0c;系统初始化安装时未启用kdump服务&#xff0c;手动启动时报以下“No memory reserved for crash kernel”或“ConditionK…

数学建模——评价决策类算法(层次分析法、Topsis)

一、层次分析法 概念原理 通过相互比较确定各准则对于目标的权重, 及各方案对于每一准则的权重&#xff0c;这些权重在人的思维过程中通常是定性的, 而在层次分析法中则要给出得到权重的定量方法. 将方案层对准则层的权重及准则层对目标层的权重进行综合, 最终确定方案层对目标…

解读RPA自动化流程机器人

RPA全称Robotic Process Automation&#xff0c;即机器人流程自动化&#xff0c;基于人工智能和自动化技术&#xff0c;能够将大量重复、规则明确的日常事务操作实现自动化处理&#xff0c;通常被形象地称为“数字员工”。本文金智维将深入探讨RPA的主要价值和应用领域&#xf…

除悟空CRM外,主流的6大CRM私有部署的厂商

支持私有化部署的CRM有&#xff1a;1.纷享销客&#xff1b; 2.悟空CRM&#xff1b; 3.销售易&#xff1b; 4.有赞CRM&#xff1b; 5.知客CRM&#xff1b; 6.八骏CRM&#xff1b; 7.白码CRM。 面对日益复杂的网络环境和严峻的数据保护法规&#xff0c;私有化部署的CRM系统成为了…

论文阅读笔记:Semi-DETR: Semi-Supervised Object Detection with Detection Transformers

论文阅读笔记&#xff1a;Semi-DETR: Semi-Supervised Object Detection with Detection Transformers 1 背景1.1 动机1.2 问题 2 创新点3 方法4 模块4.1 分阶段混合匹配4.2 跨视图查询一致性4.3 基于代价的伪标签挖掘4.4 总损失 效果5.1 和SOTA方法对比5.2 消融实验 论文&…

Flink开发过程中遇到的问题

1. 任务启动报错Trying to access closed classloader. Exception in thread "Thread-5" java.lang.IllegalStateException: Trying to access closed classloader. Please check if you store classloaders directly or indirectly in static fields. If the st…

基于PSO-BP+BP多特征分类预测对比(多输入单输出) Matlab代码

基于PSO-BPBP多特征分类预测对比(多输入单输出) Matlab代码 1、和市面上的不同&#xff0c;运行一个main一键出对比图&#xff0c;非常方便 2、可以根据需要定制其他算法优化模型对比 程序已经调试好&#xff0c;无需更改代码替换数据集即可运行&#xff01;&#xff01;&…

Python | Leetcode Python题解之第334题递增的三元子序列

题目&#xff1a; 题解&#xff1a; class Solution:def increasingTriplet(self, nums: List[int]) -> bool:n len(nums)if n < 3:return Falsefirst, second nums[0], float(inf)for i in range(1, n):num nums[i]if num > second:return Trueif num > first…

C++字体库开发之EM长度单位转换九

freetype 设置EM // if (m_face) // FT_Set_Pixel_Sizes(*m_face, 0, pixelSize); // 动态宽&#xff0c;固定高 px // error FT_Set_Char_Size(face, /* face 对象的句柄 */ // 0, /* 以 …

Unity Audio

这章练习将介绍在unity中创建 audio&#xff08;音频&#xff09;的工具&#xff0c;培养的技能将帮助创建引人入胜的音频音景。完成本次学习后&#xff0c;能够使用 Unity 中的所有主要音频组件&#xff0c;为各种不同体验创建音频效果。 音频处理工具&#xff1a; Audacity…

Mintegral出海系列:解锁全球应用商店新增长路径

在全球化竞争的浪潮中&#xff0c;面对打法各异的应用和游戏品类&#xff0c;以及全球数百个环境不同的国家和地区&#xff0c;开发者们正面临着前所未有的挑战。Mintegral「出海ing」系列专题内容&#xff0c;助力出海开发者选准赛道探索新的增长路径。 据近期数据显示&#x…

LLM微调(精讲)-以高考选择题生成模型为例(DataWhale AI夏令营)

前言 你好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者&#xff0c;上一篇文章中&#xff0c;作者介绍了基于讯飞开放平台进行大模型微调的完整流程&#xff1b;而在本文中&#xff0c;作者将对大模型微调的数据准备部分进行深入&#xff1b;…