TT Bigdata TT Bigdata
首页
  • 部署专题

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

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

    • 更新说明
  • Ambari-Env

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

    • 专区—Ambari
    • 专区—Bigtop
  • 报错解决

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

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

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

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 模板代码

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

    • Centos系列
    • Kylin系列
    • OpenEuler系列
    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 定制开发

    • 组件版本定制
    • 样式风格定制
  • 蓝图愿景
  • 技术支持
  • 合作共建
GitHub (opens new window)

JaneTTR

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

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

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

    • 更新说明
  • Ambari-Env

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

    • 专区—Ambari
    • 专区—Bigtop
  • 报错解决

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

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

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

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 模板代码

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

    • Centos系列
    • Kylin系列
    • OpenEuler系列
    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 定制开发

    • 组件版本定制
    • 样式风格定制
  • 蓝图愿景
  • 技术支持
  • 合作共建
GitHub (opens new window)
  • 方法论

    • 自顶向下——基于方法论下的Redis集成[一]
    • 自顶向下——基于方法论下的Redis集成[二]
    • 自顶向下——基于方法论下的Redis集成[三]
    • 自顶向下——基于方法论下的Redis集成[四]
      • 1.4 services/REDIS/package 结构说明
        • 1.4.1 scripts/ 目录结构详解
        • 🧩 params_linux.py:参数集中定义模块
        • 🧩 redis_client.py:Redis 客户端组件
        • 🧩 redis_master.py:主节点脚本
        • 🧩 redis_slave.py:从节点脚本(含集群逻辑)
        • 🧩 service_check.py:集群健康检查脚本
        • 1.4.2 templates/ 模板配置
    • 自顶向下——基于方法论下的Redis集成[五]
    • 安装过程日志逆向理解[一]
    • 安装过程日志逆向理解[二]
    • 安装过程日志逆向理解[三]
    • Redis-Cluster模式设计[一]
    • Redis-Cluster模式设计[二]
  • 代码生命周期-metainfo

  • 架构剖析

  • UI样式

  • GOD-Ambari
  • 方法论
JaneTTR
2022-12-18
目录

自顶向下——基于方法论下的Redis集成[四]

# 1.4 services/REDIS/package 结构说明

本节我们进入 Redis Ambari 集成的 service 包构建环节,核心位于 package/scripts/ 和 package/templates/ 目录下。

提示

Redis 的服务脚本通过继承 Ambari 的 Script 类来实现服务生命周期的控制,与此同时使用 params_linux.py 统一管理配置参数。

# 1.4.1 scripts/ 目录结构详解

# 🧩 params_linux.py:参数集中定义模块

作为配置桥梁,params_linux.py 从 Ambari 的 config 对象中读取 redis-env 和 redis-site 的参数:

# 从 redis-env.xml 中读取运行时参数
redis_user = config['configurations']['redis-env']['redis_user']
redis_port = config['configurations']['redis-env']['redis_port']
redis_log_dir = config['configurations']['redis-env']['redis_log_dir']
# 从 redis-site.xml 中读取集群配置
appendonly = config['configurations']['redis-site']['appendonly']
cluster_enabled = config['configurations']['redis-site']['cluster_enabled']
1
2
3
4
5
6
7
配置桥梁 这些变量将贯穿所有服务脚本,是配置模板、启动脚本的核心依赖。

# 🧩 redis_client.py:Redis 客户端组件

作为最简组件,Redis Client 脚本中只定义了安装行为,不涉及配置和启动。

def install(self, env):
    Logger.info("Installing Redis Client...")
    self.install_packages(env)
1
2
3

笔记

Ambari 会将 redis-cli 工具自动打入 client 包中,可用于集群调试或 CLI 操作。

# 🧩 redis_master.py:主节点脚本

Redis Master 管理主节点的部署与运行,其 start() 方法通过 Execute 命令执行:

Execute(format(
    "{client_bin}/redis-server /etc/redis/redis.conf --cluster-config-file /etc/redis/cluster_master.conf --pidfile {master_redis_pid_file}"),
    user=params.redis_user)
1
2
3

此外,重启、状态检测和配置渲染也在此模块中封装,支持通过 PID 文件控制服务运行:

def ensure_stopped(self, env):
    check_process_status("{master_redis_pid_file}")
1
2

注意

redis.conf 文件必须包含 cluster-enabled 配置,才能成功初始化 Redis 集群。

# 🧩 redis_slave.py:从节点脚本(含集群逻辑)

Slave 节点的逻辑相对复杂,除了配置和启动外,还封装了自动判断是否需要初始化集群或扩容集群的能力:

def initialize_or_expand_cluster(self, params):
    # 如果集群尚未初始化,则自动进行初始化
    if len(filtered_output) == 1:
        self.initialize_cluster_and_assign_slots(params)
        self.add_current_node_to_cluster(params)
1
2
3
4
5

首次部署时,会自动通过 redis-cli --cluster create 初始化主节点集群:

create_cluster_command = format(
    "{client_bin}/redis-cli --cluster create {master_nodes_str} --cluster-replicas 0 -a {redis_password} --cluster-yes")
1
2

而后续添加从节点则调用:

Execute(format(
    "{client_bin}/redis-cli --cluster add-node {params.hostname}:{slave_port} {master_host}:{params.redis_port} --cluster-slave -a {redis_password}"),
    user=params.redis_user)
1
2
3

若目标从节点已在集群中,脚本会跳过添加,避免重复注册。

# 🧩 service_check.py:集群健康检查脚本

为了确保 Redis 集群运行稳定,我们定义了独立的服务检查脚本:

Execute(format("{client_bin}/redis-cli -p {redis_port} {password_option} cluster nodes"), user="redis")
Execute(format("{client_bin}/redis-cli -p {redis_port} {password_option} cluster info"), user="redis")
1
2

通过 cluster nodes 与 cluster info 命令,可对 Redis 集群节点状态、slot 分布、主从角色进行全链路验证。

提示

支持失败重试与日志记录,便于在 Ambari 服务检测失败时快速定位问题。

# 1.4.2 templates/ 模板配置

redis.conf.j2 是 Redis 核心配置文件模板,支持动态参数替换。以下为核心字段展示:

# Redis端口及集群配置
port {{ redis_port }}
cluster-enabled {{ cluster_enabled }}
cluster-config-file {{ cluster_config_file }}

# 持久化配置
appendonly {{ appendonly }}
appendfilename "{{ appendfilename }}"
save {{ save_intervals }}

# 日志与密码配置
logfile {{ redis_log_dir }}/redis.log
requirepass {{ redis_password }}
1
2
3
4
5
6
7
8
9
10
11
12
13

所有参数均从 params_linux.py 中动态传入,确保 UI 修改可实时下发。

#Redis#Ambari#自定义服务#大数据组件集成
自顶向下——基于方法论下的Redis集成[三]
自顶向下——基于方法论下的Redis集成[五]

← 自顶向下——基于方法论下的Redis集成[三] 自顶向下——基于方法论下的Redis集成[五]→

最近更新
01
Pandoc 缺失导致 SparkR 构建失败
06-08
02
Cyrus SASL/GSASL 缺失解决
06-07
03
Hadoop_3.3.4 编译实战 1.0.0+
06-06
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式