Elasticsearch選舉機制

ES集羣構成

ES集羣由節點(Node)構成,節點類型可配置以下:node

conf/elasticsearch.yml:
    node.master: true/false
    node.data: true/false

node.master: true --master的候選節點,能夠參與選舉,在ES的文檔中常被稱做master-eligible nodeelasticsearch

node.data: true --數據節點,會存儲分配在該node上的shard的數據並負責這些shard的寫入、查詢等。分佈式

任何一個集羣內的node均可以執行任何請求,其會負責將請求轉發給對應的node進行處理,因此當node.master和node.data都爲false時,這個節點能夠做爲一個相似proxy的節點,接受請求並進行轉發、結果聚合等。工具

節點發現

ZenDiscovery是ES本身實現的一套用於節點發現和選主等功能的模塊,沒有依賴Zookeeper等工具spa

簡單來講,節點發現依賴如下配置:code

conf/elasticsearch.yml:
    discovery.zen.ping.unicast.hosts: [1.1.1.1, 1.1.1.2, 1.1.1.3]

這個配置能夠看做是,在本節點到每一個hosts中的節點創建一條邊,當整個集羣全部的node造成一個聯通圖時,全部節點均可以知道集羣中有哪些節點,不會造成孤島。官方推薦這裏設置爲全部的master-eligible node文檔

Master選舉

上面提到,集羣中可能會有多個master候選節點,此時就要進行master選舉,保證只有一個當選master。若是有多個node當選爲master,則集羣會出現腦裂,腦裂會破壞數據的一致性,致使集羣行爲不可控,產生各類非預期的影響。ast

爲了不產生腦裂,ES採用了常見的分佈式系統思路,保證選舉出的master被多數派(quorum)的候選節點承認,以此來保證只有一個master。這個quorum經過如下配置進行配置:集羣

conf/elasticsearch.yml:
    discovery.zen.minimum_master_nodes: 2
相關文章
相關標籤/搜索