我知道可以为ElasticSearch集群定义多个master,其中只有一个充当master,其他人可以在必要时进入。另请参阅https://stackoverflow.com/a/15022820/2648551。
我不明白的是我如何确定哪个主人是活跃的,哪些主人可以在必要时介入。
我目前有以下设置:
node-01: master (x) data(-)
node-02: master (-) data(x)
node-03: master (-) data(x)
node-04: master (-) data(x)
node-05: master (-) data(x)
node-06: master (-) data(x)
现在我想确定一下,例如node-02另外成为一个合格的主人。我是否可以依赖ES如此智能以至于它始终将非数据节点(node-01)作为活动主节点,或者如果所有节点都存在且没有节点,那么节点-02是否可以充当活动主节点问题?或者这是我不必担心的事情?
我目前正在使用ElasticSearch 1.7 [原文如此!],但我也对基于最新版本的答案感兴趣。
答案 0 :(得分:1)
简而言之,不,您无法决定哪个符合条件的主节点将成为主节点,因为主节点已被选举(它位于ES 1.7,它仍在ES 6.2中)。
不,您不能依赖Elasticsearch如此聪明,始终将非数据节点作为活动主节点。事实上,截至目前(6.2),他们建议dedicated master nodes(即那些不执行任何数据操作的人):
为了确保您的主节点稳定且不受压力,它 在更大的集群中分离角色是一个好主意 专用的符合主节点的节点和专用数据节点。
......这很重要 对于符合主节点的节点执行的集群的稳定性 尽可能少地工作。
(请注意,他们正在讨论“更大的集群”。)
我只能假设这也适用于早期版本,文档刚刚开始。
您发布的配置存在问题。虽然您有许多节点,但丢失一个节点(主节点node-01
)将使您的群集无法正常运行。要避免这种情况,您可以选择以下选项之一:
很高兴知道ES默认值对你不够好的原因,因为通常是they are good enough。
但是,如果您需要专用的主节点,请确保您至少有3个discovery.zen.minimum_master_nodes
足以avoid the "split brain" situation:
discovery.zen.minimum_master_nodes = (master_eligible_nodes / 2) + 1
希望有所帮助!
答案 1 :(得分:1)
稍后,仅针对上下文,我们现在“可以”决定哪个节点成为主节点,尽管不是直接可能的。
Elasticsearch 现在有一个名为 voting_config_exclusions 的方法,可用于从当前主节点移开,例如
假设您的集群中有 3 个符合主节点条件的节点
$ GET _cat/nodes?v
ip node.role master name
192.168.0.10 cdfhilmrstw - node-10
192.168.0.20 cdfhilmrstw * node-20
192.168.0.30 cdfhilmrstw - node-30
192.168.0.99 il - node-99
并且 Elasticsearch 已选择 node-20 作为活动主节点,您可以运行以下调用以将活动节点从投票中移除。
POST /_cluster/voting_config_exclusions?node_names=node_name
这将随机选择另一个符合 master 资格的节点作为 master(如果您还剩下一个以上) 继续为活动节点执行此操作,直到您将正确的节点激活为 master。
注意:这不会删除节点,只会使其处于活动状态的主节点/非投票节点,并允许另一个节点成为活动的主节点。
完成后,请确保运行以下命令以删除排除项,并允许所有符合条件的节点在所选节点出现故障时成为主节点。
DELETE /_cluster/voting_config_exclusions
谢谢