【成神之路】Ambari实战-015-代码生命周期-metainfo-category详解

news2024/10/3 2:29:49

1.Redis 集群 metainfo.xml 示例

<?xml version="1.0"?>
<metainfo>
    <schemaVersion>2.0</schemaVersion>
    <services>
        <service>
            <!-- Redis 集群服务的基本信息 -->
            <name>REDIS</name>
            <displayName>Redis</displayName>
            <comment>
                Component Redis Power By JaneTTR . mail: 3832514048@qq.com ,git: https://gitee.com/tt-bigdata/ambari-env
            </comment>
            <version>7.4.0</version>

            <!-- Redis 集群组件定义 -->
            <components>
                <!-- Redis 主节点组件 -->
                <component>
                    <name>REDIS_MASTER</name>
                    <displayName>Redis Master</displayName>
                    <category>MASTER</category>
                    <cardinality>3+</cardinality> <!-- Redis 集群至少需要 3 个主节点 -->
                    <versionAdvertised>true</versionAdvertised>
                    <commandScript>
                        <script>scripts/redis_master.py</script> <!-- Python 脚本 -->
                        <scriptType>PYTHON</scriptType>
                    </commandScript>
                </component>

                <!-- Redis 从节点组件 -->
                <component>
                    <name>REDIS_SLAVE</name>
                    <displayName>Redis Slave</displayName>
                    <category>SLAVE</category>
                    <cardinality>3+</cardinality> <!-- 从节点可以是 0 或多个 -->
                    <versionAdvertised>true</versionAdvertised>
                    <commandScript>
                        <script>scripts/redis_slave.py</script> <!-- Python 脚本 -->
                        <scriptType>PYTHON</scriptType>
                    </commandScript>
                </component>

                <!-- Redis 客户端组件 -->
                <component>
                    <name>REDIS_CLIENT</name>
                    <displayName>Redis Client</displayName>
                    <category>CLIENT</category>
                    <cardinality>0+</cardinality> <!-- 客户端是可选的,可以部署多个 -->
                    <versionAdvertised>true</versionAdvertised>
                    <commandScript>
                        <script>scripts/redis_client.py</script> <!-- Python 脚本 -->
                        <scriptType>PYTHON</scriptType>
                    </commandScript>
                    <configFiles>
                        <configFile>
                            <type>xml</type>
                            <fileName>redis-site.xml</fileName>
                            <dictionaryName>redis-site</dictionaryName>
                        </configFile>
                        <configFile>
                            <type>xml</type>
                            <fileName>redis-env.sh</fileName>
                            <dictionaryName>redis-env</dictionaryName>
                        </configFile>
                    </configFiles>
                </component>
            </components>

            <!-- 操作系统相关 -->
            <osSpecifics>
                <osSpecific>
                    <osFamily>any</osFamily> <!-- 支持任何操作系统 -->
                    <packages>
                        <package>
                            <name>redis_${stack_version}</name>
                        </package>
                    </packages>
                </osSpecific>
            </osSpecifics>

            <!-- Redis 服务健康检查 -->
            <commandScript>
                <script>scripts/service_check.py</script> <!-- 健康检查 Python 脚本 -->
                <scriptType>PYTHON</scriptType>
                <timeout>300</timeout>
            </commandScript>

            <!-- Redis 服务不依赖其他服务 -->
            <!-- 如果有其他依赖项,可以在这里定义 -->

            <!-- 配置依赖 -->
            <configuration-dependencies>
                <config-type>redis-site</config-type>
                <config-type>redis-env</config-type>
            </configuration-dependencies>
        </service>
    </services>
</metainfo>

在这个文件中,我们定义了 Redis 集群的三个关键组件: Redis MasterRedis SlaveRedis Client。这些组件由 Python 脚本控制,它们的详细定义帮助 Ambari 在集群中进行服务管理。

2 category 作用 🛠️

2.1. 从定义角度理解 🎯

在 Ambari 的 metainfo.xml 文件中,category 属性用于定义服务组件的角色。根据不同组件的功能,category 的值可以是 MASTERSLAVECLIENT。我们先以 Redis 为例,看看它是如何配置的。

