Elasticsearch核心技術與實戰學習筆記 37 | 集羣分佈式模型及選主與腦裂問題

一 序

  本文屬於極客時間Elasticsearch核心技術與實戰學習筆記系列。

二 分佈式特性

ES 的分佈式架構帶來的好處

  • 儲存的水平擴容,支持 PB 級數據
  • 提高系統的可用性,部分節點停止服務,整個集羣的服務不受影響

ES 的分佈式架構

  • 不同的集羣通過不同的名字來區分,默認名字 “es”
  • 通過配置文件的修改,或者在命令行中 - E cluster.name=’geektime ‘設定

2.1  節點

節點是一個 ES 的實例

  1. 其本質就是一個 JAVA 進程
  2. 一臺機器可以運行多個 ES 進程,但是生產環境一般建議一臺機器就運行一個 ES 實例
  • 每一個節點都有名字,通過配置文件配置,或者啓動時候 - E node.nam=geektime 指定
  • 每一個節點在啓動之後,都會分配一個 UID,保存在 data 目錄下

2.2 Coordinating Node

處理請求的節點,叫 Coordinating Node

  • 路由請求到正確的節點,例如創建索引的請求,需要路由到 Master 節點

所有節點默認都是 Coordinating Node
通過將其他類型設置成 False ,使其成爲 Dedicated Coordinating Node

3 Demo 啓動節點,Cerebro 介紹

bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data
bin/elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data
bin/elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=node3_data

創建的索引:2個節點:02爲master,索引aaa 2個分片,副本數1.

3.1 Data Node

 可以保存數據的節點,叫做 Data Node

  • 節點啓動後,默認就是數據節點。可以設置 node.data:false 禁止

Data Node 的職責

  • 保存分片數據。在數據擴展上起到了至關重要的作用(由 Master Node 決定把分片分發到數據節點上)

通過增加數據節點

  • 可以解決數據水平擴展和解決數據單點的問題

3.2 Master Node

Master Node 的職責

  • 處理創建,刪除索引等請求 / 決定分片被分配到哪個節點 / 負責索引的創建與刪除
  • 維護並且更新 Cluster State

Master Node 的最佳實踐

  • Master 節點非常重要,在部署上需要考慮解決單點的問題
  • 爲一個集羣設置多個 Master 節點 / 每個節點值承擔 Master 的單一角色

3.3 Master Eligible Nodes & 選主流程

一個集羣,支持配置多個 Master Eligble 節點。這些節點可以在必要時(如 Master 節點出現故障,網絡故障時)參與選主流程,成爲 Master 節點。
每個節點啓動後,默認就是一個 Master eligible 節點。

  • 可以設置 node.data:false

當集羣內的第一個 Master eligible 節點時候,它會將自己選舉成 Master 節點。

3.4 集羣狀態

 集羣狀態信息(Cluster State),維護了一個集羣中,必要的信息

  • 所有的節點信息
  • 所有的索引和其相關的 Mapping 與 Setting 信息
  • 分片的路由信息

在每個節點都保存了集羣的狀態信息
但是,只有 Master 節點才能修改集羣的狀態信息,並負責同步給其他節點

  • 因爲,任意節點都能修改信息會導致 Cluster State 信息不一致

3.5 Master Eligbile Nodes & 選主的過程

  • 互相 ping 對方。Node Id 低的會被成爲被選舉的節點
  • 其他節點會加入集羣,但是不承擔 Master 節點的角色。一旦發現被選中的主節點丟失,救護選舉除新的 Master 節點

3.6 腦裂問題

Split-Brain ,分佈式系統的經典網絡問題,當出現網絡問題,一個節點和其他節點無法連接
Node 2 和 Node 3 會被重新選舉 Master
Node 1 自己還是作爲 Master,組成一個集羣,同時更新 Cluster State
導致 2 個 master,維護不同的 cluster state。當網絡恢復是,無法選擇正確恢復

這裏老師一帶而過,沒有解釋爲什麼選的node3,我有些疑惑,按照前面的說法選擇節點小的應該選2,哪位大神看到可以給個解釋。多謝。

3.7 如何避免腦裂問題

限定一個選舉條件,這是 quorum(仲裁),只有在 Master eligble 節點數大於 quorum 時,才能進行選舉

  • Quorum = (master 節點總數 / 2) +1
  • 當 3 個 master eligible 時,設置 discovery.zen.minimum_master_nodes 爲 2 ,即可避免腦裂

從 7.0 開始,無需這個配置

  • 移除 minimum_master_nodes 參數,讓 ES 自己選擇可以形成衝裁的節點
  • 電信的主節點選舉現在只需要很短的時間可以完成。集羣的伸縮變得更加安全,更容易,並且可能造成丟失數據的系統配置選項更少了
  • 節點更清楚的記錄它們的狀態,有助於診斷爲什麼它們不能加入集羣或爲什麼無法選舉除主節點

3.8 配置節點類型

學習了本節,就是掃盲了一些基本概念。還是迷惑。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章