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