2.1.1 Redis 示例 🚀:
  1. MASTER:Redis 主节点。MASTER 组件负责处理所有写操作,并管理从节点的数据同步。在页面上,MASTER 组件会出现在 “Master” 选择页面中,供用户选择合适的节点部署主节点。

    代码示例:

    <component>
        <name>REDIS_MASTER</name>
        <displayName>Redis Master</displayName>
        <category>MASTER</category> <!-- 该组件定义为主节点 -->
        <versionAdvertised>true</versionAdvertised>
        <commandScript>
            <script>scripts/redis_master.py</script> <!-- 控制 Redis Master 的脚本 -->
            <scriptType>PYTHON</scriptType>
        </commandScript>
    </component>
    

    作用MASTER 组件负责管理数据的写操作,并通过同步机制将数据复制到从节点。通过设置 category="MASTER",Ambari 知道这个组件需要在页面的主节点部分展示,并让用户选择部署主节点的服务器。

  2. SLAVE:Redis 从节点。SLAVE 组件负责从主节点复制数据,以确保数据的高可用性和冗余。在页面上,SLAVE 组件会出现在从节点选择界面中,允许用户选择多个节点来部署从节点。

    代码示例:

    <component>
        <name>REDIS_SLAVE</name>
        <displayName>Redis Slave</displayName>
        <category>SLAVE</category> <!-- 该组件定义为从节点 -->
        <versionAdvertised>true</versionAdvertised>
        <commandScript>
            <script>scripts/redis_slave.py</script> <!-- 控制 Redis Slave 的脚本 -->
            <scriptType>PYTHON</scriptType>
        </commandScript>
    </component>
    

    作用SLAVE 组件从主节点同步数据,确保 Redis 集群的高可用性。Ambari 通过 category="SLAVE" 将其展示在从节点部分,用户可以在多个节点上选择部署。

  3. CLIENT:Redis 客户端。CLIENT 组件用于与集群交互,提供接口供用户发送请求并获取响应。

    代码示例:

    <component>
        <name>REDIS_CLIENT</name>
        <displayName>Redis Client</displayName>
        <category>CLIENT</category> <!-- 该组件定义为客户端 -->
        <versionAdvertised>true</versionAdvertised>
        <commandScript>
            <script>scripts/redis_client.py</script>
            <scriptType>PYTHON</scriptType>
        </commandScript>
    </component>
    

    作用CLIENT 组件提供与 Redis 集群交互的能力。Ambari 会在客户端部分展示 CLIENT 组件,用于在用户设备或应用服务器上部署。

Redis 中 category 的作用 💡:

  • 分类显示:Redis 的 MASTER 组件在页面中会显示为主节点,而 SLAVE 组件会显示在从节点部分,方便用户选择合适的节点进行部署。

  • 部署控制:通过 category 属性,Ambari 可以区分主节点、从节点和客户端,并相应地控制它们的部署。MASTER 可以部署在一个或多个节点上,SLAVE 组件则可以在多个节点上实现分布式部署。

2.1.2 HDFS 示例 🛠️:

接下来,我们看看 HDFS 服务在 Ambari 中的配置方式。

  1. MASTER:HDFS 主节点。在 HDFS 中,NAMENODE 是主节点,负责管理文件系统的元数据。它的主要职责是协调所有的 DATANODE,确保数据存储和访问的正确性。

    代码示例:

    <component>
        <name>HDFS_NAMENODE</name>
        <displayName>HDFS NameNode</displayName>
        <category>MASTER</category> <!-- 该组件定义为主节点 -->
        <commandScript>
            <script>scripts/namenode.py</script>
            <scriptType>PYTHON</scriptType>
        </commandScript>
    </component>
    

    作用NAMENODE 作为 HDFS 的核心组件,管理元数据并协调数据块的存储。通过 category="MASTER",Ambari 知道它是主节点,并在 “Master” 选择界面展示。

  2. SLAVE:HDFS 从节点。在 HDFS 中,DATANODE 是从节点,负责存储实际的数据块,并与 NAMENODE 通信。

    代码示例:

    <component>
        <name>HDFS_DATANODE</name>
        <displayName>HDFS DataNode</displayName>
        <category>SLAVE</category> <!-- 该组件定义为从节点 -->
        <commandScript>
            <script>scripts/datanode.py</script>
            <scriptType>PYTHON</scriptType>
        </commandScript>
    </component>
    

    作用DATANODE 组件负责存储 HDFS 集群中的实际数据。通过 category="SLAVE",Ambari 会将其展示在从节点部分,允许用户选择多个节点来部署 DATANODE

  3. CLIENT:HDFS 客户端。HDFS_CLIENT 允许用户与文件系统进行交互,执行诸如文件上传和下载的操作。

    代码示例:

    <component>
        <name>HDFS_CLIENT</name>
        <displayName>HDFS Client</displayName>
        <category>CLIENT</category> <!-- 该组件定义为客户端 -->
        <commandScript>
            <script>scripts/client.py</script>
            <scriptType>PYTHON</scriptType>
        </commandScript>
    </component>
    

    作用HDFS_CLIENT 提供与 HDFS 文件系统的交互接口,允许用户执行文件操作。Ambari 会在客户端部分展示 CLIENT 组件,用于选择是否安装客户端工具。

