最近修改了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就是成功了。
然后切换别名就好了。