2、問題解讀
抛開節點配置、叢集部署層面的問題。
問題轉化為:主節點&資料節點角色的節點如何轉化為僅主節點?
3、模拟一把
3.1 構模組化拟環境
模拟環境:4核、8GB 雲伺服器,Elasticsearch 7.12.0 版本 四節點。
node-022:主節點&資料節點
node-023:僅資料節點
node-024:僅資料節點
node-025:僅資料節點
叢集部署完成未導入任何資料截圖如下:
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"
}
}
資料構造完畢後,截圖如下:
.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。
啟動主節點後,報錯如下:
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
以上指令及傳回結果解讀如下:
(1)執行 elasticsearch-node repurpose 的前置條件是:目前節點已被停用。
(2)節點角色轉換為僅主節點(确切的說是:候選主節點)。
(3)當輸入 y 确認後,清理了 6 個索引(含 29 個分片)的資料。
3.3.5 步驟5:再次啟動主節點 node-022
這時候,節點能正常啟動。
同時,其餘節點會再建立與主節點 node-022 的連接配接。
節點分片會被重新配置設定,本質是:原有主節點上關聯的副本分片提升為主分片,主分片再重新生成對應的副本分片。
檢視下主節點角色,如下 node-022 變成了:僅主節點角色,已沒有資料節點角色。
至此,主節點&資料節點變成了僅主節點。
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/379794.2 elasticsearch-node repurpose 全局視角
4.3 elasticsearch-node 工具作用
以下是官方文檔翻譯:
可以在節點關閉時對它們執行某些不安全的操作。通過此指令可以調整節點的角色,不安全地編輯叢集設定,并且即使災難(disaster,叢集異常)與磁盤上的資料不相容,也可以在災難(disaster)後恢複某些資料或啟動節點。
https://www.elastic.co/guide/en/elasticsearch/reference/current/node-tool.html4.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 指令行工具非常人性化。
涉及到更換叢集節點角色的場景,不妨一試!
歡迎留言交流。