Elasticsearch術語與部署架構梳理
一、基本概念與術語
Document: 是es搜索的最小單位,被序列化成json對象存入es。
- 文檔類比關系數據庫一條記錄
- 每個文檔有一個唯一的ID,類比關系數據庫主鍵ID
- json對象由filed構成,filed類比關系數據庫column
Index: 索引是文檔的容器,一類文檔的集合,存儲在分片Shard上。
- 索引類比關系數據庫的表
- 索引的Mapping定義文檔字段類型,類比關系數據庫的schema
- 索引的Setting定義數據在分片上的分布
節點: ES實例的java進程,節點名稱在啟動時通過 -Enode.name指定,每個節點存儲集群狀態信息。
- 集群狀態包括:所有節點信息、所有的索引及Mapping和Setting信息、分片路由信息
- 只有master節點可以修改集群狀態信息
- Data Node:保存分片數據的節點
- Coordinating Node:負責接受客戶端請求并將請求轉發到合適的節點,并負責匯總結果;默認情況下每個節點都會啟到Coordinating Node的職責
- Hot&Warm Node:由不同配置的Data Node組成,主要為了降低成本,Hot節點使用高配置,Warm節點使用低配置
主分片: 在創建索引時指定主分片,解決數據水平擴容問題。
- 類比kafka的分區,一個分片運行的Lucene的實例
- 在創建索引的時候指定,之后修改需要Reindex
- 分片數與節點數相關,分片數過少影響節點擴容,分片數過多影響查詢性能
- 多分片分擔寫壓力,當分片數 > 節點數,新節點加入分片會自動分配
- 分片過多會導致潛在性能,查詢需要從多個分片上檢索數據,比如:集群總分片控制幾萬內
- 日志單個分片數據存儲大小50G內,搜索類單個分片存儲20G內,降低merge/rebalancing耗損資源
副本: 主分片的備份,解決數據高可用問題。
- 類比kafka的副本,副本分片可以動態調整
- 增加副本數除了解決高可用外,可以提高讀取性能,同時增加存儲成本
二、節點角色與集群狀態
1.節點角色
Node官方文檔:
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/modules-node.html
Elasticsearch7.9通過node.roles配置節點角色,在配置文件elasticsearch.yml設置
角色選項 | 說明 |
master | node.roles: [ master ]:擁有選舉權和被選舉權 |
master, voting_only | node.roles: [ master, voting_only ]:只有選舉權沒有被選舉權 |
data | node.roles: [ data ]:處理與數據相關的操作CRUD、搜索、聚合 |
data_content | node.roles: [ data_content ]:冷熱分層架構,通用節點,CRUD、搜索、聚合 |
data_hot | node.roles: [ data_hot ]:冷熱分層架構,hot節點承擔快速讀寫操作,可以配置為SSD盤 |
data_warm | node.roles: [ data_warm ]:冷熱分層架構,warm節點索引不定期更新,查詢頻率比熱節點低,配置低于熱節點 |
data_cold | node.roles: [ data_cold ]:冷熱分層架構,cold節點只存只讀索引,低配置節點 |
ingest | node.roles: [ ingest ]:ingest節點用于對寫入和查詢的數據進行預處理 |
Coordinating only node | node.roles: [ ]:協調節點不承擔master職責、不保存數據、不預處理;負責接受請求、分發請求、匯總結果 |
備注:生產環境建議一個節點設置單一角色,有利于更好的性能和根據角色定制化配置。
2.集群狀態
衡量集群健康與否的三種狀態:
- Green:主分片與副本正常分配
- Yellow:主分片全部正常分配,有副本分片未正常分配
- Red:有主分片未能正常分配
查看集群狀況:
官方API文檔:
// index API
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/indices.html
// Get index API
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/indices-get-index.html
// cat API
https://www.elastic.co/guide/en/elasticsearch/reference/8.1/cat.html
查詢document總數:
三、常用集群部署架構
1.各角色配置
生產環境架構中每個節點配置單一職責,具體為Master、Data、Ingest、Coordinate的一個,有利于每個角色可以使用不同的機器配置。
- Master 負責集群狀態信息管理
生產環境通常配置3臺
低配置(低CPU核數、小內存、低磁盤)
- Data節點負責處理與數據相關的操作
高配置(高CPU核數、大內存、SSD盤)
- Ingest節點負責寫入和查詢的數據進行預處理
中配置(高CPU核數、中內存、低磁盤)
- Coordinate節點,通常在es大集群中配置,降低Master和Data Nodes的負載,負責接受請求、分發請求、匯總結果
- 應對客戶的未知查詢請求,深度聚合可能導致OOM
- 中高配置(中高CPU核數、中高內存、低磁盤)
2.集群部署架構
2.1 水平擴展
備注:集群中存在大量復雜的查詢時,通過增加協作節點提升查詢性能。
2.2 讀寫分離
備注:通過配置不同的讀寫負載均衡,分離讀寫請求,讀請求路由到協作節點,寫請求路由到Ingest節點,協作節點和Ingest節點可以水平擴展。
2.3 冷熱分離
備注:冷熱分離架構,Hot節點通過高配置承擔更多的讀寫壓力,冷節點承擔一定的讀請求,常見于日志類使用場景。
2.4 混合部署
備注:ES集群由data節點和master節點構成,常見于非生產環境以及線上讀寫均無壓力的場景。