最近修改了ElasticSearch分詞。並reindex索引。
使用的分詞插件是Hanlp
修改完分詞之後將對應的bin文件上傳到服務,並替換對應的bin文件
服務器Es對應的路徑elasticsearch/plugins/analysis-hanlp/data/dictionary/
替換完成之後(我使用的Es是3個節點,都要替換),就要重啓節點了。
重啓節點的安全流程:
1: 關閉集羣分片的自動分配
PUT _cluster/settings
{"persistent":{"cluster":{"routing":{"allocation.enable":"none"}}}}.
2: 確認關閉後,重啓節點
3: 節點重啓成功後,打開集羣分片的自動分配
PUT _cluster/settings
{"persistent":{"cluster":{"routing":{"allocation.enable":"all"}}}}.
注意: 在重啓Es節點的時候一定要使用安全的流程,博主就是沒有關閉Es分片自動分配就重啓節點,正好趕上Es寫入數據,造成了生產索引長時間的分片Unsigned,索引status一直是黃色的。。就像這樣
記錄一下查看索引狀態的相關命令吧
查看分片狀態GET IP:9200/_cat/shards?v 可以看到紅框對應的分片就是沒有被分配的
查看集羣健康GET IP:9200_cat/health?v 注意:正常情況下active_shards_percent 這個字段應該是100.0%
查看Unsigned的日誌(這個有助於我們解決問題,沒有分片Unsigned就不需要使用)GET IP:9200/_cluster/allocation/explain
索引狀態爲Yellow持續了兩天,lz受不了了因爲還要reindex,切換別名。
博主發現沒有被分配的分片都在節點node-2上面,於是重啓了node-2的節點,結果不是很理想。
最後博主使用命令 POST _cluster/reroute?retry_failed=true
使用這個命令後可以看到分片一點點的在被分配
Reindex之前要先創建索引,可以先創建一個副本數量爲0的索引,這樣可以提高Reindex的效率,在Reindex之後可以再把副本數量改爲需要的數量。
PUT index/_settings
{
"number_of_replicas":"2"
}
在Reindex好了之後,可以根據需要進行Merge啦,這樣操作可以提高查詢索引的速度。
GET index/_segments可以看到segments的數量
Merge之前是
使用此命令可以將對應索引執行merge IP:9200/index/_forcemerge?max_num_segments=1
請求成功後可以發現,數據佔用空間會一點點變大
可以使用kibana觀察對應索引 Total 和 Primaries 空間大小
在merge之後,他們的大小會恢復到之前,同時查看_segments 可以看到num_search_segments : 1就是成功了。
然後切換別名就好了。