HDFS 中 category 的作用 🔧:

  • 分类显示:在 HDFS 服务的安装过程中,NAMENODE 组件会出现在主节点选择界面,而 DATANODE 组件则会出现在从节点选择界面,方便用户配置文件系统的核心和存储节点。

  • 部署控制:通过 category 属性,Ambari 能够区分 NAMENODEDATANODE,并相应地控制它们的部署。NAMENODE 通常部署在一个或两个节点上(高可用模式),而 DATANODE 则会在多个节点上分布部署。

2.2 从请求到验证的流程详解 🚀

在 Ambari 中添加服务时,系统会根据现有集群节点和服务的依赖关系生成推荐部署方案。前端将请求发送到后端,后端返回相应的推荐结果供用户选择。这个过程涉及多个步骤,下面以 Zookeeper 服务为例,详细说明每个环节。

2.2.1 添加服务 🛠️

在服务选择页面,我们已经安装了 Redis,这次选择 Zookeeper 进行安装。用户在 Ambari 的 UI 中点击“下一步”时,系统会开始为新服务生成推荐方案。

在这里插入图片描述

2.2.2 浏览器发起请求 🌐

当用户点击“下一步”时,浏览器会发起一个 HTTP 请求,将用户选择的服务和集群中所有节点的信息发送给后端。这个请求的目标是让 Ambari 后端根据集群拓扑结构生成组件的推荐部署方案。

在这里插入图片描述

例如,请求可能包含如下信息:

curl 'http://localhost:28080/api/v1/stacks/BIGTOP/versions/3.2.0/recommendations' \
  -H 'Accept: application/json, text/javascript, */*; q=0.01' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: text/plain' \
  -H 'Cookie: _ga=GA1.1.1591965935.1720631763; apt.uid=AP-YFGMCGUNNIFB-2-1726927068139-89959811.0.2.a2e3917a-4f22-4c24-8671-436b74b600a2; _ga_0C4M1PWYZ7=GS1.1.1726929800.18.0.1726929803.0.0.0; _ga_T11SF3WXX2=GS1.1.1726929800.16.0.1726929803.57.0.0; _ga_K2SPJK2C73=GS1.1.1726929800.16.0.1726929803.57.0.0; AMBARISESSIONID=node01ef02iyrwkd3sdmg9aaxv48xe1.node0' \
  -H 'Origin: http://localhost:28080' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:28080/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: same-origin' \
  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0' \
  -H 'X-Requested-By: X-Requested-By' \
  -H 'X-Requested-With: XMLHttpRequest' \
  -H 'sec-ch-ua: "Microsoft Edge";v="129", "Not=A?Brand";v="8", "Chromium";v="129"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Windows"' \
  --data-raw '{"hosts":["centos1","centos2","centos3"],"services":["ZOOKEEPER","REDIS"],"recommend":"host_groups","recommendations":{"blueprint":{"host_groups":[{"name":"host-group-1","components":[{"name":"REDIS_CLIENT"},{"name":"REDIS_MASTER"},{"name":"REDIS_SLAVE"}]},{"name":"host-group-2","components":[{"name":"REDIS_CLIENT"},{"name":"REDIS_MASTER"},{"name":"REDIS_SLAVE"}]},{"name":"host-group-3","components":[{"name":"REDIS_CLIENT"},{"name":"REDIS_MASTER"},{"name":"REDIS_SLAVE"}]}]},"blueprint_cluster_binding":{"host_groups":[{"name":"host-group-1","hosts":[{"fqdn":"centos1"}]},{"name":"host-group-2","hosts":[{"fqdn":"centos2"}]},{"name":"host-group-3","hosts":[{"fqdn":"centos3"}]}]}}}'

