筆記三:基本概念-文件、索引和 REST API

CrazyZard發表於2019-10-12
  1. ES時面向文件的,文件是所有課搜尋的最小單位

  2. 文件會被序列化城JSON格式,儲存在ES裡面

  3. 每個文件有個UNIQUE ID -可以自動生成也可以指定

    JSON文件

  4. 一篇文件包含一系列的欄位,類似資料庫-表裡的一條記錄(ROW)

  5. 文件格式靈活,不需要預先規定格式類似MYSQL裡面的CHAR\VARCHAR型別,可以自己指定,也可以ES自動推算,支援陣列、跟巢狀TODO未懂
    ES 筆記三:基本概念

    文件的後設資料

    ES 筆記三:基本概念

    索引

    ES 筆記三:基本概念
    文件裡的_index 對應索引的名

    TYPE

    7.0開始,一個索引只能建立一個TYPE-‘_doc’類似INODB的概念

    抽象與類比

    ES 筆記三:基本概念-文件、索引和 REST API

    REST API-方便被各種語言呼叫

    ES 筆記三:基本概念-文件、索引和 REST API

    節點

    節點是一個ES的例項

    • 本質就是一個JAVA程式

    • 一臺機器上可以執行多個ES程式

    • 每個節點都有名字,通過配置檔案配置,或者啟動 -E node.name=lsk指定

    • 每個節點啟動之後,會分配一個UID,儲存在data目錄下

    • 不同節點承擔不同角色。

      Master-eligible nodes

    • 每個節點啟動之後,預設就是Master eligible節點

      • 可以設定 node.master:false 禁止
    • Mater-eligible 節點可參加選主流程,成為Master節點

    • 當第一個節點啟動時候,它會將自己選舉城Mater節點

    • 每個節點都儲存了叢集的狀態,只有Master節點才能修改叢集的狀態資訊

      • 叢集狀態(Cluster State) ,維護了一個叢集中必要的資訊
        • 所有節點資訊
        • 所有的索引和其相關的Mapping 與 Setting 資訊
        • 分片的路由資訊
        • 如果任意節點都能修改資訊導致資料不一致

      Data Node

      • 可以儲存資料的節點,負責儲存分片資料。

      Coordinating Node

      • 負責接收Client的請求,將請求分發到合適的節點,最終把結果匯聚到一起
      • 每個節點預設都起到 Coorinating Node的職責

      其他的節點型別

      • Hot & Warm Node (冷熱節點)
        • 不同的硬體配置的Data Node,用來實現Hot(熱資料) & Warn(舊資料)架構,以降低叢集部署的成本
      • Machine Learning Node
        • 負責跑機器學習的JOB,用來做異常檢測
      • Tribe Node ( 未來要被淘汰)
        • 5.3 開始使用 Cross Cluster Serach

    配置節點型別

    ES 筆記三:基本概念-文件、索引和 REST API

分片(Primary Shard & Replica Shard)

  • 主分片,用來解決資料水平擴充套件問題。通過中分片,可以將資料分佈到叢集內的所有節點之上

    • 一個分片是一個執行的Lucene的例項
    • 主分片數在索引建立時指定,後期不允許修改,除非 Reindex
  • 副本,解決資料高可用問題。分片是主分片的拷貝

    • 副本分片數,可以動態的調整
    • 增加副本數,可以在一個程度上提高服務的可用性(讀取的吞吐)
  • 圖中,3個主分片分散到3個節點上,副本分配到其他節點上
    ES 筆記三:基本概念-文件、索引和 REST API

    分片的設定

    • 對於生產環境中分片的設定,需要提前組好容量規劃
      • 分片數設定過小
        • 導致後續無效增加節點實現水平擴充套件
        • 單個分片的資料量太大,導致資料重新分配耗時
      • 分片數設定過大,7.0開始,預設主分片設定成1(之前是5),解決了 over-sharding 的問題
        • 影響搜素結果的相關性打分,影響統計結果的準確性
        • 單個節點上過多的分片,會導致資源的浪費,同時也會影響效能

    ES提供API ,瞭解叢集情況

    • Green - 主分片跟副本都正常分配
    • Yellow - 主分片全部分配正常,有副本分片問能正常分配
    • Red - 有主分片未能分配
      • 例如:有磁碟容量超過85%時,去建立新的索引
        GET _cluster/health //檢視健康
        {
        "cluster_name" : "lsk",
        "status" : "green",
        "timed_out" : false,
        "number_of_nodes" : 2,
        "number_of_data_nodes" : 2,
        "active_primary_shards" : 2,
        "active_shards" : 4,
        "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
        }
        GET _cat/nodes // 相關node資訊
        //172.22.0.2 35 96 1 0.00 0.01 0.05 dim * es7_01
        //172.22.0.4 33 96 1 0.00 0.01 0.05 dim - es7_02
        GET _cat/shards //分片資訊
        .kibana_1            0 p STARTED 4 18.3kb 172.22.0.2 es7_01
        .kibana_1            0 r STARTED 4 18.3kb 172.22.0.4 es7_02
        .kibana_task_manager 0 p STARTED 2 29.6kb 172.22.0.2 es7_01
        .kibana_task_manager 0 r STARTED 2 29.6kb 172.22.0.4 es7_02
本作品採用《CC 協議》,轉載必須註明作者和本文連結

快樂就是解決一個又一個的問題!

相關文章