注意:本文使用的版本是 Ambari 2.7.4
/ 场景 /
在使用Ambari的时候,它本身默认是只能管理一个集群的。这在实际使用的时候,会比较不方便,尤其是如果用来管理ElasticSearch,Redis一类的集群时,因为集群数量多,就更加捉襟见肘了。
而如果想要管理多个集群,要么就付费使用Clouder Manager企业版,这个是支持多集群管理的;或者就一个集群对应一个Ambari,分别访问;另外就只能自己进行二次开发了,其实Ambari本身是可以通过Rest API创建多个集群的,只是在Ambari-Web项目中,只能看到一个。
/ 代码分析 /
前面也说了,实际Ambari是支持多集群管理的,只是ambari-web项目只能看到一个。而ambari-web项目就是用ember.js写的前端项目,实际都是使用Rest API调用ambari-server的。
因为我不是很会前端代码,而且也没有使用过ember框架,所以看在分析代码时,还是比较费劲,让我们一起来进行分析吧。
首先,我们可以在app/app.js文件中,找到一个clusterName的属性定义,然后全局搜索这个属性,寻找看哪个地方进行了赋值。
一个一个排除中......
最后,我们可以看到在这个文件中app/controllers/global/cluster_controller.js,有这样的代码:
/** * load cluster name */ loadClusterName: function (reload, deferred) {
var dfd = deferred || $.Deferred(); if (App.get('clusterName') && !reload) {
App.set('clusterName', this.get('clusterName')); this.set('isClusterNameLoaded', true); dfd.resolve(); } else {
App.ajax.send({
name: 'cluster.load_cluster_name', sender: