qqluciferzy 2024-05-25 23:27 采纳率: 42.9%
浏览 10
已结题

keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式

keepalive配置业务服务双机单活的方法。
一套系统正常运行16个服务。
监控服务脚本和通知脚本都写好了。
现在由于业务问题 ,必须是双机单活,即A机16个开启,B机16服务就需要关闭。
当业务运行在B机上,则变为B机16个开启,A机16服务就需要关闭
A,B机的检测失败都设置了相同的权重扣减值。
weight -20

img


A机默认正常运行脚本权重是100
B机默认脚本不运行权重是默认99-20=79.
这样的情况,即使A机检测到了故障触发权重值-20=80也触发不了权重引起切换。

尝试故意将A机的权重改大例如weight -30
A机故障,权重100-30=70
B机默认权重79
70<79.触发故障切换。B机权重变为79+20=99.
但是同样的问题,假如B机后续故障了,权重-20=79还是无法触发自动切换。

有没有配置办法可以将权重改成自动切换的。还是每次都需要人工取干预。

  • 写回答

23条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-25 23:27
    关注
    获得0.60元问题酬金

    引自免费微信小程序:皆我百晓生

    为了实现A、B两台机器之间的业务服务双机单活,你需要对VRRP(虚拟路由冗余协议)进行一些定制配置,并且结合你的监控脚本和通知脚本。这里是一个详细的步骤来配置VRRP并使其适应你的需求。

    首先,我们需要创建两个VRRP实例:VI_1和VI_2。VI_1用于主服务,VI_2用于备份服务。我们将根据主服务的状态动态调整权重。

    以下是VRRP配置示例,使用CentOS/RHEL系统的Keepalived作为参考:

    vim /etc/keepalived/keepalived.conf
    

    添加以下配置到文件中:

    global_defs {
        notification_email "admin@example.com"
        notification_email_from "noreply@example.com"
        smtp_server "smtp.example.com"
        smtp_connect_timeout 30
    }
    
    vrrp_script chk_service {
        script "/home/test02.sh"
        interval 2
        weight -20
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eno16780032
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1234
        }
        track_script {
            chk_service
        }
    }
    
    vrrp_instance VI_2 {
        state BACKUP
        interface eno16780032
        virtual_router_id 52
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1234
        }
        track_script {
            chk_service
        }
    }
    

    这里我们有两个VRRP实例,VI_1和VI_2。VI_1设置为MASTER,VI_2设置为BACKUP。每个实例都有一个对应的track_script,它会定期执行/home/test02.sh脚本来检查服务状态。

    然后,你需要修改你的监控脚本/home/test02.sh,使其返回不同的退出状态码来反映服务是否健康。例如,如果服务健康,脚本返回0;如果不健康,返回非零值。这将影响VRRP实例的优先级。

    #!/bin/bash
    # 检查服务状态的逻辑...
    if service_is_up; then
      exit 0
    else
      exit 1
    fi
    

    现在,当A机上的服务运行时,chk_service脚本返回0,因此VI_1的优先级为100,而VI_2的优先级为79。如果A机的服务发生故障,脚本将返回1,导致VI_1的优先级降低至80,此时如果VI_2的优先级仍为79,那么VRRP将会自动切换到B机。

    同样地,当B机的服务运行时,chk_service脚本也会返回0,使得VI_2的优先级升至99,VI_1降为79,从而保持双机单活模式。

    注意:这个配置依赖于 Keepalived 的 track_script 功能,当脚本返回非零值时,会减去指定的权重值。在这种情况下,如果A机的权重变为80,而B机的权重仍然是79,理论上VRRP应该会选择B机作为新的master。然而,实际效果可能因 Keepalived 版本和具体实现的不同而略有差异。如果仍然存在问题,可能需要进一步调试或升级 Keepalived 版本。

    最后,确保重启 Keepalived 服务以应用新配置:

    systemctl restart keepalived
    

    如果你有任何疑问或遇到问题,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 创建了问题 5月25日

悬赏问题

  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误
  • ¥20 cesm的气溶胶排放文件
  • ¥15 逐月累计,月份不连续,补齐月份
  • ¥15 应用简单的Python代码完成一个学生成绩管理系统
  • ¥15 用matlab求微分方程初值问题
  • ¥15 vscode下编写第三方库opencv与pcl代码时没有代码提示
  • ¥15 能够跑通不报错,如何解决?(标签-matlab)
  • ¥15 MOS在RDS较大,频率高时开关波形异常
  • ¥15 SCENIC分析报错求解答