0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ElasticSearch进行master选举的流程

阿铭linux 来源:阿铭linux 2023-02-23 09:54 次阅读

背景知识

ElasticSearch(下文简称ES)集群中,每一台服务器都有自己的角色,有一部分服务器可以设定为候选Master(至少是3台),也就是说这些服务器已经具备成为Master角色的能力,但是具体谁最终成为Master是要通过选举才可以。

在ES配置文件里,有两个参数来决定该节点是否是候选Master或者Data节点,如果想让某个节点只作为Data节点,那么需要将node.master设置为false,而node.data设置为true:

    node.master: true/false
    node.data: true/false

90156326-b306-11ed-bfe3-dac502259ad0.png

上图是一个ES集群的示意图,其中NodeA是当前集群的Master,NodeB和NodeC是Master的候选节点,其中NodeA和NodeB同时也是数据节点(DataNode),此外,NodeD是一个单纯的数据节点,Node_E是一个proxy节点。每个Node会跟其他所有Node建立连接。

节点发现

ES服务启动后,首先要通过节点发现功能加入集群。ZenDiscovery是ES自己实现的一套用于节点发现和选主等功能的模块,没有依赖Zookeeper等工具。 简单来说,节点发现依赖以下配置:

discovery.seed_hosts: ["192.168.222.101", "192.168.222.102", "192.168.222.103"]
这个配置可以看作是,在本节点到每个discovery.sedd_hosts中的节点建立一条关联线,当整个集群所有的node形成一个联通图时,所有节点都可以知道集群中有哪些节点存在了。

Master选举

上面提到,集群中可能会有多个候选Master节点,此时就要进行Master选举,保证只有一个当选Master。如果有多个节点当选为Master,则集群会出现脑裂,脑裂会破坏数据的一致性,导致集群行为不可控,产生各种非预期的影响。

905e686e-b306-11ed-bfe3-dac502259ad0.png

脑裂示意图

为了避免产生脑裂,ES采用了常见的分布式系统思路,保证选举出的master被多数派(quorum)的候选Master节点认可,以此来保证只有一个Master。这个quorum通过以下配置进行配置:

discovery.zen.minimum_master_nodes: 2
这个配置对于整个集群非常重要。

谁发起Master选举

Master选举是由候选Master节点发起,当一个候选Master节点发现满足以下条件时就会发起选举:

该候选Master节点的当前状态不是Master;

该候选Master节点通过ZenDiscovery模块的ping操作询问其已知的集群其他节点,没有任何节点连接到Master;

包括本节点在内,当前已有超过minimum_master_nodes个节点没有连接到Master。

简单讲,就是当一个候选Master节点发现包括自己在内的多数候选Master节点认为集群没有Master时,就可以发起Master选举。

如何选举

ES Master选举有一套自己的算法,该算法是基于一种称为“状态机复制”的机制。状态机复制的基本原理是,在一个分布式系统中,每个节点都有一份当前的状态,并且每个节点都可以独立决定自己是否被选举为Master节点。在ES集群中,每个节点都会比较当前节点和其他节点的状态,如果当前节点的状态最新,则当前节点将被选为Master节点。

ES的选举工作流程大致如下:

① 首先,所有候选Master节点都会比较自己的状态,如果自己的状态最新,则发起投票;

② 其他节点收到投票后,也会比较自己的状态,如果自己的状态最新,则会再次发起投票;

③ 当某个节点收到来自其他节点的投票,且自己的状态最新时,则会将自己的状态发送给其他节点,并同意自己被选为Master节点;

④ 其他节点收到来自Master节点的状态后,会将自己的状态更新,同意将Master节点选为Master节点(有点绕口);

⑤ 一旦Master节点确定,其他节点就会向Master节点发送心跳包,以确保Master节点的活动状态;

⑥ 如果Master节点失去连接,则其他节点会开始新的投票,以确定新的Master节点。

按照上述流程,我们描述一个简单的场景来帮助大家理解:

假如集群中有3个候选Master节点,分别为Node_A、 Node_B、 Node_C。三个节点都认为当前没有Master,于是都各自发起选举。