在这里插入图片描述

2.2.4.3 处理主机与 MASTER 组件的配对

⬇️⬇️⬇️查看全部内容⬇️⬇️⬇️


更多详细内容请关注我们的微信公众号:发送"文章"关键字获取

或加入QQ1群,了解版本动向,解答大数据问题。


⬆️⬆️⬆️查看全部内容⬆️⬆️⬆️

核心内容已经结束,后面只是为了拼凑主机信息

在这里插入图片描述

在这里插入图片描述

2.2.4.4 页面渲染结果

Redis MasterZooKeeper Server 正确分配到了 centos1centos2centos3,这是通过前述所有步骤最终生成的结果,确保了页面上只显示 MASTER 组件,并且所有分配情况与返回的推荐一致。其实我们能看到的master 内容 都是经过过滤显示在该页面中。

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2185401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MongoDB的安装与增删改查基本操作

MongoDB是一种非关系型数据库&#xff0c;是NoSQL语言&#xff0c;但是又是最接近关系型数据库的。内部存储不是表结构&#xff0c;但是可以对数据进行表结构的操作。 一、安装 在官网&#xff1a;Download MongoDB Community Server | MongoDB下载系统对应的版本进行安装即可…

html+css+js实现Collapse 折叠面板

实现效果&#xff1a; HTML部分 <div class"collapse"><ul><li><div class"header"><h4>一致性 Consistency</h4><span class"iconfont icon-jiantou"></span></div><div class"…

UFS 3.1架构简介

整个UFS协议栈可以分为三层:应用层(UFS Application Layer(UAP)),传输层(UFS Transport Layer(UTP)),链路层(UIC InterConnect Layer(UIC))。应用层发出SCSI命令(UFS没有自己的命令使用的是简化的SCSI命令),在传输层将SCSI分装为UPIU,再经过链路层将命令发送给Devices。下…

通信工程学习:什么是TCP传输控制协议

TCP&#xff1a;传输控制协议 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是因特网协议套件中最重要的协议之一&#xff0c;它为应用程序提供了可靠、面向连接的通信服务。以下是TCP协议的详细解释&#xff1a; 一、TCP传输控制协议的…

双十一有哪些值得入手的好物?这五款宝藏好物不容错过!

在这个金秋送爽、收获满满的季节里&#xff0c;我们迎来了万众瞩目的双十一购物狂欢节。这不仅仅是一场简单的消费盛宴&#xff0c;更是每一位消费者期待已久、精心筹备的年度购物盛典。随着电商平台的不断革新与优惠力度的持续加码&#xff0c;双十一已经从一个简单的促销日成…

使用百度文心智能体创建多风格表情包设计助手

文章目录 一、智能定制&#xff0c;个性飞扬二、多元风格&#xff0c;创意无限 百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&…

单目3d重建DUSt3R 笔记

目录 DUSt3R 三维重建 报错RecursionError: maximum recursion depth exceeded in comparison 报错 numpy.core.multiarray failed to import 报错Numpy is not available 解决 升级版mast3r 速度变慢 修改了参数设置脚本&#xff1a; 测试效果 操作技巧 DUSt3R 三维重…

[已解决] Install PyTorch 报错 —— OpenOccupancy 配环境

目录 关于 常见的初始化报错 环境推荐 torch, torchvision & torchaudio cudatoolkit 本地pip安装方法 关于 OpenOccupancy: 语义占用感知对于自动驾驶至关重要&#xff0c;因为自动驾驶汽车需要对3D城市结构进行细粒度感知。然而&#xff0c;现有的相关基准在城市场…

torchvision.transforms.Resize()的用法

今天我在使用torchvision.transforms.Resize()的时候发现&#xff0c;一般Resize中放的是size或者是(size,size)这样的二元数。 这两个里面&#xff0c;torchvision.transforms.Resize((size,size))&#xff0c;大家都很清楚&#xff0c;会将图像的h和w大小都变成size。 但是…

