首页 > 其他分享 >【ElasticSearch】入门-ES的选主流程

【ElasticSearch】入门-ES的选主流程

时间:2024-02-18 20:11:35浏览次数:34  
标签:集群 Master master 主流程 ElasticSearch ID 节点 ES

一、ES集群模式

ES使用主从模式,因为ES的典型场景中的另一个简化是集群中没有那么多节点。通常节点数量远远小于单个节点能够维护的连接数,并且网络环境并不需要经常处理节点的加入和离开。

1、选举算法

  • ES中主要使用Bully算法作为选举算法(优点是易于实现)
    • Bully算法:假定所有的节点都有一个唯一ID,使用该ID对节点进行排序。任何时候当前Leader都是参与集群的最高ID节点。
    • 算法问题:如果最大ID的节点处于不稳定状态,会导致Master因为负载过重假死,当第二大ID节点选为新主,此时原Master恢复,会被再次选为新主节点,然后再次假死。。。
    • 解决方案:ES通过推迟选举,直到当前Master失效解决此问题,只要当前主节点不挂掉,就不重新选主。

2、脑裂的解决方案(双主)

  • 为了防止多主产生脑裂,ES根据discovery.zen.minimum_master_nodes参数防止脑裂。一般配置为N/2+1,N为集群中候选主节点个数。

二、选主流程

  • 整体流程大体为
    • 获取所有节点信息
    • 选举临时Master
    • 判断本节点是否Master节点
      • 本节点当选Master,则等待确立Master
        • 等待足够多的具备Master资格的节点加入本节点(投票达法定人数),完成选举
        • 超时(默认30s)后没有满足数据的join请求,则选举失败,进行新一轮选举
        • 成功后发布新的clusterState
      • 其他节点当选,尝试加入集群,然后启动节点失效探测器
        • 不再接受其他节点的join请求
        • 向Master发送join请求,并等待回复。默认1分钟;遇到异常可以重试3词。
        • 最终当选的Master会先发布集群状态,才确认客户的join请求。
    • 节点失效
      • NodesFD:再Master节点,启动NodeFaultDetection。定期探测加入集群的节点是否活跃。
      • MasterFD:非Master节点启动MasterFauleDetection。定期探测Master节点是否活跃。
        image

三、选举临时Master流程

1、获取当前集群活跃的Master列表

  • 获取所有节点信息
  • 遍历所有节点。如果是当前节点则跳过
  • 判断ignore_non_master_pings是否为true
    • ignore_non_master_pings:用于控制集群在选举master时的行为
    • true:选主阶段将忽略不具备master资格的节点的ping请求(即 node.master:true
    • false: 默认值。代表选举过程中,所有的节点ping请求都会被考虑。直接返回节点信息
  • 判断节点是否候选主节点
    • false:结束
    • true:返回节点信息
  • 获取节点记录的Master信息,将其添加到activeMasters列表对象中
    • activeMasters:存储当前集群活跃的master列表
      image

2、获取Master候选者列表与选主

  • 便利所有节点
  • 执行ping操作构建两个列表
    • activeMasters:存储当前集群活跃的master列表
    • masterCandidats:存储候选master的列表
  • 选主
    • activeMasters是否为空(从已知的Mastter中选择一个作为选举结果,取列表中ID值最小的节点)
      • true: 从masterCandidates中选举
      • false: 空activeMasters中选择最合适的作为master
    • 从masterCandidates中选主(判断具备master节点的ID的值,取最小值节点作为master)
      • 判断候选者是否足够
      • 选择具体的节点作为Master
        image

标签:集群,Master,master,主流程,ElasticSearch,ID,节点,ES
From: https://www.cnblogs.com/cmxb/p/18019761

相关文章

  • Porsche Piwis 3 Tester III V43.300.22 + V38.250 Diagnostic Tool Support Diagnosi
    Greatnews!ThePorschePiwis3TesterIIIV43.300.22+V38.250DiagnosticToolhasjustbeenupdatedwithnewsoftwareversions.ThislatestversioncoversalloldandnewPorschecarsupto2024,makingitacomprehensivediagnostictoolforprofessiona......
  • ActivitiesCache
    ActivitiesCache是Windows10和更高版本中的一个特性,用于支持“时间轴”(Timeline)功能,这是一个系统级的功能,旨在帮助用户查看和继续之前在设备上的活动。这包括浏览网页、编辑文档、查看图片等活动。ActivitiesCache存储 在一个数据库文件中,通常位于用户的AppData目录下(例如......
  • java 获取请求request,并返回请求的url
    StringwebStr=getRequest().getScheme()+"......
  • Failed to execute ‘requestFullscreen‘ on ‘Element‘
    来源:http://www.shanhubei.com/archives/13628.html浏览器无法自启动全屏模式报错信息:Failedtoexecute‘requestFullscreen’on‘Element’:APIcanonlybeinitiatedbyausergesture.翻译:无法在element上执行requestFullscreen方法,这个API只有用户主动行为才可以触发......
  • HttpMessageCovnert请求信息统一转换
    /***请求信息统一转换处理**@authorweiye.li*/publicclassMallMappingJackson2HttpMessageConverterextendsMappingJackson2HttpMessageConverter{/***需要转换请求的路径,yml文件配置-@Bean中newMallMappingJackson2HttpMessageConverter(path)将......
  • 几个工具收集(glances,jq)
    glances工具:性能监控,类似top命令,监控cpu,内存,硬盘等性能参数等等yum-yinstallepel-releaseyum-yinstallglances直接执行glancesjq  格式化工具,变成json格式#########变成json格式[root@host101~]#echo'{"name":"阿良","sex":"男","city":&q......
  • vue报错: error:0308010C:digital envelope routines::unsupported
    问题解决参考:https://blog.csdn.net/m0_65933139/article/details/130690790问题描述:报错:Error:error:0308010C:digitalenveloperoutines::unsupported报错原因:因为node.jsV17版本中最近发布的OpenSSL3.0,而OpenSSL3.0对允许算法和密钥大小增加了严格的......
  • tensorflow serving: REST request
    1.savetrainedmodel#inmodulefileoftfxcomponenttrainerdef_apply_preprocessing(raw_features,tft_layer):transformed_features=tft_layer(raw_features)if_LABEL_KEYinraw_features:transformed_label=transformed_features.pop(_......
  • Splunk ES 接入 log 的方式
    SplunkES接入log的方式主要有两种:使用SplunkUniversalForwarder(UF)UF是一个轻量级的代理,可以安装在各种操作系统和设备上。它可以收集各种类型的日志文件,并将它们发送到SplunkES进行索引和分析。使用HTTPEventCollector(HEC)HEC是一个RESTfulAPI,可以......
  • PostgreSQL提示信息乱码
    在win11环境下部署开发环境,安装pgsql16后测试连接正常,系统终端环境下提示信息正常显示。但在vscode中与数据库连接工具中发现数据库返回的提示信息乱码,虽不影响使用但看着实在别扭所以想着处理下。在查阅相关资料后发现,配置文件postgresql.conf中的lc_messages参数值为lc_mes......