背景
公司裏面現在有es集羣,由於時間過長,es集羣中的某個索引過大但是未刪除,一直在寫入的情況下,昨天寫入突然停止了,發現是索引超時的問題,這時想到通過創建一個新的索引來進行索引切換
操作
es 集羣中舊索引的名稱爲testlogs,準備新建一個索引userlogs5,通過別名進行切換,前提是數據是通過別名來進行寫入索引的,如果沒有別名需要提前創建。
具體操作步驟如下:
- 查看當前別名對應的索引
curl -s -X GET "http://localhost:9200/_cat/aliases"
userlogs_alias testlogs - - - -
現在需要新建一個userlogs5,替換掉testlogs ,因爲testlogs 索引過大,導致讀取速度慢
- 新建userlogs5 索引
curl -s -X PUT "http://localhost:9200/testlogs?pretty" -H 'Content-Type: application/json' -d '{
"settings": {
"index.number_of_shards": 10,
"index.number_of_replicas": 1
}
}'
- 查詢新建的userlogs5 的 索引和分片
curl -s -X GET "http://localhost:9200/_cat/indices?v" |grep userlogs5
curl -s -X GET "http://localhost:9200/_cat/shards?v" |grep userlogs5
- 給userlogs5 添加上索引別名
curl -s -X PUT "http://localhost:9200/testlogs/_alias/userlogs_alias"
curl -s -X GET "http://localhost:9200/_cat/aliases"
這裏會有兩個索引對應userlogs_alias, 分別是舊索引和上面新建的索引
- 刪除舊索引的別名,讓別名只對應新的索引,完成索引切換
curl -s -X DELETE "http://localhost:9200/testlogs/_alias/userlogs_alias"
- 查詢新索引狀態是否正常,是否可以寫入數據既可
curl -s -X GET "http://localhost:9200/_cat/indices?v" |grep userlogs5
curl -s -X GET "http://localhost:9200/_cat/shards?v" |grep userlogs5
- 以上就完成了索引切換的過程
總結
索引切換完成之後,數據會通過新的索引寫入,不會影響正常數據,後面如果需要查詢索引,可以使用curl 命令查詢舊的索引既可。