qqluciferzy 2024-05-24 13:52 采纳率: 42.9%
浏览 13
已结题

keepalive高可用故障运维配置询问

需要编写一个基于keepalived的管理脚本和检测脚本对于高可用监控应用。

有一个业务系统
有以下7个业务服务:TH_01~TH_07;1个辅助服务,memcached

每个服务均有守护服务。运行起来服务总数一共是16个。
其中运行服务为14个
辅助服务为2个

另编写了启动 thnaStart.sh可以一键启动上述服务;停止脚本thnaStop.sh一键关闭上述服务

现在这套软件需要分别部署再2台服务上(A,B)。通过keepalived实现监控服务故障并切换
A服务器:192.168.57.xx
B服务器:192.168.57.xx
虚拟ip设计:192.168.57.xx
服务均部署keepalived

默认业务服务只运行再A服务器,其中运行服务为14个,当检测应用服务数量少于14个或者服务服务少于2个的情况下,等待5秒,检测结果相同,调用停止脚本停止A服务器业务服务,同事自动启动B机业务服务器启动脚本开启相同服务。
并把虚拟服务从A服务器转移至B服务器。

当B服务器运行,当检测应用服务数量少于14个或者服务服务少于2个的情况下,等待5秒,检测结果相同,调用停止脚本停止B服务器业务服务,启动A机业务服务器启动脚本开启相同服务。并把虚拟服务从B服务器转移至A服务器。

  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-24 13:52
    关注
    获得0.90元问题酬金

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

    首先,为了实现这个需求,你需要在两台服务器A和B上安装Keepalived,并配置相应的VIP(Virtual IP)和HA(High Availability)策略。这里是一个基本的步骤和示例代码,用于创建所需的Keepalived配置文件、启动脚本和检测脚本。

    步骤1:安装Keepalived

    在两台服务器上安装Keepalived,通常使用包管理器进行安装:

    sudo apt-get update
    sudo apt-get install keepalived
    

    步骤2:创建Keepalived配置文件

    在A服务器上创建/etc/keepalived/keepalived.conf:

    vrrp_script check_th_services {
        script "killall -0 th_service_01 && killall -0 th_service_02 ... && killall -0 memcached"
        interval 2
        fall 3
        rise 2
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass foobar
        }
        track_script {
            check_th_services
        }
        virtual_ipaddress {
            192.168.57.100/32 dev eth0 label eth0:1
        }
    }
    

    在B服务器上创建相同的配置文件,但将state MASTER改为BACKUP,并将priority设置为低于A服务器的值,例如priority 90

    步骤3:创建启动和停止脚本

    在两台服务器上创建启动和停止脚本,例如/usr/local/bin/thnaStart.sh/usr/local/bin/thnaStop.sh

    # thnaStart.sh
    #!/bin/bash
    for service in TH_01 TH_02 ... TH_07 memcached; do
        systemctl start th_service_$service
    done
    
    # thnaStop.sh
    #!/bin/bash
    for service in TH_01 TH_02 ... TH_07 memcached; do
        systemctl stop th_service_$service
    done
    

    步骤4:创建检测脚本

    创建检测服务数量的脚本,例如/usr/local/bin/check_service_count.sh

    #!/bin/bash
    services=(TH_01 TH_02 ... TH_07)
    auxiliary_services=("memcached")
    
    total_services=0
    auxiliary_total=0
    
    for service in "${services[@]}"; do
        if systemctl is-active --quiet th_service_$service; then
            ((total_services++))
        fi
    done
    
    for auxiliary_service in "${auxiliary_services[@]}"; do
        if systemctl is-active --quiet th_service_$auxiliary_service; then
            ((auxiliary_total++))
        fi
    done
    
    if [ $total_services -lt 14 ] || [ $auxiliary_total -lt 2 ]; then
        echo "Service count low, stopping services."
        /usr/local/bin/thnaStop.sh
        exit 1
    else
        echo "Services running normally."
        exit 0
    fi
    

    步骤5:配置crontab定期执行检测脚本

    在两台服务器上添加定时任务,每5秒执行一次检测脚本:

    crontab -e
    */5 * * * * /usr/local/bin/check_service_count.sh > /dev/null 2>&1
    

    步骤6:启动Keepalived

    在两台服务器上启动Keepalived并设置为开机启动:

    systemctl start keepalived
    systemctl enable keepalived
    

    这样就完成了整个高可用系统的配置。当检测到服务数量不足时,Keepalived会根据配置自动切换VIP到另一台服务器。同时,由于设置了定时任务,当服务恢复时,检测脚本会重新启动服务并可能触发VIP回切。

    注意:这个方案只是一个基础示例,实际生产环境中可能需要考虑更多因素,如网络隔离、数据同步等。此外,确保所有服务都能够在两台服务器上正常运行,并且VIP的IP地址选择不会与其他网络设备冲突。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 创建了问题 5月24日

悬赏问题

  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音