是否可以使用单个运行列表动态构建弹性群集?

时间:2016-08-08 22:48:02

标签: elasticsearch chef cookbook

我正在使用Elasticsearch食谱。

我的最终目标:

  • 有4个或更多以前部署的未配置的VM 运行ES
  • 我将相同的配方/运行列表应用于所有这些节点并进行安装 并为我配置ES群集

在我开始走这条路之前,我想知道这是否可行,或者是否存在特定于节点的配置,这使得单个运行列表无法实现此目的。

如果节点预先配置了我想要的主机名和IP,我可以使用节点属性在配置中插入此信息。我可以随机选择四个或更多节点中的3个成为主分片吗?

1 个答案:

答案 0 :(得分:2)

绝对有可能。可能有一个更好的做法(如果是这样请分享)但我能够使用Chef search和标签创建这样的动态集群(虽然我正在为领事编写一本食谱,而不是ES)。

在Chef中搜索标记为主ES主服务器的任何节点。如果找不到,则将当前节点收敛为主节点。如果存在主设备,则将当前节点收敛为从设备。

您的Chef搜索结果将包含ES master的所有节点信息。不是维护预先配置的IP和主机名,而是从搜索结果的节点对象中提取它(允许扩展)。

以下代码段假设您有master.rb食谱和slave.rb食谱。

es_servers = search(
 :node, 
 "tags:elasticsearch AND chef_environment:#{node.chef_environment}"
)

if es_servers.length < 1 || tagged?('elasticsearch')

    # Configure this node with as ES master
    # ..  
    include_recipe 'es::master'

    # tag this node as a server
    tag('elasticsearch') unless tagged?('elasticsearch')

else

    # There are already 1 ES servers.
    include_recipe 'es::slave'

end

警告:*如果您将配方添加到4个节点并同时执行chef-client,它们将全部作为主节点启动。对于集群的初始构建,首先构建主服务器然后构建服务器。