• Elasticsearch是如何实现Master选举的?


    分析&回答


    • Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和Unicast(单播模块包含一个主机列表以控制哪些节点需要ping通)这两部分;
    • 对所有可以成为master的节点(node.master: true)根据nodeId字典排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。
    • 如果对某个节点的投票数达到一定的值(可以成为master节点数n/2+1)并且该节点自己也选举自己,那这个节点就是master。否则重新选举一直到满足上述条件。
    • 补充:master节点的职责主要包括集群、节点和索引的管理不负责文档级别的管理;data节点可以关闭http功能。

    反思&扩展


    Elasticsearch中的节点(比如共10个),其中的5个选了一个master,另外5个选了另一个master,怎么办?

    • 当集群master候选数量不小于3个时,可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题;
    • 当候选数量为两个时,只能修改为唯一的一个master候选,其他作为data节点,避免脑裂问题。

    Elasticsearch 如何避免裂脑问题

    (1):修改集群中每个节点的配置文件(elasticsearch.yml)参数 discovery.zen.minimum_master_nodes,这个参数决定了主节点选择过程中最少需要多少个 master 节点,默认配置是1。
    一个基本原则是这里需要设置成 N/2+1,N 是集群中节点的数量。
    (2):修改集群中每个节点的配置文件(elasticsearch.yml)参数 discovery.zen.ping.timeout,默认值是3,它确定节点在假定节点发生故障之前将等待集群中其他节点响应的时间。在网络速度较慢的情况下,稍微增加默认值绝对是个好主意。此参数不仅可以满足更高的网络延迟,而且在节点由于过载而响应较慢的情况下也很有用。
    (3):修改集群中每个节点的配置文件(elasticsearch.yml)参数 discovery.zen.ping.unicast.hosts,把集群中可能成为主节点的机器节点都配置到这个参数中。


    为了大家更加方便的刷题,我们对文章进行了分类和整理,免费为大家提供刷题服务。程序员不欺骗程序员,赶紧扫码小程序刷起来!
    请添加图片描述

    为了一站式解决面者刷题问题,部分内容可能存在摘录情况,如有侵权辛苦您留言联系我们,我们会删除文章或添加引用文案,Thanks!

  • 相关阅读:
    Windows批处理文件 @echo off作用
    Springboot集成Swagger3详细操作步骤
    12.3 实现模拟鼠标录制回放
    AN基础工具——变形工具
    备战数学建模48-数学规划模型终结篇(全)(攻坚战13)
    dToF 和iToF傻傻分不清楚? pmd flexx2 见你所不能见
    如何实现MATLAB与Simulink的数据交互
    最后一个单词的长度[简单]
    SQL奇遇记:解锁 SQL 的秘密
    JAVA-SpelExpressionParser公式运算表达式的使用
  • 原文地址:https://blog.csdn.net/jjclove/article/details/124923232