目录

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

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
落尘29810 分钟前
Bean 的作用域和生命周期
后端
是店小二呀11 分钟前
处理Linux下磁盘空间不足问题的实用指南
后端
落尘29812 分钟前
如何通过 JWT 来解决登录认证问题
后端
是店小二呀12 分钟前
处理Linux下内存泄漏问题的诊断与解决方法
后端
倚栏听风雨19 分钟前
IDEA 插件开发 对文件夹下的类进行 语法检查
后端
郝同学的测开笔记23 分钟前
云原生探索系列(十七):Go 语言sync.Cond
后端·云原生·go
uhakadotcom25 分钟前
持续写作的“农耕思维”:如何像农民一样播种,收获稳定成长与收入
后端·面试·github
Java中文社群41 分钟前
国内首个「混合推理模型」Qwen3深夜开源,盘点它的N种对接方式!
java·人工智能·后端
JohnYan43 分钟前
工作笔记 - ASN.1密钥结构和编码研究
javascript·后端·安全
学习OK呀1 小时前
日常docker的实操命令场景
后端