【python实操】python小程序之过七游戏以及单词单复数分类

引言 python小程序之过7游戏、单词单复数分类 文章目录 引言一、过7游戏1.1 题目1.2 代码1.2.1 while循环1.2.2 for循环1.2.3 调用函数形式 1.3 代码解释 二、单词单复数分类2.1 题目2.2 代码2.3 代码解释 三、思考3.1 过七游戏3.2 单词单复数分类 一、过7游戏 1.1 题目 7的倍…

大模型 LLaMA-Omni 低延迟高质量语音交互,开源!

最近这一两周看到不少互联网公司都已经开始秋招发放Offer。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球…

python-patterns:Python 设计模式大全

python-patterns 是一个开源的 Python 项目&#xff0c;它提供了各种经典的设计模式的 Python 实现。设计模式是一种针对常见软件设计问题的可复用解决方案&#xff0c;通过使用设计模式&#xff0c;开发者可以编写出结构更加合理、易于维护和扩展的代码。 Python 是一门动态语…

GraphEval: A Knowledge-Graph Based LLM Hallucination Evaluation Framework

文章目录 题目摘要引言问题陈述相关工作GraphEval:我们的评估方法使用LLM构建知识GraphCorrect:使用GraphEval纠正幻觉实验讨论结论 题目 GraphEval:一个基于知识图的LLM幻觉评估框架 论文地址&#xff1a;https://arxiv.org/abs/2407.10793 摘要 评估大型语言模型(LLM)响应和…

【计算机科研方法指南】- 读书笔记《学术咸鱼自救指南》+于老师科研课

前言简介 因为自己在做计算机科研的时候&#xff0c;一开始很不顺利&#xff0c;所以专门去研究了一些具体的计算机科研方法。这里的方法主要参考了两个资料&#xff0c;一个是《学术“咸鱼”自救指南》&#xff0c;一个是于静老师科研课。 《学术“咸鱼”自救指南》是作者钱…

【微服务】组件、基础工程构建(day2)

组件 服务注册和发现 微服务模块中&#xff0c;一般是以集群的方式进行部署的&#xff0c;如果我们调用的时候以硬编码的方式&#xff0c;那么当服务出现问题、服务扩缩容等就需要对代码进行修改&#xff0c;这是非常不好的。所以微服务模块中就出现了服务注册和发现组件&…

视频创作黑科技!CogVideoX秒生成艺术视频

视频创作黑科技&#xff01;CogVideoX秒生成艺术视频 CogVideoX上线啦&#xff01;&#x1f389; 它能把文字和图片变成惊艳视频&#x1f3a5;。CogVideoX-5B如同好莱坞导演&#xff0c;快速生成高质量内容⚡&#xff0c;完美捕捉创意细节✨。让你轻松成为视频创作大师&#x…

Linux命令--03----帮助类命令、开关机类命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.帮助类命令man获取帮助信息help获得shell内置命令的帮助信息 2.开关机类命令2.1 开关机命令一般Linux不会经常进行关机操作,正确的关机流程为: sync>shutdown&…

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性&#xff0c;有一道比较经典的题&#xff1a;如何使用UDP实现可靠传输&#xff0c;通过应用程序的代码&#xff0c;完成可靠传输的过程&#xff1f; 原则&#xff0c;TCO有啥就吹啥&#xff0c;引入滑动窗口&#xff0c;引入流量控制&#x…

电子连接器温升仿真教程 二

在《电子连接器温升仿真教程 一》中详细介绍了用内热法做电子连接器温升仿真的操作步骤与方法,本教程将讲解用电流电压法做电子连接器温升仿真。 本教程,将以下面产品为例演示温升仿真方法其操作步骤。 该连接器为电池连接器,其Housing材料为LCP+30%GF,端子材质为铍铜…

IDEA中配置启动类的Active Profiles

如现在有以下三个配置文件 application.yaml application-dev.yaml application-local.yaml 当我在本机启动时&#xff0c;想使用application-local.yaml&#xff0c;而不是application-dev.yaml&#xff0c;那么可以这样配置&#xff1a;&#xff08;我这是添加启动类一起的&a…