假如此时Node_A的状态最新,所以选举结果都为Node_A。于是Node_A开始等选票,Node_B、Node_C都向Node_A发起投票,当Node_A接收到第一次投票(假如是Node_B发起的)时,加上它自己的一票,就获得了两票了(超过半数),于是Node_A成为Master。

有一点要说明,对于ES集群来说,当Master节点确立时,它就会等待其它节点join自己成为一个集群了,当所有其它非Master节点全部join到Master时,集群才算彻底创建完成。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9002

    浏览量

    85136
  • MASTER
    +关注

    关注

    0

    文章

    103

    浏览量

    11256

原文标题:你知道ElasticSearch是如何进行master选举的吗

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Windows安装ElasticSearch

    Windows安装ElasticSearch
    的头像 发表于 02-15 17:09 953次阅读
    Windows安装<b class='flag-5'>ElasticSearch</b>

    linux安装配置ElasticSearch之源码安装

    ElasticSearch是基于Lucene这个非常成熟的索引方案,另加上一些分布式的实现:集群,sharding,replication等。以下是对其采用源码安装的方法1.下载
    发表于 01-11 17:27

    ElasticSearch的词条查询

    ElasticSearch查询 第三篇:词条查询
    发表于 04-30 17:03

    docker安装Elasticsearch操作指南

    docker安装Elasticsearch以及分词器
    发表于 09-16 16:53

    ElasticSearch的初步环境

    ElasticSearch最实用入门指南——初步环境
    发表于 03-31 11:32

    分析一下MySQL数据库与ElasticSearch的实际应用

    ,可以使用ElasticSearch全文检索引擎来解决这个问题,使得TB级数据在毫秒级就能返回检索结果,该引擎使用倒排索引,流程优化如下图:原作者:蟹黄瓜子 GreatSQL社区
    发表于 06-15 17:15

    Elasticsearch+Fluentd+Kafka数据的采集流程讲述

    容器都正常工作之后可以查看一下elasticsearch是否生成了预期中的数据作为验证,这里使用查看es的索引是否有生成以及数据数量来验证:-bash: -: 未找到命令[root@master
    发表于 11-11 16:26

    elasticsearch介绍PPT

    elasticsearch介绍PPT
    发表于 12-13 21:05 20次下载

    Spring-Elasticsearch插件说明

    Spring-Elasticsearch插件说明
    发表于 12-13 21:05 0次下载

    如何在Python中进行Elasticsearch操作?

    ElasticSearch(ES)是一个建立在Apache Lucene之上的高度可用的分布式开源搜索引擎
    的头像 发表于 07-20 11:12 7615次阅读
    如何在Python中<b class='flag-5'>进行</b><b class='flag-5'>Elasticsearch</b>操作?

    用区块链技术进行选举投票是否能行?乌克兰中央选举委员会试运行区块链选举投票系统

    据外媒报道,根据乌克兰中央选举委员会透露,他们正在研究选举中使用区块链技术投票的可能性。Oleksandr Stelmakh是乌克兰中央选举委员会工作人员,他表示,当地政府已经和新经币基金会展开合作,试运行基于新经币区块链的
    发表于 08-09 09:38 961次阅读

    Elasticsearch6.1教程

    Elasticsearch6.1教程
    发表于 07-04 14:40 0次下载

    ElasticSearch是什么?应用场景是什么?

    ElasticSearch是什么 ElasticSearch的功能 ElasticSearch的应用场景 ElasticSearch的特点
    的头像 发表于 10-09 18:38 2417次阅读

    Elasticsearch保姆级入门

    我们需要创建一个供 Elasticsearch 和 Kibana 使用的 network。这个 network 将被用于 Elasticsearch 和 Kibana 之间的通信。
    的头像 发表于 09-01 15:24 803次阅读
    <b class='flag-5'>Elasticsearch</b>保姆级入门

    SpringBoot 连接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章中,我们详细的介绍了 ElasticSearch 的各种 api 使用。 实际的项目开发过程中,我们通常基于某些主流框架平台进行技术开发,比如
    的头像 发表于 10-09 10:35 1010次阅读