我们如何使用 Chef 连接基于集群的软件?

Posted

技术标签:

【中文标题】我们如何使用 Chef 连接基于集群的软件?【英文标题】:how can we wire up cluster based softwares using chef? 【发布时间】:2015-09-23 08:16:56 【问题描述】:

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

我们有以下场景:

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

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

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

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

有可能吗?上述问题有什么替代方案吗?

谢谢

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

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

我强烈建议检查一下。

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

【讨论】:

【参考方案3】:

这是Chef-server 和search 的场景。

您必须更改安装 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

【讨论】:

答案似乎非常相关,并解决了我们的用例。

以上是关于我们如何使用 Chef 连接基于集群的软件?的主要内容,如果未能解决你的问题,请参考以下文章

开始使用chef,并在部署时运行composer install

以Chef和Ansible为例快速入门服务器配置

您如何中止/结束 Chef 运行?

如何使基于扭曲的 irc 客户端通过 socks 代理连接?

基于nginx搭建SocketIO集群

如何让Kafka集群免受黑客攻击