最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

elasticsearch的靈魂唯一master選舉機(jī)制原理分析

 更新時(shí)間:2022年04月21日 14:34:58   作者:zziawan  
這篇文章主要為大家介紹了elasticsearch的靈魂唯一master選舉機(jī)制原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

master作為cluster的靈魂必須要有,還必須要唯一,否則集群就出大問(wèn)題了。因此master選舉在cluster分析中尤為重要。對(duì)于這個(gè)問(wèn)題我將分兩篇來(lái)分析。第一篇也就是本篇,首先會(huì)簡(jiǎn)單說(shuō)一說(shuō)mater選舉的一些算法,及elasticsearch的選舉原理。第二篇也就是下一篇,會(huì)結(jié)合zenDiscovery代碼為仔細(xì)分析elasticsearch的master選舉的實(shí)現(xiàn)。

簡(jiǎn)單來(lái)說(shuō)master的作用跟單個(gè)jvm中的同步關(guān)鍵字synchronized相同,集群中多節(jié)點(diǎn)協(xié)調(diào)工作必須要保證數(shù)據(jù)的一致性,但是不同節(jié)點(diǎn)分布在不同的jvm中,不可能用jvm的同步機(jī)制。所以需要一個(gè)“鎖”,節(jié)點(diǎn)操作集群中的資源時(shí)都通過(guò)它來(lái)解決一致性問(wèn)題,這就是master。關(guān)于分布式系統(tǒng)的master選舉算法有很多,最有名的當(dāng)然要數(shù)paxos算法,在它的基礎(chǔ)上出現(xiàn)了非常多的變體算法。關(guān)于這個(gè)算法請(qǐng)參考相關(guān)網(wǎng)頁(yè)和資料,不是一兩句話(huà)能說(shuō)清楚的,這里不再祥述。但是paxos的功能遠(yuǎn)遠(yuǎn)超出了master選舉,一致性向才是它的目標(biāo),任何需要實(shí)現(xiàn)一致性的問(wèn)題都可以使用該算法,因此zookeeper功能遠(yuǎn)遠(yuǎn)不止master選舉。

還有一種比較簡(jiǎn)單的算法就是Bully,它通過(guò)一定的直接給每個(gè)節(jié)點(diǎn)賦予一唯一的ID,這些ID是可以排序的,每次master選舉都會(huì)選舉ID最大的節(jié)點(diǎn)。這種實(shí)現(xiàn)非常簡(jiǎn)單。但是會(huì)存在一些問(wèn)題,在master負(fù)載過(guò)重時(shí)它會(huì)假死,于是第二大節(jié)點(diǎn)就成為了master節(jié)點(diǎn)。因此假死m(xù)aster節(jié)點(diǎn)因負(fù)載減輕又活了過(guò)來(lái),于是他又被選為master,然后又假死……,這種情況可能一直存在導(dǎo)致系統(tǒng)不穩(wěn)定。

集群還有一個(gè)問(wèn)題就是brain split:一個(gè)集群因?yàn)榫W(wǎng)絡(luò)問(wèn)題導(dǎo)致多個(gè)master選舉出來(lái)而分裂。這也是master選舉必須要解決的問(wèn)題。elasticsearch的master選舉原理我覺(jué)得是在bully的基礎(chǔ)上做了改進(jìn)。相比于paxos實(shí)現(xiàn)的zookeeper它完美的解決了master選舉問(wèn)題,但不如zookeeper強(qiáng)大,因?yàn)閦ookeeper功能遠(yuǎn)遠(yuǎn)超出了master選舉,它的master選舉卻不需要這么多功能。它原理如下:

  • 對(duì)所有可以成為master的節(jié)點(diǎn)根據(jù)nodeId排序,每次選舉每個(gè)節(jié)點(diǎn)都把自己所知道節(jié)點(diǎn)排一次序,然后選出第一個(gè)(第0位)節(jié)點(diǎn),暫且認(rèn)為它是master節(jié)點(diǎn)。
  • 如果對(duì)某個(gè)節(jié)點(diǎn)的投票數(shù)達(dá)到一定的值(可以成為master節(jié)點(diǎn)數(shù)n/2+1)并且該節(jié)點(diǎn)自己也選舉自己,那這個(gè)節(jié)點(diǎn)就是master。否則重新選舉。
  • 對(duì)于brain split問(wèn)題,需要把候選master節(jié)點(diǎn)最小值設(shè)置為可以成為master節(jié)點(diǎn)數(shù)n/2+1(quorum )

