openstack kolla-ansible keepalived check

openstack api 有 nova neutron cinder keystone glance 等

这些服务都依赖 keepalived 和 haproxy,那么如何实现这些 vip 相关的检查呢?

1. 首先看下 keepalived 的检查脚本设计:

bash 复制代码
# docker/keepalived/check_alive.sh


#!/bin/bash

# This will return 0 when it successfully passes all checks for all daemons
# Failures return 1

declare -A check_results
final_result=0

if [ -d "/checks" ]; then
    CHECKS=$(find /checks -type f)
fi

if [ "${CHECKS}" ]; then
    # Store results
    for check in ${CHECKS}; do
        # Run check but do not print stderr
        # as single check can be executed manually to see the result
        ${check} 2>/dev/null
        check_results[${check}]=$?
    done

    # Print results and save the final result
    for i in "${!check_results[@]}"; do
        if [ "${check_results[$i]}" == "0" ]; then
            echo "Keepalived check script ${i} succeeded."
        else
            final_result=1
            echo "Keepalived check script ${i} failed."
        fi
    done

    exit ${final_result}
fi

这段 Bash 脚本的主要目的是执行并检查位于 /checks 目录中的所有检查脚本的运行结果,并根据其执行结果返回成功或失败。

声明一个关联数组 check_results 用于存储每个检查脚本的结果(成功或失败)。

执行每个检查脚本并存储结果:

2. 看下 /checks 目录下的脚本

bash 复制代码
# ansible/roles/loadbalancer/templates/keepalived/check_alive_proxysql.sh.j2

#!/bin/bash

# This will return 0 when it successfully talks to the ProxySQL daemon via localhost
# Failures return 1

echo "show info" | socat unix-connect:/var/lib/kolla/proxysql/admin.sock stdio > /dev/null


# /root/g/kolla-ansible/ansible/roles/loadbalancer/templates/keepalived/check_alive_proxysql.sh.j2

#!/bin/bash

# This will return 0 when it successfully talks to the ProxySQL daemon via localhost
# Failures return 1

echo "show info" | socat unix-connect:/var/lib/kolla/proxysql/admin.sock stdio > /dev/null

3. keepalived 检查脚本机制总结

目的:

check_alive.sh 用于监测一系列健康检查脚本是否成功,以确保服务的可用性(例如 ProxySQL)。

结果汇总:

每个检查的结果被记录在关联数组中,并在脚本的最后根据个别检查的结果计算最终的成功或失败状态。

可扩展性:

通过将单独的检查脚本放在 /checks 目录中,用户可以很方便地增加或修改检查,而无需改变主脚本的代码逻辑。

错误处理:

通过将标准错误输出重定向到 /dev/null,脚本保证了单个失败的检查不会影响其他检查的输出,从而方便调试和管理。

相关推荐
thulium_13 分钟前
Rust 编译错误:link.exe 未找到
开发语言·后端·rust
SimonKing15 分钟前
IntelliJ IDEA 配置与插件全部迁移到其他盘,彻底释放C盘空间
java·后端·程序员
华科易迅18 分钟前
Spring 代理
java·后端·spring
IT_陈寒19 分钟前
SpringBoot 项目启动慢?5 个提速技巧让你的应用快如闪电 ⚡️
前端·人工智能·后端
IT_陈寒22 分钟前
SpringBoot自动配置的坑,我把头发都快薅没了
前端·人工智能·后端
人道领域1 小时前
Day | 10【苍穹外卖:SpringTask 和WebSocket 案例】
java·数据库·后端
无籽西瓜a1 小时前
WebSocket详解含图解:协议特性、握手流程
网络·后端·websocket·网络协议·http
计算机学姐1 小时前
基于SpringBoot+Vue的家政服务预约系统【个性化推荐+数据可视化】
java·vue.js·spring boot·后端·mysql·信息可视化·java-ee
智能工业品检测-奇妙智能1 小时前
Ubuntu24安装mysql8
人工智能·spring boot·后端·openclaw·奇妙智能
Dream_sky分享1 小时前
Excel模板下载(Resources目录下)
java·spring boot·后端