六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 1463|回复: 0

ambari 二次开发之增加ElasticSearch服务

[复制链接]
 楼主| 发表于 2017-3-21 18:28:18 | 显示全部楼层 |阅读模式
ambari 二次开发之增加ElasticSearch服务
     Ambari是支持服务扩展的,只需要,恩,整理,打包,扔我们的服务到它的资源目录,重启服务器就可以了。听起来很简单。它的服务组织结构是分Stack / Service /Component 3层的 。所以我们从Stack开始。一个自定义Stack的目录结构如图(从HDP的复制过来)。
自定义Stack[root@master stacks]# pwd/var/lib/ambari-server/resources/stacks[root@master 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 [name]
  • 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()
部署,重启,安装,然后就能看到我们的成果了,虽然看起来超级简单,没关系,下面我们会继续完善功能,配置,监控,告警管理。。。。

参考资料
ambari 二次开发之增加ElasticSearch服务
摘自:https://my.oschina.net/naqin/blog/389720
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表