Pages - Menu

2022年2月17日 星期四

[ECK] Elastic Search基本概念篇

前言

看EFK相關文章時,常被許多名詞搞混。
之前還把shard當成類似是 RDBMD裡面的DB,
之後才發現搞錯了,根本不是那麼一回事

正文

先來個比較容易對比的表格,但不完全一樣,
有幾個是我自己加上去的。

RDBMS Elasticsearch
VM Node
Table Index
Row Document
Column Field
Schema Mapping
SQL DSL

ref. [Elasticsearch] 基本概念 & 搜尋入門

摘要

Node

  • Master Node

    • 處理建立/刪除 index 的 request,並實際執行
    • 決定每個 shard 要被分配到哪個 data node 上
    • 維護 & 更新 cluster state
    • 當 master node出問題,master eligible node(從cluster設定多個)會開始選舉,選出下一個 master node
  • Coordinating Node(協調節點)

    • 所有node預設都是 Coordinating Node
    • 處理request的node 以及 最後進行結果的彙整
    • coordinating node 可以直接接收 search request 並處理,不需要透過 master node 轉過來
  • Data Node

    • 可以保存資料的 node,每個 node 啟動後都會預設是 data node,可以透過設定 node.data: false 停用 data node 功能
    • 透過增加 data node 可以解決資料水平擴展 & 解決單點故障導致資料遺失的問題
  • Cluster State(集群狀態)

    • 包含所有node資訊
    • 包含所有index 及 相對應的 mapping/setting配置
    • shard的路由資訊
    • 每個node上都有Cluster State,只有master 可修改

Shard

將索引劃分成多份的能力,這些份就叫做分片(shard)
  • shard 是 ES分散式儲存的基礎,包含 primary shard 及 replica shard

  • 每一個shard 就是一個 Lucene instance(用於全文檢索和搜尋 e.g. Solr,Elasticsearch…)

  • Primary Shard(提升系統儲存容量)

    • 將一份被索引後的資料,分散到多個data node上存放
    • primary shard 的數量在建立 index時就會指定,無法後續修改
  • Replica Shard(提高資料可用性)

    • 當primary shard遺失,Replica shard可以被推成 primary shard
    • replica shard數量可動態調整,讓每個data node上都有完整資料
    • 可一定程度提高查詢的效能
    • ES7.0開始,primary shard 預設為1 ,replica shard預設 為0

    如不設定replica shard,一旦data node 故障導致 primary shard遺失,資料無法復原

  • Shard設定

    • replica shard設定過多,會降低clsuter整體的寫入效能

    • replica shard 必須和 primary shard 被分配在不同的 data node 上;但所有的 primary shard 可以在同一個 data node 上

Command

  • 取得Cluster 健康狀態

        GET _cluster/health/
    

    Status
    - Green :表示 Primary shard & Replica Shard可正常分配
    - Yellow:表示 Primay shard可正常分配,但Replica shard 分配有問題
    - Red:有Primary shard 無法正常分配

  • 取得 Shard狀態

        GET _cat/shards
    


p :代表 primary shard
r :代表 replica shard

  1. shard的分佈情形,在哪個node上
  2. 每個shard包含的document數量 & 空間

情境

  1. 如果cluster 只有一個node ,全部會被 primary shard佔據,導致 replica shard 無法被分配,因此cluster健康狀態為 yellow

資料寫入

  • cache

    • 資料寫入後無法變動,避免lock機制所帶來的效能問題
    • 因不可變動,若要讓新的document 可被搜尋,需要重建index
    • 寫入document前,會先寫到 Index Buffer的儲存空間
    • 滿足條件(Index Buffer佔滿) or 特定時間(預設一秒一次),會將 Buffer 寫入 Segment 。寫入的過程叫Refresh。
  • transaction log

    • 每個shard都有對應的transaction log
    • 寫入document的時候,同時也會寫入 transaction log

ref.

沒有留言:

張貼留言