Elasticsearch之分布式特性

  • es支持集群模式,是一個分布式系統(tǒng),其好處主要有兩個:
    ? - 增大系統(tǒng)容量,如內(nèi)存、磁盤、使得es集群可以支持PB級別的數(shù)據(jù)
    ? - 提高系統(tǒng)的可用性,即使部分節(jié)點停止服務(wù),整個集群依然可以正常服務(wù)
  • es集群由多個es示例組成
    ? - 不同的集群通過集群名來區(qū)分,可通過cluster.name 進(jìn)行修改,默認(rèn)為elasricsearch
    ? - 每個es實例本質(zhì)是一個JVM進(jìn)程,且有自己的名字,通過node.name進(jìn)行修改
  • Cluster State
    es集群相關(guān)的數(shù)據(jù)稱為 cluster state(集群狀態(tài)),主要記錄信息如下:
    ? - 節(jié)點信息,比如節(jié)點的名稱、連接地址等
    ? - 索引信息,比如索引名稱、配置等
  • Cluster Health
    通過如下api可以查看集群的健康狀況,包括以下三種:
    ? - green:健康狀態(tài),指所有的主副分片都正常分配
    ? - yellow:指所有的主分片都正常分配,但是有副本分片未正常分配
    ? - red:有主分片未分配
    查看健康狀態(tài) API
    響應(yīng)
  • Master Node
    ? - 可以修改cluster state 的節(jié)點稱為 master 節(jié)點,一個集群只能有一個

  • Master Node - cluster state 存儲在每個節(jié)點上,master 維護(hù)最新版本并同步給其他節(jié)點
    ? - master節(jié)點是通過集群中所有節(jié)點選舉產(chǎn)生,可以被選舉的節(jié)點稱為master-eligible節(jié)點,配置為:node.master: true

  • Coordinating Node
    處理請求的節(jié)點為 coordinating 節(jié)點,該節(jié)點為所有節(jié)點的默認(rèn)角色,不能取消
    ? - 路由請求到正確的節(jié)點處理,比如創(chuàng)建索引的請求到master 節(jié)點

  • Data Node
    存儲數(shù)據(jù)的節(jié)點為 data節(jié)點,默認(rèn)節(jié)點都是 data 類型,相關(guān)配置為:node.data: true

  • 提高系統(tǒng)的可用性
    1. 服務(wù)的可用性
    ? - 2個節(jié)點的情況下,允許其中一個節(jié)點停止服務(wù)
    2. 數(shù)據(jù)的可用性
    ? - 引入副本(replication)解決
    ? - 每個節(jié)點上都有完備的數(shù)據(jù)

  • 增大系統(tǒng)的容量

  1. 如何將數(shù)據(jù)分布于所有的節(jié)點上?
    ? - 引入分片(Shard) 解決問題
  2. 分片是es支持PB級數(shù)據(jù)的基石
    ? - 分片存儲了部分?jǐn)?shù)據(jù),可以分布于任意節(jié)點上
    ? - 分片數(shù)在索引創(chuàng)建時指定且后續(xù)不允許修改,默認(rèn)為 5 個
    ? - 分片有主分片和副本分片之分,以實現(xiàn)數(shù)據(jù)的高可用
    ? - 副本分片的數(shù)據(jù)由主分片同步,可以有多個,從而提高讀取的吞吐量

    下圖是3個節(jié)點的集群中test_index 的分片分布情況,創(chuàng)建時我們指定了3個分片和1個副本
    創(chuàng)建索引
  • 分片數(shù)設(shè)置注意事項
    分片數(shù)的設(shè)定很重要,需要提前規(guī)劃好
    ? - 過小會導(dǎo)致后續(xù)無法通過增加節(jié)點實現(xiàn)水平擴(kuò)容
    ? - 過大會導(dǎo)致一個節(jié)點上分布過多的分片,造成資源浪費,同時會影響查詢性能
  • 故障轉(zhuǎn)移
    集群由3個節(jié)點組成,如下圖所示,此時的集群狀態(tài)是 green
    Cluster-1

    node1 所在的機(jī)器宕機(jī)導(dǎo)致服務(wù)終止,此時集群會如何處理?
    Cluster-2
  1. node2 和 node3 發(fā)現(xiàn) node1 無法響應(yīng)一段時間后會發(fā)起master選舉,比如這里選擇 node2 為 master 節(jié)點,此時由于主分片P0下線,集群狀態(tài)變?yōu)镽ed
    Cluster-3
  2. node2 發(fā)現(xiàn)主分片P0未分配,將R0提升為主分片。此時由于所有的主分片都正常分配,集群的狀態(tài)變?yōu)閅ellow
    Cluster-4
  3. node2 為 P0和P1生成新的副本,集群狀態(tài)變?yōu)榫G色
    Cluster-5
  • 集群文檔創(chuàng)建的流程
    創(chuàng)建流程
  • 集群文檔讀取的流程
    讀取流程
  • 腦裂問題
    腦裂問題(split-brain),是分布式系統(tǒng)中經(jīng)典的網(wǎng)絡(luò)問題,如下圖所示:
    腦裂
    3個節(jié)點組成的集群,突然node1的網(wǎng)絡(luò)和其他兩個節(jié)點中斷。
    腦裂
    node2與node3會重新選舉master,比如node2成為了新的master,此時會更新cluster state, 同時node1自己組成集群后,也會更新cluster state,此時同一個集群有兩個master,而且維護(hù)不同的cluster state ,網(wǎng)絡(luò)恢復(fù)后無法選擇正確的master。
    解決方案
    解決方案為僅在可選舉master-eligible節(jié)點數(shù)大于等于quorum時才可以進(jìn)行master選舉
    ? - quorum = master-eligible/2 + 1,例如3個節(jié)點時,quorum 為 2
    ? - 設(shè)定 discovery.zen.minimum_master_nodes 為 quorum 即可避免腦裂問題。
    腦裂
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容