elasticsearch 是否可以使用单个运行列表动态构建弹性集群?,elasticsearch,chef-infra,cookbook,elasticsearch,Chef Infra,Cookbook" /> elasticsearch 是否可以使用单个运行列表动态构建弹性集群?,elasticsearch,chef-infra,cookbook,elasticsearch,Chef Infra,Cookbook" />

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

elasticsearch 是否可以使用单个运行列表动态构建弹性集群?,elasticsearch,chef-infra,cookbook,elasticsearch,Chef Infra,Cookbook,我用的是Elasticsearch食谱 我的最终目标是: 具有4个或更多未配置到的以前部署的VM 跑鞋 我将相同的配方/运行列表应用于所有这些节点,然后安装 并为我配置ES群集 在我开始走这条路之前,我想知道这是否是可能的,或者是否有特定于节点的配置使得单次运行列表无法实现这一点 如果节点预先配置了我想要的主机名和IP,我可以使用节点属性将此信息插入配置中。我可以从四个或更多节点中随机选择三个节点作为主碎片吗?这绝对是可能的。可能有更好的实践(如果有的话,请分享),但我能够使用和标签创建这样

我用的是Elasticsearch食谱

我的最终目标是:

  • 具有4个或更多未配置到的以前部署的VM 跑鞋
  • 我将相同的配方/运行列表应用于所有这些节点,然后安装 并为我配置ES群集
在我开始走这条路之前,我想知道这是否是可能的,或者是否有特定于节点的配置使得单次运行列表无法实现这一点


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

这绝对是可能的。可能有更好的实践(如果有的话,请分享),但我能够使用和标签创建这样一个动态集群(尽管我是为Consor编写的一本烹饪书,而不是ES)

搜索标记为主ES主节点的任何节点。如果找不到任何节点,则将当前节点聚合为主节点。如果存在主节点,则将当前节点聚合为从节点

您的厨师搜索结果将包含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
es\u服务器=搜索(
:节点,
“标记:elasticsearch和chef_环境:#{node.chef_环境}”
)
如果es_servers.length<1 | |标记?('elasticsearch')
#将此节点配置为ES主节点
# ..  
包括配方“es::master”
#将此节点标记为服务器
标记('elasticsearch'),除非标记?('elasticsearch')
其他的
#已经有1台ES服务器。
包括配方“es::slave”
结束

警告:*如果您将菜谱添加到4个节点,并同时执行chef client,则它们都将作为主节点旋转。对于集群的初始构建,首先构建主集群,然后构建从属集群。

这是完全可能的。可能有更好的实践(如果有的话,请分享),但我能够使用和标签创建这样一个动态集群(尽管我是为Consor编写的一本烹饪书,而不是ES)

搜索标记为主ES主节点的任何节点。如果找不到任何节点,则将当前节点聚合为主节点。如果存在主节点,则将当前节点聚合为从节点

您的厨师搜索结果将包含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
es\u服务器=搜索(
:节点,
“标记:elasticsearch和chef_环境:#{node.chef_环境}”
)
如果es_servers.length<1 | |标记?('elasticsearch')
#将此节点配置为ES主节点
# ..  
包括配方“es::master”
#将此节点标记为服务器
标记('elasticsearch'),除非标记?('elasticsearch')
其他的
#已经有1台ES服务器。
包括配方“es::slave”
结束

警告:*如果您将菜谱添加到4个节点,并同时执行chef client,则它们都将作为主节点旋转。对于集群的初始构建,首先构建主节点,然后构建从属节点。

作为旁注:不要将社区食谱从Elastic与厨师自身的限制混淆起来。如果你能很好地描述它,你总是可以编写软件来做你想做的事情。我知道没有特定于节点的配置会阻止你这样做。您最大的问题是弹性本身,而不是任何社区食谱——但是如果您在构建集群之前已经知道集群中节点的IP,它只是写配置文件,ES处理其余的。因此,至少我必须维护一个节点IP列表,并确保与实际节点的IP同步,对吗?附带说明:不要混淆Elastic的社区食谱和Chef本身的限制。如果你能很好地描述它,你总是可以编写软件来做你想做的事情。我知道没有特定于节点的配置会阻止你这样做。您最大的问题是弹性本身,而不是任何社区食谱——但是如果您在构建集群之前已经知道集群中节点的IP,它只是写配置文件,ES处理其余的。所以至少我必须维护一个节点IP列表,并确保与实际节点的IP同步,对吗?