是否可以动态构建具有单个运行列表的弹性集群?



我正在使用Elasticsearch烹饪书。

我的终极目标:

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

在我开始这条路之前,我想知道这是否可能,或者是否存在特定于节点的配置,使得不可能通过单个运行列表完成这一点。

如果节点预先配置了我想要的主机名和ip,我可以使用节点属性将这些信息插入配置中。我可以有一个食谱随机选择4个或更多节点中的3个成为主分片吗?

这绝对是可能的。也许有更好的实践(如果有的话,请分享),但是我能够使用Chef搜索和标签创建一个像这样的动态集群(尽管我正在为consul写一本食谱,而不是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

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

最新更新