喬叔的 Elastic Stack 專業教育訓練
  • 喬叔的 Elastic Stack 專業教育訓練
  • 🧑關於喬叔 (Joe Wu)
  • Elastic 課程公開班
    • 🎯Elasticsearch 基礎實務班
      • 💯學員課後回饋
    • 🆕Elasticsearch 進階運維班
      • 💯學員課後回饋
    • Elasticsearch 進階開發班
    • Elastic Stack 基礎實務班
    • Elastic Observability 基礎實務班
    • 📩課程許願池
  • 技術分享
    • 📗喬叔帶你上手 Elastic Stack
      • 前言
      • Elastic Cloud 如何建立 Deployment
        • ES Node 的種類
        • 配置的選擇
      • Index 建立前你該知道的
        • ES Index 如何被建立
        • ES 的超前佈署 - Dynamic Mapping
        • ES 的超前佈署 - Index Template
        • ES Index 的別名 (Alias)
        • 管理你的 Index - Kibana Index
      • 管理 Index 的 Best Practices
        • Shard 的數量與 Rollover & Shrink API
        • 三溫暖架構 - Hot Warm Cold Architecture
        • Index Lifecycle Management (ILM)
        • Rollup
        • Transform
        • Snapshot Lifecycle Management (SLM)
        • 總結
      • Elastic Cloud 比免費版還多的功能
        • Elastic Stack 的方案比較與銷售方式
        • Centralized Beats Management
        • Centralized Pipeline Management
        • Watcher
        • Elasticsearch Token Service
        • Multi-stack monitoring & Automatic stack issue alerts
      • 向 App Search 學習怎麼用 Elasticsearch
        • 揭開 App Search 的面紗
        • Engine 的 Index Settings 篇
        • Engine 的 Mapping 篇
        • Engine 的 Search 基礎剖析篇
        • Engine 的 Search 進階剖析篇
      • Elasticsearch 的優化技巧
        • Indexing 索引效能優化
        • Searching 搜尋效能優化
        • Index 的儲存空間最佳化
        • Shard 的最佳化管理
      • 完賽心得
    • 📘喬叔帶你上手 Elastic Stack - 探索與實踐 Observability 系列
      • 前言 & 淺談 Observability
      • Elastic 的 Observability 解決方案
      • Uptime - 掌握系統的生命徵象
        • 我們要觀測的生命徵象是什麼?
        • 使用 Heartbeat 收集系統生命徵象數據
        • 透過 Kibana 觀看心電圖及設定警報
        • 使用合成監控 (Synthetics Monitor) 從使用者情境驗證服務的運作狀態
      • Metrics - 觀察系統的健康指標
        • Metrics 與 Metricbeat 的基本介紹
        • 使用 Metricbeat 掌握 Elastic Stack 的健康狀態
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Host 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Docker 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Kubernetes 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 AWS 篇
      • Logs - 挖掘系統內部發生的狀況
        • Logs 與 Filebeat 的基本介紹
        • 使用 Filebeat 應該要了解的設計細節與原理
        • 透過 Filebeat 收集 Elastic Stack 中各種服務的細節資訊
        • 透過 Filebeat 收集 Infrastructure 中各種服務的細節資訊
      • Traces - 觀察應用程式的效能瓶頸
        • Elastic APM 基本介紹
        • 使用 APM-Integratoin-Testing 建立 Elastic APM 的模擬環境
        • 如何在 Kibana 使用 APM UI
        • 使用 APM Server 來收集 APM 數據
        • 透過 APM Agents 收集並傳送後端服務運作的記錄
        • 透過真實使用者監控 (RUM, Real User Monitoring) 來改善使用者體驗
      • 建立結構化的 Log
        • Elastic Common Schema 結構化 Log 的規範
        • Elasticsearch Ingest Pipeline 資料 Index 前的轉換好幫手
          • 基本介紹
          • 各種常用的 Processor
          • Enrich 資料與例外處理
      • 有效的使用 Observability 的資料
        • 透過 Machine Learning 發現異常的問題
        • 使用 Kibana Alerts 主動通知異常狀況
        • 資料的生命週期管理
        • 使用 Elastic Observability 追縱及觀察問題的心得
      • 完賽心得
    • 😀Elasticsearch 技術分享小品
      • 🤖Elastic 與 AI
        • Elasticsearch Inference API 讓我們直接在 ES 裡運用 OpenAI Completion API
    • 🎥線上分享
      • 喬叔 Elasticsearch Index 管理與效能優化技巧
      • Elastic Certification 認證經驗分享
    • 🛠️workshop
      • 如何在 Elasticsearch 實現敏捷的資料建模與管理 @ DevOpsDays 2023
        • 工作坊實作內容
      • Elastic Observability 實作體驗坊 @ DevOpsDays 2022
        • 行前準備
        • 工作坊實作內容
      • 當 Elasticsearch 搜尋引擎遇上 AI @ HelloWordDevConference 2024
        • 投影片
        • Elasticsearch 環境準備
        • Google Colab 環境準備
        • 工作坊操作說明
        • ElasticSearch Relevance Engine (ESRE)
    • ⬆️Elastic Stack 版本升級記錄
      • 🔍Elasticsearch
  • 其他專業服務
    • 👩‍🎓企業包班 | 企業內訓
    • 👨‍💼顧問服務
    • 🈺專案合作
    • 🧩Elastic 授權代理
  • 相關連結
    • Facebook 粉絲頁
