利用别名切换索引流程Elasticsearch 7.7

背景

公司里面现在有es集群,由于时间过长,es集群中的某个索引过大但是未删除,一直在写入的情况下,昨天写入突然停止了,发现是索引超时的问题,这时想到通过创建一个新的索引来进行索引切换

操作

es 集群中旧索引的名称为testlogs,准备新建一个索引userlogs5,通过别名进行切换,前提是数据是通过别名来进行写入索引的,如果没有别名需要提前创建。

具体操作步骤如下:

  1. 查看当前别名对应的索引
curl -s -X GET "http://localhost:9200/_cat/aliases"
userlogs_alias testlogs - - - -

现在需要新建一个userlogs5,替换掉testlogs ,因为testlogs 索引过大,导致读取速度慢

  1. 新建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
    }
  }'

  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 

  1. 给userlogs5 添加上索引别名

curl -s -X PUT "http://localhost:9200/testlogs/_alias/userlogs_alias"

curl -s -X GET "http://localhost:9200/_cat/aliases"

这里会有两个索引对应userlogs_alias, 分别是旧索引和上面新建的索引

  1. 删除旧索引的别名,让别名只对应新的索引,完成索引切换
curl -s -X DELETE "http://localhost:9200/testlogs/_alias/userlogs_alias"


  1. 查询新索引状态是否正常,是否可以写入数据既可
curl -s -X GET "http://localhost:9200/_cat/indices?v" |grep userlogs5
curl -s -X GET "http://localhost:9200/_cat/shards?v" |grep userlogs5 

  1. 以上就完成了索引切换的过程

总结

索引切换完成之后,数据会通过新的索引写入,不会影响正常数据,后面如果需要查询索引,可以使用curl 命令查询旧的索引既可。

原文地址:https://www.cnblogs.com/Serverlessops/p/13692795.html