對官方文件Node的閱讀筆記。
ES叢集由一個或者多個ES節點組成。
ES叢集中的節點,支援處理兩類通訊平面,見文件
- 叢集內節點之間的通訊,官方文件稱之為transport layer。
- 叢集外的通訊,處理客戶端下發的請求,比如資料的CRUD,檢索等,官方文件稱之為HTTP layer。
透過叢集內節點的通訊,節點可以獲取到叢集內所有節點的資訊,比如通訊地址、健康狀態、承載的索引和shard等資訊。
當叢集中某節點處理客戶端下發的請求時,可以將業務請求轉發至資料相關的節點,處理業務請求。
接收到客戶端下發的請求的節點,依據官方文件,可以稱之為接入節點或者the coordinating node。預設情況下,叢集中所有的節點都可以接入客戶端的業務,因此都具備接入節點的角色。
作為接入節點,處理業務請求的過程可以劃分為如下階段:
- 轉發階段即scatter phase
- 接入節點分析業務請求,獲取索引和shard的歸屬節點。
- 接入節點將請求轉發至歸屬節點。
- 歸屬節點處理請求,將處理結果返回至接入節點。
- 收集階段即gather phase
- 接入節點處理各歸屬節點返回的資料。
- 接入節點將資料組裝為最終的結果。
- 接入節點將結果返回客戶端。
因此,作為接入節點,需要具備足夠的硬體資源,比如CPU、記憶體等,否則無法正常處理各歸屬節點返回的資料。
ES節點,簡單而言,可以理解為ES程序,比如一臺主機上執行一個ES程序,或者在一臺物理主機上,執行多個ES程序。對於前述ES程序,均可以理解為不同的ES節點。
在ES叢集中,存在多種角色或者職責,因此從分工或者職責唯一的角度,可以為節點指定其角色,限定其職責,專業化分工,提升叢集的可用性。
ES叢集中,通常包含如下角色:
- master
- data
- data_content
- data_hot
- data_warm
- data_cold
- data_frozen
- ingest
- ml
- remote_cluster_client
- transform
在ES的配置檔案elasticsearch.yml
中增加配置項node.roles
,可以指定該節點的角色。配置樣例,如下:
node.roles: [ master ]
對於專職的接入節點,可以做如下配置:
node.roles: [ ]
資料的生命週期、訪問頻率、重要性、訪問資料時的時延、儲存成本等存在差異,比如
- 從生命週期角度講
- 有些資料需要長期保留。
- 有些資料可能使用完畢後即可刪除。
- 從訪問頻率角度講
- 有些資料會被經常訪問。
- 有些資料可能經歷一段時間的高頻訪問之後,訪問頻率逐步下降。
- 有些資料可能初期的訪問頻率不高,但在某些場景下,訪問頻率可能會突然上升,然後再次下降。
- 有些資料可能保持低頻訪問。
- 有些資料可能基本沒有訪問,比如歸檔資料、備份資料。
- 從重要性角度講
- 有些資料是關鍵資料,需要長期保留,不允許丟失,假如丟失,則需要具備恢復手段。
- 有些資料雖然重要,但丟失之後重新獲取的成本比較低。
- 有些資料則可有可無,丟失也不影響最終結果。
- 從訪問時延角度講
- 應用場景為高頻寬、高時延,比如大資料業務。
- 應用場景為低時延、高OPS,比如檢索業務。
- 從儲存成本角度講,按照儲存介質來劃分
- 磁帶,訪問時延大、儲存成本低,適用於資料量大,長期歸檔,訪問頻率極低的資料。
- HDD盤,訪問時延相對低一些,儲存成本相對高一些,儲存容量小,適用於歸檔、備份,訪問頻率一般的資料。
- SSD盤,訪問時延低,支援的OPS高,儲存成本更高,儲存容量低,適用於資料量相對不大,但訪問頻率相對要高一些的資料。
- 記憶體,訪問時延極低,成本更高,儲存容量更低,適用於資料量很小,但訪問頻率極高的資料。
基於資料的差異,ES提供瞭如下角色的選項:
- data_content,適用於高頻檢索的資料,ES針對這個角色,提供了必要的最佳化。
- data_hot,適用於熱資料,可以配置比較好的硬體、支撐高速訪問的儲存介質,儲存訪問頻率高的資料。
- data_warm,適用於溫資料,硬體、介質可以選擇成本低一點,儲存訪問頻率相對沒有那麼高的資料。
- data_cold,適用於冷資料,硬體、介質可以選擇相對更低一點,儲存訪問頻率比較低的資料。
- data_frozen,適用於極冷資料,選擇容量大,成本低的硬體和介質,儲存訪問頻率非常低的資料。
假如很難從業務場景區分資料的差異,則可以直接使用角色data
。
參考資料
- Configuring Elasticsearch
- Important Elasticsearch configuration
- Networking