天天看點

Elasticsearch 叢集更換節點角色有了更快的方式

2、問題解讀

抛開節點配置、叢集部署層面的問題。

問題轉化為:主節點&資料節點角色的節點如何轉化為僅主節點?

3、模拟一把

3.1 構模組化拟環境

模拟環境:4核、8GB 雲伺服器,Elasticsearch 7.12.0 版本 四節點。

node-022:主節點&資料節點

node-023:僅資料節點

node-024:僅資料節點

node-025:僅資料節點

叢集部署完成未導入任何資料截圖如下:

Elasticsearch 叢集更換節點角色有了更快的方式

3.2 構造資料

基于 kibana 樣例資料(kibana_sample_data_ecommerce)建構索引。

新索引 kibana_sample_data_ecommerce_02

主分片數:48

副本分片數:1

Mapping 和資料:

同 kibana_sample_data_ecommerce 保持一緻。

索引資料遷移基于 reindex 實作。

POST _reindex

{

 "source": {

   "index": "kibana_sample_data_ecommerce"

 },

 "dest": {

   "index": "kibana_sample_data_ecommerce_02"

 }

}

資料構造完畢後,截圖如下:

Elasticsearch 叢集更換節點角色有了更快的方式

.3 節點角色變化實戰

這裡有個前提:能不能不停機轉換節點角色?

看我們開篇的節點角色劃分是沒戲了。僅一個主節點,且更換角色的節點也是主節點。

3.3.1 步驟 1:将主節點&資料節點  node-022 的屬性改為僅主節點。

修改 elasticsearch.yml 的節點屬性配置部分,如下:

node.master: true

node.data: false

3.3.2 步驟 2:下線 主節點&資料節點 node-022。

kill 掉對應的 elasticsearch 程序即可。

3.3.3 步驟 3:重新啟動 主節點&資料節點 node-022。

啟動主節點後,報錯如下:

Elasticsearch 叢集更換節點角色有了更快的方式

What?elasticsearch-node repurpose 是什麼鬼?

3.3.4 步驟 4:執行 elasticsearch-node repurpose 實作角色轉換前處理工作。

bash-4.2$ ./bin/elasticsearch-node repurpose

   WARNING: Elasticsearch MUST be stopped before running this tool.

... ...

Found 29 shards in 6 indices to clean up

Use -v to see list of paths and indices affected

Node is being re-purposed as master and no-data. Clean-up of shard data will be performed.

Do you want to proceed?

Confirm [y/N] y

Node successfully repurposed to master and no-data

Elasticsearch 叢集更換節點角色有了更快的方式

以上指令及傳回結果解讀如下:

(1)執行 elasticsearch-node repurpose 的前置條件是:目前節點已被停用。

(2)節點角色轉換為僅主節點(确切的說是:候選主節點)。

(3)當輸入 y 确認後,清理了 6 個索引(含 29 個分片)的資料。

3.3.5 步驟5:再次啟動主節點 node-022

這時候,節點能正常啟動。

同時,其餘節點會再建立與主節點 node-022 的連接配接。

節點分片會被重新配置設定,本質是:原有主節點上關聯的副本分片提升為主分片,主分片再重新生成對應的副本分片。

Elasticsearch 叢集更換節點角色有了更快的方式

檢視下主節點角色,如下  node-022 變成了:僅主節點角色,已沒有資料節點角色。

Elasticsearch 叢集更換節點角色有了更快的方式

至此,主節點&資料節點變成了僅主節點。

3.3.6 角色變換小結

第一:僅需要下線主節點,其他節點可以保持原有狀态,無需下線。

第二:需要借助:elasticsearch-node repurpose 實作角色轉換。

4 elasticsearch-node repurpose 原理

4.1 elasticsearch-node 上線版本

7.0.0 版本,也就意味着:7.0 之前的版本不具備該功能。

https://github.com/elastic/elasticsearch/pull/37979

4.2 elasticsearch-node repurpose 全局視角

Elasticsearch 叢集更換節點角色有了更快的方式

4.3 elasticsearch-node 工具作用

以下是官方文檔翻譯:

可以在節點關閉時對它們執行某些不安全的操作。通過此指令可以調整節點的角色,不安全地編輯叢集設定,并且即使災難(disaster,叢集異常)與磁盤上的資料不相容,也可以在災難(disaster)後恢複某些資料或啟動節點。

https://www.elastic.co/guide/en/elasticsearch/reference/current/node-tool.html

4.4 elasticsearch-node 工具用法

能實作的功能有很多,支援的參數也有好幾個,諸如:

repurpose

remove-settings

remove-customs

unsafe-bootstrap

detach-cluster

override-version

篇幅原因,建議直接參看官方文檔。

我們契合本文主題,隻講解一下更換角色指令的使用。

4.5 elasticsearch-node repurpose 用法詳解

elasticsearch-node repurpose 的作用:如果節點曾經是資料節點或候選主機節點,但已被重新設計為不具有其中一個角色或改為其他角色,則可用于從節點中删除不需要的資料。

核心用途一句話概括:更改節點角色、删除不必要的資料。

使用該指令的核心四個步驟:

步驟 1:停止需要更換角色的節點。

步驟 2:通過 elasticsearch.yml 更新節點角色。

步驟 3:執行 elasticsearch-node repurpose。

步驟 4:重新啟動節點。

文中 3.3 節的實作就是用的這四個步驟。

提示:

1、要删除索引資料,是以會有互動提示,輸入“y“代表确認删除。

2、會保留 meta 中繼資料資訊,確定叢集可用。

5、小結

類似問題,廣靠猜沒有用,實際操作一把,會發現“新大陸”。

之前我也不知道,7.X 版本的這個 elasticsearch-node 指令行工具非常人性化。

涉及到更換叢集節點角色的場景,不妨一試!

歡迎留言交流。

繼續閱讀