1. master:
2. data:
3. Coordinating:
4. Ingest Node節點:
ZenDiscovery是ES自己實現的一套用于節點發現和選主等功能的模塊,沒有依賴Zookeeper等工具,官方文檔。
簡單來說,節點發現依賴以下配置:
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-eligible node,此時就要進行master選舉,保證只有一個當選master。如果有多個node當選為master,則集群會出現腦裂,腦裂會破壞數據的一致性,導致集群行為不可控,產生各種非預期的影響。
為了避免產生腦裂,ES采用了常見的分布式系統思路,保證選舉出的master被多數派(quorum)的master-eligible node認可,以此來保證只有一個master。這個quorum通過以下配置進行配置:
conf/elasticsearch.yml: discovery.zen.minimum_master_nodes: 2
這個配置對于整個集群非常重要。
1. master選舉誰發起,什么時候發起?
master選舉當然是由master-eligible節點發起,當一個master-eligible節點發現滿足以下條件時發起選舉:
總結一句話,即當一個節點發現包括自己在內的多數派的master-eligible節點認為集群沒有master時,就可以發起master選舉。
2. 當需要選舉master時,選舉誰?
首先是選舉誰的問題,如下面源碼所示,選舉的是排序后的第一個MasterCandidate(即master-eligible node)。
public MasterCandidate electMaster(Collection<MasterCandidate> candidates) { assert hasEnoughCandidates(candidates); List<MasterCandidate> sortedCandidates = new ArrayList<>(candidates); sortedCandidates.sort(MasterCandidate::compare); return sortedCandidates.get(0);}
那么是按照什么排序的?
public static int compare(MasterCandidate c1, MasterCandidate c2) { // we explicitly swap c1 and c2 here. the code expects "better" is lower in a sorted // list, so if c2 has a higher cluster state version, it needs to come first. int ret = Long.compare(c2.clusterStateVersion, c1.clusterStateVersion); if (ret == 0) { ret = compareNodes(c1.getNode(), c2.getNode()); } return ret;}
如上面源碼所示,先根據節點的clusterStateVersion比較,clusterStateVersion越大,優先級越高。clusterStateVersion相同時,進入compareNodes,其內部按照節點的Id比較(Id為節點第一次啟動時隨機生成)。
總結一下:
當一個master-eligible node(我們假設為Node_A)發起一次選舉時,它會按照上述排序策略選出一個它認為的master。
(1) 如果Node_B已經成為Master,Node_B就會把Node_A加入到集群中,然后發布最新的cluster_state, 最新的cluster_state就會包含Node_A的信息。相當于一次正常情況的新節點加入。對于Node_A,等新的cluster_state發布到Node_A的時候,Node_A也就完成join了。
(2) 如果Node_B在競選Master,那么Node_B會把這次join當作一張選票。對于這種情況,Node_A會等待一段時間,看Node_B是否能成為真正的Master,直到超時或者有別的Master選成功。
(3) 如果Node_B認為自己不是Master(現在不是,將來也選不上),那么Node_B會拒絕這次join。對于這種情況,Node_A會開啟下一輪選舉。
此時NodeA會等別的node來join,即等待別的node的選票,當收集到超過半數的選票時,認為自己成為master,然后變更cluster_state中的master node為自己,并向集群發布這一消息。
我們知道es中保存數據的時候是有主分片和副本分片的,那么副本分片的作用有哪些呢?
主副本之前角色的切換如何發生的?
當主分片不可用時,es就會重新進行選舉,把最新的副本分片提高到主分片的地位,這里es的master節點實現了主副本選舉的邏輯
參考鏈接:
https://blog.csdn.net/qq_35373760/article/details/108974308
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
蘋果手機和ipad藍牙怎么連接?而蘋果公司對版權的注重,蘋果的手機是跟別的機子,好象是又不能藍牙無線連接的。蘋果產品的藍牙一般只有連接上外設,肯定不能傳文件。所以又不能搜索別的手機,一直在搜索狀態。假如是iPhone和ipad之間傳東西的話,兩部機子都然后打開AirDrop這個功能就這個可以互傳了,使用方法是:1、再打開后選“所有人”或“僅限聯系人”。2、然后把以分享照片為例,可以打開相冊點照片右...
如何進入黑客圈子?我做了20多年的黑客,比如海陽頂級ASP木馬和端口轉發工具lcx.exe文件這都是我的工作。我的標題是在黑客領域,最近它一直朝著黑客教學的方向發展。不久前,我回答了一個問題,如何從零開始成為黑客?在寫了這個答案之后,我開始改進我的標題中的兩篇文章系列,那就是零基礎學習網絡滲透系列和我們的不同黑客教程系列。我認為這已經足夠基本,可以引導你開始學習,學習之后,你可以去各種黑客論壇。它...
TRENDnet是一個什么公司?TRENDnet:趨勢技術、網絡安全軟件和服務的全球領導者。TRENDnet總部位于日本東京和美國硅谷,分別在日本東京證券交易所和美國納斯達克上市。它分別于2002年10月和2004年9月被列入日經指數和道瓊斯可持續發展指數。2001年7月,趨勢科技正式進入中國市場,并在上海、北京、廣州、成都等地設立分公司。以“創新服務用戶需求”為宗旨,為國內各行業用戶提供高質量的...