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