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,脚本保证了单个失败的检查不会影响其他检查的输出,从而方便调试和管理。

相关推荐
考虑考虑40 分钟前
JDK9中的dropWhile
java·后端·java ee
martinzh2 小时前
Spring AI 项目介绍
后端
前端付豪2 小时前
20、用 Python + API 打造终端天气预报工具(支持城市查询、天气图标、美化输出🧊
后端·python
爱学习的小学渣3 小时前
关系型数据库
后端
武子康3 小时前
大数据-33 HBase 整体架构 HMaster HRegion
大数据·后端·hbase
前端付豪3 小时前
19、用 Python + OpenAI 构建一个命令行 AI 问答助手
后端·python
凌览3 小时前
斩获 27k Star,一款开源的网站统计工具
前端·javascript·后端
全栈凯哥3 小时前
02.SpringBoot常用Utils工具类详解
java·spring boot·后端
狂师3 小时前
啥是AI Agent!2025年值得推荐入坑AI Agent的五大工具框架!(新手科普篇)
人工智能·后端·程序员
星辰大海的精灵3 小时前
使用Docker和Kubernetes部署机器学习模型
人工智能·后端·架构