0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ElasticSearch進(jìn)行master選舉的流程

阿銘linux ? 來(lái)源:阿銘linux ? 2023-02-23 09:54 ? 次閱讀

背景知識(shí)

ElasticSearch(下文簡(jiǎn)稱ES)集群中,每一臺(tái)服務(wù)器都有自己的角色,有一部分服務(wù)器可以設(shè)定為候選Master(至少是3臺(tái)),也就是說(shuō)這些服務(wù)器已經(jīng)具備成為Master角色的能力,但是具體誰(shuí)最終成為Master是要通過(guò)選舉才可以。

在ES配置文件里,有兩個(gè)參數(shù)來(lái)決定該節(jié)點(diǎn)是否是候選Master或者Data節(jié)點(diǎn),如果想讓某個(gè)節(jié)點(diǎn)只作為Data節(jié)點(diǎn),那么需要將node.master設(shè)置為false,而node.data設(shè)置為true:

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

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

上圖是一個(gè)ES集群的示意圖,其中NodeA是當(dāng)前集群的Master,NodeB和NodeC是Master的候選節(jié)點(diǎn),其中NodeA和NodeB同時(shí)也是數(shù)據(jù)節(jié)點(diǎn)(DataNode),此外,NodeD是一個(gè)單純的數(shù)據(jù)節(jié)點(diǎn),Node_E是一個(gè)proxy節(jié)點(diǎn)。每個(gè)Node會(huì)跟其他所有Node建立連接。

節(jié)點(diǎn)發(fā)現(xiàn)

ES服務(wù)啟動(dòng)后,首先要通過(guò)節(jié)點(diǎn)發(fā)現(xiàn)功能加入集群。ZenDiscovery是ES自己實(shí)現(xiàn)的一套用于節(jié)點(diǎn)發(fā)現(xiàn)和選主等功能的模塊,沒(méi)有依賴Zookeeper等工具。 簡(jiǎn)單來(lái)說(shuō),節(jié)點(diǎn)發(fā)現(xiàn)依賴以下配置:

discovery.seed_hosts: ["192.168.222.101", "192.168.222.102", "192.168.222.103"]
這個(gè)配置可以看作是,在本節(jié)點(diǎn)到每個(gè)discovery.sedd_hosts中的節(jié)點(diǎn)建立一條關(guān)聯(lián)線,當(dāng)整個(gè)集群所有的node形成一個(gè)聯(lián)通圖時(shí),所有節(jié)點(diǎn)都可以知道集群中有哪些節(jié)點(diǎn)存在了。

Master選舉

上面提到,集群中可能會(huì)有多個(gè)候選Master節(jié)點(diǎn),此時(shí)就要進(jìn)行Master選舉,保證只有一個(gè)當(dāng)選Master。如果有多個(gè)節(jié)點(diǎn)當(dāng)選為Master,則集群會(huì)出現(xiàn)腦裂,腦裂會(huì)破壞數(shù)據(jù)的一致性,導(dǎo)致集群行為不可控,產(chǎn)生各種非預(yù)期的影響。

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

腦裂示意圖

為了避免產(chǎn)生腦裂,ES采用了常見(jiàn)的分布式系統(tǒng)思路,保證選舉出的master被多數(shù)派(quorum)的候選Master節(jié)點(diǎn)認(rèn)可,以此來(lái)保證只有一個(gè)Master。這個(gè)quorum通過(guò)以下配置進(jìn)行配置:

discovery.zen.minimum_master_nodes: 2
這個(gè)配置對(duì)于整個(gè)集群非常重要。

誰(shuí)發(fā)起Master選舉

Master選舉是由候選Master節(jié)點(diǎn)發(fā)起,當(dāng)一個(gè)候選Master節(jié)點(diǎn)發(fā)現(xiàn)滿足以下條件時(shí)就會(huì)發(fā)起選舉:

該候選Master節(jié)點(diǎn)的當(dāng)前狀態(tài)不是Master;

該候選Master節(jié)點(diǎn)通過(guò)ZenDiscovery模塊的ping操作詢問(wèn)其已知的集群其他節(jié)點(diǎn),沒(méi)有任何節(jié)點(diǎn)連接到Master;

包括本節(jié)點(diǎn)在內(nèi),當(dāng)前已有超過(guò)minimum_master_nodes個(gè)節(jié)點(diǎn)沒(méi)有連接到Master。

