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
|