Powered by GitBook
On this page
  • 進入此章節的先備知識
  • 此章節的重點學習
  • Elasticsearch Index 的建立
  • Shard 分配決策者 (Allocation Deciders)
  • Primary Shard 初始化
  • Replica Initialization
  • 參考資料
  1. 技術分享
  2. 喬叔帶你上手 Elastic Stack
  3. Index 建立前你該知道的

ES Index 如何被建立

PreviousIndex 建立前你該知道的NextES 的超前佈署 - Dynamic Mapping

Last updated 2 years ago

進入此章節的先備知識

  • 初步了解 Elasticsearch 的 Cluster 與 Shards。

此章節的重點學習

  • Elasticsearch 的 Index 是如何被建立,在 Cluster 中是如何運作。


當我們建立好一個 Elastic Cloud 的 Deployment 之後,下一步就是要建立 Index,但是 Index 建立時的底層是如何運作的呢?

Elasticsearch Index 的建立

假設有一組擁有 4 個 Nodes 的 Elasticsearch Cluster:

  • index: a, shard: 2, replica: 1 (有 a0, a1 兩個深色的 primary shard, 另各有一份白底的 replica shard)

  • index: b, shard: 3, replica: 1 (有 b0, b1, b2 三個深色的 primary shard, 另各有一份白底的 replica shard)

es-node

當我們要建立一個新的 Index c 時,Elasticsearch 會執行以下幾個檢查的步驟:

Shard 分配決策者 (Allocation Deciders)

  1. 計算每個 node 身上的 shard 數量,盡可能的以數量來平均分配,決定新的 primary shard 要放在哪個 node 身上。

  2. 檢查是否有些 filter 條件,例如當 node 有宣告 hot/warm architecture 的 attribute 時,會過濾掉不應該被存放的 nodes,例如新的資料只能被放在有宣告 hot attribute 的 node 身上。

  1. 檢查磁碟空間是否充足,如果已達到 cluster.routing.allocation.disk.watermark.low 設定的水位,則不會將新的 shard 放在該 node 身上。

  1. 檢查是否有設定 Throttling,例如 indices.recovery.concurrent_small_file_streams 和 indices.recovery.concurrent_file_streams 的設置是否達到,而是否要暫緩目前 create index 的動作。

Primary Shard 初始化

若 Shard Allocation Decider 一切順利,將會進行 Primary Shard 的初始化:

  1. 在 Cluster 狀態中,標示這個 Index 的 Primary Shard 會被分派到哪個 node 身上,並標示狀態為 Initializing。

  2. 該 Index 存在的 node 收到動工的通知後,開始建立空白的 Lucene index,並且回報 Cluster master node 處理完成。

  3. Cluster master node 收到處理完成時,會將這個 shard 的狀態標示為 started,並且通知 cluster 中的大家這個狀態,而這個存在此 pirmary shard 的 node 也收到 master node 的通知時,就會將這個 shard 的狀態設定成 started,這時就能提供 indexing 的處理了。

Replica Initialization

當我們 Primary Shard 正常運作之後,Cluster 會檢查目前 replica 的設定是否滿足,若是有需要執行 replica 的複制則進行下列步驟:

  1. 決定 shard 應該放在哪一個 node 身上,通知這個 node 要做事,並且標示這個 shard 為 Initializing。

  2. 收到通知的 node 為此 shard 建立空白的 Lucene index。

  3. 一律從 primary shard 複制資料到 replica shard,並且在完成之後通知 master node。

  4. Master node 將這個 shard 的狀態改為 started,並且通知 cluster 中的大家。

  5. 收到 master node 通知時,存放 replica shard 的 node,將 shard 的狀態開啟提供服務。

到此階段,這個 Index 算是完成了被建立的這個流程,也開始能正常的提供服務了,下一步就是將要 indexing 進 Elasticsearch 的文件準備好吧!

參考資料

image-20200915024738494

📗
官方 Blog - Every shard deserves a home