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

相关推荐
晨星shine33 分钟前
GC、Dispose、Unmanaged Resource 和 Managed Resource
后端·c#
蝎子莱莱爱打怪40 分钟前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
倚栏听风雨1 小时前
【ES避坑指南】明明存的是 "CodingAddress",为什么 term 查询死活查不到?彻底搞懂 text 和 keyword
后端
程序员爱钓鱼1 小时前
Go 操作 Windows COM 自动化实战:深入解析 go-ole
后端·go·排序算法
回家路上绕了弯2 小时前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
子玖2 小时前
实现微信扫码注册登录-基于参数二维码
后端·微信·go
IT_陈寒2 小时前
JavaScript代码效率提升50%?这5个优化技巧你必须知道!
前端·人工智能·后端
IT_陈寒2 小时前
Java开发必知的5个性能优化黑科技,提升50%效率不是梦!
前端·人工智能·后端
东风t西瓜2 小时前
飞书项目与多维表格双向同步
后端
初次攀爬者2 小时前
Kafka的Rebalance基础介绍
后端·kafka