TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 支持&共建

    • 蓝图愿景
    • 技术支持
    • 合作共建
登陆
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop-官方组件
    • 专区—Bigtop-扩展组件
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 核心代码

    • 各组件代码
    • 通用代码模板
  • 国产化&其他系统

    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 支持&共建

    • 蓝图愿景
    • 技术支持
    • 合作共建
登陆
GitHub (opens new window)
  • Bigtop通用部分

  • Bigtop打包部分

  • Ambari部分

    • Step10-Stacks-包结构
    • Step11-Stacks-组件编排
    • Step12-Stacks-配置文件
    • Step13-Stacks-模板文件
    • Step14-Scripts-环境变量
    • Step15-Scripts-执行逻辑
    • Step16-Scripts-服务检查
      • 1. metainfo.xml 中的服务检查声明
        • 1.1 视觉展示:后台配置结构
      • 2. service_check.py 代码实现与联动原理
        • 2.1 脚本目录与作用
        • 2.2 典型实现示例
      • 3. 配置与实现的联动机制
    • Step17-Scripts-组件优先级
    • Step18-衔接-打通Ambari与Bigtop
  • J-Redis集成-F
  • Ambari部分
JaneTTR
2025-06-24
目录

Step16-Scripts-服务检查

# 1. metainfo.xml 中的服务检查声明

在 Ambari 的集成体系下,服务的健康检查脚本需要在 metainfo.xml 中提前声明,这样前端 UI 和后端调度才会自动关联对应的检测方法。

配置片段示例:


<commandScript>
    <script>scripts/service_check.py</script>
    <scriptType>PYTHON</scriptType>
    <timeout>300</timeout>
</commandScript>
1
2
3
4
5
6

# 1.1 视觉展示:后台配置结构

service_check 在 metainfo.xml 中的配置结构

  • 上图展示了 metainfo.xml 文件片段,明确指定了 service_check.py 作为服务检查入口,并声明脚本类型、超时时间。
  • 配置生效后,Ambari 会自动在服务“检查”环节调用指定的 Python 脚本。

# 2. service_check.py 代码实现与联动原理

# 2.1 脚本目录与作用

代码路径:

ambari-server/src/main/resources/stacks/BIGTOP/3.2.0/services/REDIS/package/scripts/service_check.py
1

该脚本在服务安装后、集群变更或人工点检时,由 Ambari 后台自动调度,用于健康状态自动校验。

# 2.2 典型实现示例

from resource_management.core.exceptions import Fail
from resource_management.core.logger import Logger
from resource_management.core.resources.system import Execute
from resource_management.libraries.functions.format import format
from resource_management.libraries.script.script import Script

class RedisServiceCheck(Script):

    def service_check(self, env):
        import params
        env.set_params(params)
        redis_port = params.redis_port
        client_bin = params.client_bin
        redis_password = params.redis_password
        retries = 5
        retry_delay = 5

        self.check_redis_cluster(redis_port, client_bin, redis_password, retries, retry_delay)

    def check_redis_cluster(self, redis_port, client_bin, redis_password, retries, retry_delay):
        Logger.info("Checking Redis cluster health...")

        if redis_password:
            password_option = format("-a {redis_password}")
        else:
            password_option = ""

        for attempt in range(retries):
            try:
                Execute(format("{client_bin}/redis-cli -p {redis_port} {password_option} cluster nodes"), user="redis")
                Logger.info("Redis cluster nodes check passed.")

                Execute(format("{client_bin}/redis-cli -p {redis_port} {password_option} cluster info"), user="redis")
                Logger.info("Redis cluster info check passed.")

                return
            except Exception as e:
                Logger.warning("Redis cluster health check failed (attempt {0}): {1}".format(attempt + 1, str(e)))
                if attempt < retries - 1:
                    Logger.info("Retrying in {0} seconds...".format(retry_delay))
                    time.sleep(retry_delay)
                else:
                    Logger.error("Failed to pass Redis cluster health check after {0} attempts.".format(retries))
                    raise Fail("Redis cluster health check failed.")

if __name__ == "__main__":
    RedisServiceCheck().execute()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

# 3. 配置与实现的联动机制

执行效果

  • service_check.py 只需实现 service_check 方法,Ambari 后台即可自动调度,无需手动调用。
#Redis#bigtop#编译日志#自动化构建#版本注入
Step15-Scripts-执行逻辑
Step17-Scripts-组件优先级

← Step15-Scripts-执行逻辑 Step17-Scripts-组件优先级→

最近更新
01
bigtop-select 打包缺 compat 报错修复 deb
07-16
02
bigtop-select 打包缺 control 文件报错修复 deb
07-16
03
首次编译-环境初始化 必装
07-16
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式