Elasticsearch 在現在公司玩了一陣子,也升級過幾次大概有一些心得可以分享,這篇專注在 7.x 版本 (寫文章當下的版本是 7.7)
一開始先提 Elasticsearch 升級時必須注意的事項:
- Release Notes:如果跳很多版本或者是懶得看,至少也得關注一下 Core、Deprecations 之類更新訊息。
- 版本更新對應表:確認你現在的版本是否能一次升到最新,或者是必須階段性升級
- 舉例:5.x -> 7.7 或是 5.x -> 6.x -> 7.7
- Rolling-upgrade:這是 Elasticsearch 一貫的升級方式,一台一台更新是最安全的方式,千萬不要一次就把整個 Cluster 攏乎系 …
- Reindex:最重要的一塊,Elasticsearch 升級前一定要看的 Reindex,最痛苦的不外乎 index 可能要重 Build index …
- 以現在的 7.x 版本來講,如果有 5.x 版本的 index 最少要先升級到 6.x 版本的 index。
大前提說完之後,來聊一下 Elasticsearch 7.x 會遇到的幾個重大更新:
介面與功能大曜進
Elasticsearch 7.x 之後把整個使用者體驗的介面全換新了,還加上 Dark mode 簡述一個字「潮」,官方更稱 7.0 版本是歷經 10,000 個 PR 來了
支援多叢集查詢
單一叢集在這個時代已經不夠用了,多叢集整合的概念在許多 Framework 漸漸實現,像是 kubefed (Kubernetes federation v2) 這種大型服務
而 Elasticsearch 也跨出了這一步讓 Search across clusters 實現意味著不需要再把所有資料放在同一個叢集,整天擔心受怕這個 Cluster 會不會杯具,從更遠來看跨地域、跨平台,不同叢集實作不同的功能,讓整個 Elasticsearch 架構更加龐大,X-Pack 也趁機推出 CCR (cross-cluster replication) 來賣錢。
Multiple Cluster 的概念把重要核心拉到更高層級,進而延伸出 Remote Cluster 的方式 :
- Sniff mode:sniff mode 必須要選擇 Gateway Node 的議題
- Proxy mode
Discovery
Zen Discovery 切分 Dev/Production mode,參考 development vs. production mode 設定上有以下差異:
- 單台 elasticsearch (Single-mode) 要指定
single-node
:
discovery.type: single-node
- n + 1 以上的 Elasticsearch 要指定
initial_master_nodes
cluster.initial_master_nodes:
- master-node-a
- master-node-b
- master-node-c
移除 mapping type 改用 Index per document type
在 remove-of-types 提到從 Elasticsearch 7.x 開始不再支援 mapping type 並且建議改用 Index per document type
每個 node 最多 1000 個 shards
原本只有在文件中建議一個 node 最多 1000 個以下的 shards,現在乾脆直接預設不能超過 1000 shards
但是官方提供的 cluster.max_shards_per_node 有一些問題,詳細可以參考「Elasticsearch 7.x node 開放 1000 個 shards 限制」