我正在使用Elasticsearch食谱。
我的最终目标:
在我开始走这条路之前,我想知道这是否可行,或者是否存在特定于节点的配置,这使得单个运行列表无法实现此目的。
如果节点预先配置了我想要的主机名和IP,我可以使用节点属性在配置中插入此信息。我可以随机选择四个或更多节点中的3个成为主分片吗?
答案 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,它们将全部作为主节点启动。对于集群的初始构建,首先构建主服务器然后构建服务器。