Elasticsearch核心技術與實戰學習筆記 第三章10 基本概念:節點,集羣,分片及副本

一 序

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

  本節繼續介紹es的基本概念。因爲pdf沒有下載,所以就是對着碼字,或者視頻截個圖。

二 分佈式

   elasticsearch其實就是一個分佈式系統,需要滿足分佈式系統具備的高可用性和可擴展性

2.1分佈式系統的可用性與擴展性

  • 高可用性
    • 服務可用性-允許有節點停止服務
    • 數據可用性-部分節點丟失,不會丟失數據
  • 可擴展性
    • 請求量提升/數據的不斷增長(將數據分佈到所有節點上)

2.2 分佈式特性

  • elasticsearch的分佈式架構好處
    • 存儲的水平擴容
    • 提高系統的可用性,部分節停止服務,整個集羣的服務不受影響
  • ElasticSearch的分佈式架構

3 節點

3.1 節點

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

3.2 Master-eligible nodes和Master Node

  • 每個節點啓動後,默認就是一個Master eligible節點
    • 可以設置node.master:false禁止
  • Master-eligible節點可以參加選主流程,成爲master節點
  • 當第一個節點啓動時候,它會將自己選舉成Master節點
  • 每個節點上保存了集羣的狀態,只有master節點才能修改集羣的狀態信息
    • 集羣狀態(Cluster State),維護了一個集羣中,必要的信息
      • 所有的節點信息
      • 所有的索引和其相關的Mapping與Setting信息
      • 分片的路由信息
    • 任意節點都能修改信息會導致數據的不一致性

3.3 Data Node & Coordinate Node

  • Data Node
    • 可以保存數據的節點,叫做Data Node,負責保存分片數據。在數據擴展上起到了至關重要的作用
  • Coordinate Node
    • 負責接受Client的請求,將請求分發到合適的節點,最終將結果彙集到一起
    • 每個節點默認起到了Coordinate Node的職責

3.4其他的節點類型

  • Hot & Warm Node
    • 不同硬件配置的Data Node(冷節點配置低),用來實現Hot & Warm架構,降低集羣部署的成本
  • Machine Learning Node
    • 負責跑機器學習的 Job,用來做異常檢測
  • Tribe Node
    • 5.3開始使用Cross Cluster Search ,Tribe Node連接到不同的Elasticsearch集羣,並且支持將這些集羣當成一個單獨的集羣處理

3.5配置節點類型

  • 開發環境中一個節點可以承擔多種角色
  • 生產環境配置單一角色:更好性能,單一角色

4 分片(Primary Shard & Replica Shard)

  • 主分片,用以解決數據水平擴展的問題。通過主分片,可以將數據分佈到集羣內的所有節點之上

    • 一個分片是一個運行的 Lucene 的實例
    • 主分片數在索引創建時指定,後續不允許修改,除非 通過Reindex方式進行
  • 副本,用以解決數據高可用的問題,分片是主分片的拷貝

    • 副本分片數,可以動態調整
    • 增加副本數,還可以在一定程度上提高服務的可用性(讀取的吞吐)

一個例子:

 

4.1分片的設定

  • 對於生成環境分片的設定,需要提前做好容量規劃(這個很重要)
    • 分片數設置過小
      • 導致後續無法增加節點實現水平擴展
      • 單個分片的數據量太大,導致數據重新分配耗時
    • 分片數設置過大,7.0開始,默認主分片設置爲1,解決了over-sharding的問題
      • 影響搜索結果的相關性打分,影響統計結果的準確性
      • 單個節點上過多的分片,會導致資源浪費,同時也會影響性能

5 查看集羣的健康狀況

再dev tools運行:GET _cluster/health 

{
  "cluster_name" : "geektime",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 5,
  "active_shards" : 10,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

根據不同的狀態對應的顏色區分。

  • Green-主分片與副本都正常分配
  • Yellow-主分片全部正常分配,副本分片未能正常分配
  • Red-有主分片未能分配

其他命令:查看節點: GET _cat/nodes

172.24.0.4 37 96 7 0.53 0.26 0.21 mdi * es72_02
172.24.0.5 33 96 7 0.53 0.26 0.21 mdi - es72_01

查看分片 

 

使用cerebro ,訪問本地9000端口。

這個就是02是主的,

小結:

後面第三部分學完之後,自己應該大概有個判斷的尺度了。對生產環境中,分片設置很重要,需要最好容量評估與規劃.

有的同學諮詢的問題,老師有些寬泛的建議:

  • 磁盤,推薦 SSD,JVM最大Xmx 不要超過30G。副本分片至少設置爲1。 主分片,單個存儲不要超過 30 GB(按照這個你推算出分片數,進行設定)。
  • 集羣中磁盤快滿的時候,你再增加機器,確實可能導致新建的索引全部分配到新節點上去的可能性。最終導致數據分配不均。所以要記得監控集羣,到70%就需要考慮刪除數據或是增加節點.

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