簡(jiǎn)單講,就是當(dāng)一個(gè)候選Master節(jié)點(diǎn)發(fā)現(xiàn)包括自己在內(nèi)的多數(shù)候選Master節(jié)點(diǎn)認(rèn)為集群沒(méi)有Master時(shí),就可以發(fā)起Master選舉。

如何選舉

ES Master選舉有一套自己的算法,該算法是基于一種稱為“狀態(tài)機(jī)復(fù)制”的機(jī)制。狀態(tài)機(jī)復(fù)制的基本原理是,在一個(gè)分布式系統(tǒng)中,每個(gè)節(jié)點(diǎn)都有一份當(dāng)前的狀態(tài),并且每個(gè)節(jié)點(diǎn)都可以獨(dú)立決定自己是否被選舉為Master節(jié)點(diǎn)。在ES集群中,每個(gè)節(jié)點(diǎn)都會(huì)比較當(dāng)前節(jié)點(diǎn)和其他節(jié)點(diǎn)的狀態(tài),如果當(dāng)前節(jié)點(diǎn)的狀態(tài)最新,則當(dāng)前節(jié)點(diǎn)將被選為Master節(jié)點(diǎn)。

ES的選舉工作流程大致如下:

① 首先,所有候選Master節(jié)點(diǎn)都會(huì)比較自己的狀態(tài),如果自己的狀態(tài)最新,則發(fā)起投票;

② 其他節(jié)點(diǎn)收到投票后,也會(huì)比較自己的狀態(tài),如果自己的狀態(tài)最新,則會(huì)再次發(fā)起投票;

③ 當(dāng)某個(gè)節(jié)點(diǎn)收到來(lái)自其他節(jié)點(diǎn)的投票,且自己的狀態(tài)最新時(shí),則會(huì)將自己的狀態(tài)發(fā)送給其他節(jié)點(diǎn),并同意自己被選為Master節(jié)點(diǎn);

④ 其他節(jié)點(diǎn)收到來(lái)自Master節(jié)點(diǎn)的狀態(tài)后,會(huì)將自己的狀態(tài)更新,同意將Master節(jié)點(diǎn)選為Master節(jié)點(diǎn)(有點(diǎn)繞口);

⑤ 一旦Master節(jié)點(diǎn)確定,其他節(jié)點(diǎn)就會(huì)向Master節(jié)點(diǎn)發(fā)送心跳包,以確保Master節(jié)點(diǎn)的活動(dòng)狀態(tài);

⑥ 如果Master節(jié)點(diǎn)失去連接,則其他節(jié)點(diǎn)會(huì)開(kāi)始新的投票,以確定新的Master節(jié)點(diǎn)。

按照上述流程,我們描述一個(gè)簡(jiǎn)單的場(chǎng)景來(lái)幫助大家理解:

假如集群中有3個(gè)候選Master節(jié)點(diǎn),分別為Node_A、 Node_B、 Node_C。三個(gè)節(jié)點(diǎn)都認(rèn)為當(dāng)前沒(méi)有Master,于是都各自發(fā)起選舉。

假如此時(shí)Node_A的狀態(tài)最新,所以選舉結(jié)果都為Node_A。于是Node_A開(kāi)始等選票,Node_B、Node_C都向Node_A發(fā)起投票,當(dāng)Node_A接收到第一次投票(假如是Node_B發(fā)起的)時(shí),加上它自己的一票,就獲得了兩票了(超過(guò)半數(shù)),于是Node_A成為Master。

有一點(diǎn)要說(shuō)明,對(duì)于ES集群來(lái)說(shuō),當(dāng)Master節(jié)點(diǎn)確立時(shí),它就會(huì)等待其它節(jié)點(diǎn)join自己成為一個(gè)集群了,當(dāng)所有其它非Master節(jié)點(diǎn)全部join到Master時(shí),集群才算徹底創(chuàng)建完成。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8702

    瀏覽量

    84569
  • MASTER
    +關(guān)注

    關(guān)注

    0

    文章

    99

    瀏覽量

    11220

原文標(biāo)題:你知道ElasticSearch是如何進(jìn)行master選舉的嗎

