背景
公司里面现在有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 命令查询旧的索引既可。