安哥网络 发表于 2017-3-21 18:28:18

ambari 二次开发之增加ElasticSearch服务

ambari 二次开发之增加ElasticSearch服务
   Ambari是支持服务扩展的,只需要,恩,整理,打包,扔我们的服务到它的资源目录,重启服务器就可以了。听起来很简单。它的服务组织结构是分Stack / Service /Component 3层的 。所以我们从Stack开始。一个自定义Stack的目录结构如图(从HDP的复制过来)。
自定义Stack# pwd/var/lib/ambari-server/resources/stacks# tree NQNQ└── 1.1    ├── configuration    │   └── cluster-env.xml    ├── metainfo.xml    ├── repos    │   └── repoinfo.xml    #软件仓库的URL    └── services    #服务目录      └── ELASTICSEARCH            ├── configuration            │   └── elasticsearch-env.xml            ├── metainfo.xml            ├── metrics.json            └── package                ├── archive.zip                ├── scripts                │   └── master.py                └── templates9 directories, 8 files有了Stack后(当然,你直接扔到HDP的服务下面也可以),我们可以添加自己的服务了。可以看到服务是在Stack的services下的,每个目录。自定义Service目录结构
      |_ services            |_ <service_name>               metainfo.xml    #服务配置文件               metrics.json    #运维指标配置,映射ganglia和ambari               |_ configuration                  {configuration files}    #配置文件               |_ package                  {files, scripts, templates}    #安装脚本,模板和一些文件metainfo.xml   服务配置文件,我尽量写全面一点,为了解释清楚各个配置项。<?xml version="1.0"?><metainfo>    <schemaVersion>2.0</schemaVersion>    <services>      <service>            <name>ELASTICSEARCH</name>            <displayName>ElasticSearch</displayName>            <comment>ElasticSearch service</comment>            <version>1.4.0</version>            <components>                <component>                  <name>ELASTICSEARCH</name>                  <displayName>ElasticSearch</displayName>                  <category>MASTER</category>                  <cardinality>1</cardinality>                  <commandScript>                        <script>scripts/master.py</script>                        <scriptType>PYTHON</scriptType>                        <timeout>600</timeout>                  </commandScript>                </component>                <component>                  <name>ELASTICSEARCH_NODE</name>                  <displayName>ElasticSearchNode</displayName>                  <category>SLAVE</category>                  <cardinality>ALL</cardinality>                     <auto-deploy> <!--自动部署,仅在cardinality满足的情况下,界面上就不问,在这台主机,是否安装这个组件了-->                        <enabled>false</enabled>                  </auto-deploy>                  <commandScript>                        <script>scripts/slave.py</script>                        <scriptType>PYTHON</scriptType>                        <timeout>600</timeout>                  </commandScript>                  <!--<configFiles>                      <configFile>                        <type>env</type>                        <fileName>elasticsearch-env.xml</fileName>                        <dictionaryName>elasticsearch-env</dictionaryName>                      </configFile>                  </configFiles>-->                </component>            </components>            <osSpecifics>                <osSpecific>                  <osFamily>any</osFamily>                  <packages>                  <package>                      <name>elasticsearch</name>                  </package>                  </packages>                </osSpecific>            </osSpecifics>            <requiredServices>                <service>GANGLIA</service> <!--依赖服务,安装的时候限制,没有不能继续安装-->            </requiredServices>            <configuration-dependencies>            <config-type>elasticsearch-env</config-type>            </configuration-dependencies>            <monitoringService>false</monitoringService> <!--如果是监控服务的话,每个组件重启,他都要重启-->      </service>    </services></metainfo>
[*]服务和组件名字一定要大写,不然后面你会全部重新来过的。不要问我为什么知道,我重试了N次。
[*]package节点的name 很重要。yum install
[*]category节点组件类型可以有MASTER,SLAVE,CLIENT几种,那p2p集群咋办?
[*]MASTER不是必须得有,只有SLAVE也可以
[*]cardinality节点是安装基数。1+ 最少一个 ,0-1 最多一个 ,ALL 全部
master.py一个最简单的安装脚本,好吧,实际上它什么也没做import sysfrom resource_management import *class Master(Script):def install(self, env):    print 'Install the ES Master';def stop(self, env):    print 'Stop the ES Master';def start(self, env):    print 'Start the ES Master';       def status(self, env):    print 'Status of the ES Master';def configure(self, env):    print 'Configure the ES Master';if __name__ == "__main__":Master().execute()
部署,重启,安装,然后就能看到我们的成果了,虽然看起来超级简单,没关系,下面我们会继续完善功能,配置,监控,告警管理。。。。http://static.oschina.net/uploads/space/2015/0323/182449_LfyZ_99041.png
参考资料https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=38571133ambari 二次开发之增加ElasticSearch服务
摘自:https://my.oschina.net/naqin/blog/389720
页: [1]
查看完整版本: ambari 二次开发之增加ElasticSearch服务