以上就是master選舉的三條原則,其實(shí)第三天包含在第二條之中,為了說(shuō)明brain split問(wèn)題這里單獨(dú)拿出來(lái)說(shuō)一下。下面看一下ElectMasterService的相關(guān)代碼,來(lái)補(bǔ)充說(shuō)明一下一上的文字描述:

public DiscoveryNode electMaster(Iterable<DiscoveryNode> nodes) {
        List<DiscoveryNode> sortedNodes = sortedMasterNodes(nodes);
        if (sortedNodes == null || sortedNodes.isEmpty()) {
            return null;
        }
        return sortedNodes.get(0);
    }

上面就是選舉master的方法,可以看到,它的做法就是對(duì)候選節(jié)點(diǎn)排序然后直接將第一個(gè)返回。當(dāng)然這只是上面所說(shuō)的第一條。其實(shí)只有這個(gè)是不能夠保證maser選舉順利的,之前也看到一些文章分析elasticsearch的master選舉,只提到了這個(gè)點(diǎn)和這一部分代碼,應(yīng)該是作者沒(méi)有仔細(xì)研究Discovery代碼而導(dǎo)致的疏忽。如果每個(gè)節(jié)點(diǎn)都只是選舉自己排序后的節(jié)點(diǎn)的第一個(gè)肯定會(huì)導(dǎo)致brain split和選舉不一致。master比較的方法也比較簡(jiǎn)單如下所示:

private static class NodeComparator implements Comparator<DiscoveryNode> {

        @Override
        public int compare(DiscoveryNode o1, DiscoveryNode o2) {
            if (o1.masterNode() && !o2.masterNode()) {
                return -1;
            }
            if (!o1.masterNode() && o2.masterNode()) {
                return 1;
            }
            return o1.id().compareTo(o2.id());
        }
    }

以上是節(jié)點(diǎn)排序比較器,可以看到它只是比較了nodeId,因此是按nodeId排序。從這兩兩段代碼來(lái)看很像是bully算法的實(shí)現(xiàn)。為了解決brain split問(wèn)題開(kāi)發(fā)者加入了master候選數(shù)據(jù)量限制,代碼如下:

public boolean hasEnoughMasterNodes(Iterable<DiscoveryNode> nodes) {
        if (minimumMasterNodes < 1) {
            return true;
        }
        int count = 0;
        for (DiscoveryNode node : nodes) {
            if (node.masterNode()) {
                count++;
            }
        }
        return count >= minimumMasterNodes;
    }

通過(guò)比較節(jié)點(diǎn)能“看到”的候選master數(shù)量和配置的最小值來(lái)確定是否可以進(jìn)行選舉,如果數(shù)量不夠會(huì)導(dǎo)致選舉不能進(jìn)行,這樣就可以保證集群不會(huì)被分裂。下面以一個(gè)圖(圖片來(lái)自于elasticsearch官網(wǎng))來(lái)說(shuō)明:

假設(shè)之前選舉了A節(jié)點(diǎn)為master,兩個(gè)switch之間突然斷線(xiàn)了,這樣就分詞了兩部分。CDE和AB,因?yàn)?minimumMasterNodes的數(shù)目為3(集群中5個(gè)節(jié)點(diǎn)都可以成為master,3=5/2+1),因此cde會(huì)可以進(jìn)行選舉假設(shè)C成為master。AB兩個(gè)節(jié)點(diǎn)因?yàn)樯儆?所以無(wú)法選舉,只能一直尋求加入集群,要么線(xiàn)路連通加入到CDE中要么就一直處于尋找集群狀態(tài),這樣就保證了集群不分裂。

