5

作为平台设置编排的一部分,我们使用我们的 python 包在云中的机器集群上安装各种软件包。

我们有以下场景:

  1. 在众多软件中,我们的软件之一是 Ambari(帮助管理 hadoop 平台)。
  2. 它的工作原理如下 - 向 1 ambari-server 报告的集群机器数量为“n”。
  3. 对于每台集群机器进行报告,我们必须在每台集群机器上安装 ambari-agent 并使用它应该报告的 ambari 服务器修改其属性文件并启动 ambari-agent。

我们能做什么——在单独的厨师食谱的帮助下,我们成功地在我们的集群机器中分别安装了 ambari 服务器和 ambari 代理。

我们不能做什么——我们如何修改每台机器的 ambari-agent 属性文件,使其指向我们的 ambari 服务器 IP。一般来说,作为厨师编排的一部分,将基于集群的软件连接起来的优雅方法是什么?

注意:。ambari-server 是动态创建的,因此它的 IP 是在运行时获得的。

可能吗?上述问题有其他选择吗?

谢谢

4

3 回答 3

2

如果您有厨师服务器,您可以搜索运行 ambari-server 配方的节点。然后你使用那​​台机器的IP。或者,您可以为 ambari-server 使用 DNS 名称,然后在新服务器可用时更新您的 DNS 条目以指向新服务器。

其他选项包括使用 confd 和 etcd,或使用 consul。每个都允许您使用服务器的 ip 更新您的配置后厨师。

于 2015-07-06T14:48:35.443 回答
2

这听起来像是Consul的完美用例。

用于动态配置、功能标记、协调、领导选举等的灵活键/值存储。长轮询,用于近乎即时的配置更改通知。

我们已经开始使用它来解决听起来与您的问题非常相似的问题。从历史上看,任何类型的配置都是由一个包含大量 Chef 的大型 Python 代码库处理的。我们一直在努力用 Consul 替换它的某些部分。

真正让我印象深刻的是看到通过集群发送的信息有多快就可以看到。多亏了 Consuls 健康检查,我可以在云服务的控制面板之前看到机器配置和上线。

它不仅仅是充当键/值存储。它还可以处理服务发现并执行您当前可能通过 Sensu 之类的东西跟踪的任何类型的定期健康检查。

我强烈建议检查一下。

希望这会有所帮助。祝部署顺利!

于 2015-07-08T18:24:49.310 回答
1

这是Chef-serversearch的场景。

您将不得不更改安装 ambari 代理的配方以动态获取 ambari 服务器的 IP。

首先,您运行配置您的 ambari 服务器的配方。当 Chef 在那里成功运行时,它会将有关节点的一些信息填充到 Chef-server,包括应用于该特定节点的配方和角色。您可以转到 chef-server 并检查节点属性,特别是“recipes”属性。

现在更改您的 ambari 代理配方。我不知道代理的配置文件到底长什么样,但我们只对设置主服务器 IP 的一行感兴趣。

创建配置文件的模板并将其添加到说明书中。将硬编码的主 IP 值替换为<%= @master_ip %>

更改 ambari 代理配方,使其正确设置此值:

# search for the server node. I expect server node was configured with
# ambari::server recipe. If not, change it to the appropriate value and
# don't fortget to escape colons.
ambari_server_node = search( :node, 'recipes:ambari\:\:server' )

# now create the configuration file on ambari agent node from 
# the previously created template and pass the value for the @master_ip
# variable
template '/right/path/on/target/node/config.file' do
  [...]
  variables( :master_ip => ambari_server_node['ipaddress'] )
end
于 2015-07-09T08:02:33.843 回答