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

相关推荐
user_lwl14 分钟前
Oracle 数据库备份还原工具
后端
lczllx23 分钟前
从 TCP 90μs 到 SHM 28μs:我的 RPC 框架零拷贝优化历程
linux·后端
IT_陈寒27 分钟前
Python线程池把我坑惨了,这些盲区你不踩?
前端·人工智能·后端
mONESY31 分钟前
从 DeepSeek WebGPU 输入框,吃透 React+TS 四大核心开发实践
javascript·后端
程序员爱钓鱼43 分钟前
Rust HashMap 详解:键值存储、查询、更新与统计
后端·面试·rust
程序员爱钓鱼1 小时前
第一个 Go 程序:Hello World
前端·后端·go
阳光是sunny1 小时前
LangGraph 核心概念详解:从编译到可视化
前端·人工智能·后端
zhangjw341 小时前
第35篇:Spring Boot入门:自动配置+快速搭建,简化企业开发
java·spring boot·后端
geovindu1 小时前
java: Backtracking Algorithm
java·开发语言·windows·后端·算法·回溯算法
lazy H2 小时前
从入门到日常开发,一篇文章掌握 Git 核心操作
git·后端·学习·github