總結(jié)一下,本篇介紹了master選舉的兩種算法和elasticsearch的選舉原理,并分析了它原理中的兩條,第二條將在下一篇discovery中接下分析。

以上就是elasticsearch的靈魂唯一master選舉機(jī)制原理分析的詳細(xì)內(nèi)容,更多關(guān)于elasticsearch唯一master選舉機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java_Spring之Spring5?的新特性

    Java_Spring之Spring5?的新特性

    這篇文章主要介紹了Java_Spring中Spring5?的新特性,需要利用jdk8?版本更新的內(nèi)容,依賴(lài)庫(kù)更新,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • Java如何向指定文件操作一段內(nèi)容(增加,刪除均可使用本方法)

    Java如何向指定文件操作一段內(nèi)容(增加,刪除均可使用本方法)

    這篇文章主要介紹了Java如何向指定文件操作一段內(nèi)容(增加,刪除均可使用本方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring Cloud Gateway網(wǎng)關(guān)XSS過(guò)濾方式

    Spring Cloud Gateway網(wǎng)關(guān)XSS過(guò)濾方式

    這篇文章主要介紹了Spring Cloud Gateway網(wǎng)關(guān)XSS過(guò)濾方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java利用docx4j+Freemarker生成word文檔

    Java利用docx4j+Freemarker生成word文檔

    這篇文章主要為大家詳細(xì)介紹了Java如何利用docx4j+Freemarker生成word文檔,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Spring集成Seata方式(案例演示)

    Spring集成Seata方式(案例演示)

    這篇文章主要介紹了Spring集成Seata方式,本案例使用Seata-All演示,結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java實(shí)現(xiàn)記事本功能

    Java實(shí)現(xiàn)記事本功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)記事本功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 關(guān)于@Value注解失效的原因分析

    關(guān)于@Value注解失效的原因分析

    這篇文章主要介紹了關(guān)于@Value注解失效的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Spring中BeanFactory和ApplicationContext的作用和區(qū)別(推薦)

    Spring中BeanFactory和ApplicationContext的作用和區(qū)別(推薦)

    這篇文章主要介紹了Spring中BeanFactory和ApplicationContext的作用和區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Maven使用方法詳及方式詳細(xì)介紹

    Maven使用方法詳及方式詳細(xì)介紹

    使用maven倉(cāng)庫(kù)的話(huà)需要從網(wǎng)上下載maven的包,比如“apache-maven-3.5.4-bin.tar”,下載完成之后解壓,在解壓的文件夾中的conf目錄下的settings.xml文件夾下就可以配置maven遠(yuǎn)程倉(cāng)庫(kù)和本地倉(cāng)庫(kù)的地址
    2022-11-11
  • Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)

    Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)

    下面小編就為大家?guī)?lái)一篇Java反射根據(jù)不同方法名動(dòng)態(tài)調(diào)用不同的方法(實(shí)例)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08

最新評(píng)論

拉萨市| 兰州市| 张家口市| 增城市| 昌图县| 湟中县| 双鸭山市| 兴山县| 吉木乃县| 万宁市| 拜泉县| 河南省| 长治县| 漳浦县| 南靖县| 柘城县| 遵义县| 永靖县| 综艺| 巴青县| 嘉义县| 文成县| 岳池县| 虹口区| 分宜县| 响水县| 武鸣县| 鹤壁市| 辽宁省| 伊宁市| 康马县| 庆云县| 新巴尔虎左旗| 双峰县| 新郑市| 葵青区| 合江县| 青田县| 包头市| 泉州市| 临洮县|