我可以手动在Elasticsearch集群中设置活动主服务器吗?

时间:2018-05-19 11:07:26

标签: elasticsearch

我知道可以为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 [原文如此!],但我也对基于最新版本的答案感兴趣。

2 个答案:

答案 0 :(得分:1)

简而言之,不,您无法决定哪个符合条件的主节点将成为主节点,因为主节点已被选举(它位于ES 1.7,它仍在ES 6.2中)。

不,您不能依赖Elasticsearch如此聪明,始终将非数据节点作为活动主节点。事实上,截至目前(6.2),他们建议dedicated master nodes(即那些不执行任何数据操作的人):

  

为了确保您的主节点稳定且不受压力,它   在更大的集群中分离角色是一个好主意   专用的符合主节点的节点和专用数据节点。

     

......这很重要   对于符合主节点的节点执行的集群的稳定性   尽可能少地工作。

(请注意,他们正在讨论“更大的集群”。)

我只能假设这也适用于早期版本,文档刚刚开始。

您发布的配置存在问题。虽然您有许多节点,但丢失一个节点(主节点node-01)将使您的群集无法正常运行。要避免这种情况,您可以选择以下选项之一:

  • 使用默认策略并使所有节点数据节点主节点;
  • 制作一组专用的仅限主节点(至少3个)。

很高兴知道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 资格的节点作为 ma​​ster(如果您还剩下一个以上) 继续为活动节点执行此操作,直到您将正确的节点激活为 master。

注意:这不会删除节点,只会使其处于活动状态的主节点/非投票节点,并允许另一个节点成为活动的主节点。

完成后,请确保运行以下命令以删除排除项,并允许所有符合条件的节点在所选节点出现故障时成为主节点。

DELETE /_cluster/voting_config_exclusions

谢谢