文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Windows安裝ElasticSearch

    Windows安裝ElasticSearch
    的頭像 發(fā)表于 02-15 17:09 ?883次閱讀
    Windows安裝<b class='flag-5'>ElasticSearch</b>

    linux安裝配置ElasticSearch之源碼安裝

    ElasticSearch是基于Lucene這個(gè)非常成熟的索引方案,另加上一些分布式的實(shí)現(xiàn):集群,sharding,replication等。以下是對(duì)其采用源碼安裝的方法1.下載
    發(fā)表于 01-11 17:27

    ElasticSearch的詞條查詢

    ElasticSearch查詢 第三篇:詞條查詢
    發(fā)表于 04-30 17:03

    docker安裝Elasticsearch操作指南

    docker安裝Elasticsearch以及分詞器
    發(fā)表于 09-16 16:53

    ElasticSearch的初步環(huán)境

    ElasticSearch最實(shí)用入門指南——初步環(huán)境
    發(fā)表于 03-31 11:32

    分析一下MySQL數(shù)據(jù)庫(kù)與ElasticSearch的實(shí)際應(yīng)用

    ,可以使用ElasticSearch全文檢索引擎來(lái)解決這個(gè)問(wèn)題,使得TB級(jí)數(shù)據(jù)在毫秒級(jí)就能返回檢索結(jié)果,該引擎使用倒排索引,流程優(yōu)化如下圖:原作者:蟹黃瓜子 GreatSQL社區(qū)
    發(fā)表于 06-15 17:15

    Elasticsearch+Fluentd+Kafka數(shù)據(jù)的采集流程講述

    容器都正常工作之后可以查看一下elasticsearch是否生成了預(yù)期中的數(shù)據(jù)作為驗(yàn)證,這里使用查看es的索引是否有生成以及數(shù)據(jù)數(shù)量來(lái)驗(yàn)證:-bash: -: 未找到命令[root@master
    發(fā)表于 11-11 16:26

    elasticsearch介紹PPT

    elasticsearch介紹PPT
    發(fā)表于 12-13 21:05 ?20次下載

    Spring-Elasticsearch插件說(shuō)明

    Spring-Elasticsearch插件說(shuō)明
    發(fā)表于 12-13 21:05 ?0次下載

    如何在Python中進(jìn)行Elasticsearch操作?

    ElasticSearch(ES)是一個(gè)建立在Apache Lucene之上的高度可用的分布式開(kāi)源搜索引擎
    的頭像 發(fā)表于 07-20 11:12 ?7531次閱讀
    如何在Python中<b class='flag-5'>進(jìn)行</b><b class='flag-5'>Elasticsearch</b>操作?

    用區(qū)塊鏈技術(shù)進(jìn)行選舉投票是否能行?烏克蘭中央選舉委員會(huì)試運(yùn)行區(qū)塊鏈選舉投票系統(tǒng)

    據(jù)外媒報(bào)道,根據(jù)烏克蘭中央選舉委員會(huì)透露,他們正在研究選舉中使用區(qū)塊鏈技術(shù)投票的可能性。Oleksandr Stelmakh是烏克蘭中央選舉委員會(huì)工作人員,他表示,當(dāng)?shù)卣呀?jīng)和新經(jīng)幣基金會(huì)展開(kāi)合作,試運(yùn)行基于新經(jīng)幣區(qū)塊鏈的
    發(fā)表于 08-09 09:38 ?898次閱讀

    Elasticsearch6.1教程

    Elasticsearch6.1教程
    發(fā)表于 07-04 14:40 ?0次下載

    ElasticSearch是什么?應(yīng)用場(chǎng)景是什么?

    ElasticSearch是什么 ElasticSearch的功能 ElasticSearch的應(yīng)用場(chǎng)景 ElasticSearch的特點(diǎn)
    的頭像 發(fā)表于 10-09 18:38 ?2320次閱讀

    Elasticsearch保姆級(jí)入門

    我們需要?jiǎng)?chuàng)建一個(gè)供 Elasticsearch 和 Kibana 使用的 network。這個(gè) network 將被用于 Elasticsearch 和 Kibana 之間的通信。
    的頭像 發(fā)表于 09-01 15:24 ?741次閱讀
    <b class='flag-5'>Elasticsearch</b>保姆級(jí)入門

    SpringBoot 連接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章中,我們?cè)敿?xì)的介紹了 ElasticSearch 的各種 api 使用。 實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,我們通?;谀承┲髁骺蚣芷脚_(tái)進(jìn)行技術(shù)開(kāi)發(fā),比如
    的頭像 發(fā)表于 10-09 10:35 ?650次閱讀