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

问题描述 投票:0回答:1

我正在使用Elasticsearch食谱。

我的最终目标:

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

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

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

elasticsearch chef cookbook
1个回答
2
投票

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

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

您的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,它们将全部作为主节点启动。对于群集的初始构建,首先构建主服务器,然后构建服务器的主服务器。

© www.soinside.com 2019 - 2024. All rights reserved.