文章目录
- 前言
- 一、es集群启动相关报错
- 二、索引只允许读操作,不允许其他操作
- 三、es报错UNASSIGNED,且集群状态为yellow
前言
整理部分生产环境中遇到的es集群问题及解决方案。
提示:以下是本篇文章正文内容,下面案例可供参考
一、es集群启动相关报错
1、错误提示:
/export/server/elasticsearch-6.8.13/plugins/plugins.zip/plugin-descriptor.properties: Not a directory
背景:
在启动es集群时,发现集群启动失败,经过查看es日志发现上述plugin-descriptor.properties不是一个目录的错误
解决方法:
移除/export/server/elasticsearch-6.8.13/plugins/下的plugins.zip这个重启即可。切记在es的plugins目录下不能存在类似.zip或.tar.gz、.tar等文件。
2、错误提示:
root用户启动es集群失败
背景:
在启动es集群时,未切换为创建的elasticsearch普通用户,采用root超管用户启动,结果失败。查看日志是不能以root身份启动集群
解决方法:
切换为自己部署es集群时创建的普通用户启动即可
二、索引只允许读操作,不允许其他操作
1、错误提示:
Caused by: org.springframework.data.elasticsearch.ElasticsearchException: Bulk indexing has failures. Use ElasticsearchException.getFailedDocuments() for detailed messages [{44499=ElasticsearchException[Elasticsearch exception [type=cluster_block_exception, reason=blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]]}]
背景:
在es磁盘达到告警后,对es集群三台服务器的磁盘进行了扩容,在扩容完成后,重新启动es集群,对某个索引执行相关的操作命令时报上述错误。
解决方法:
执行以下查看命令
curl -XGET http://ip:9200/_settings
找到以下部分
blocks:{
read_only_allow_delete:true
}
true:代表只读
false:代表正常所有 权限
执行下方的解决此问题的命令: 及关闭只读由true改为false
curl -XPUT -H "Content-Type: application/json" http://127.0.0.1:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": false}'
三、es报错UNASSIGNED,且集群状态为yellow
1、错误提示:
"cannot allocate because a previous copy of the primary shard existed but can no longer be found on the nodes"
背景:
在查看es集群健康状态时,集群的状态为yellow,且出现了不能分配的副本数量
curl http://ip:9200/_cat/health
返回的结果中unassigned_shards这一项不为0.
解决方法:
查看es集群节点数是否正常
curl http://ip:9200/_cat/nodes?V
检查全部索引的主分片的副本数是不是大于了节点数(即副本数量分配是否合理) #在集群中,要确保主分片的副本数+1要少于或等于集群节点数。如果大于则会导致集群状态不正常。
curl http://ip:9200/_cat/allocation?v
查看出现unassigned的原因 #这时候就考虑是分片未合理规划的原因
curl http://ip:9200/_cluster/allocation/explain
查看索引的分片规划
curl http://ip:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason
unidom_prewarn_data 1 r STARTED
unidom_prewarn_data 1 r STARTED
unidom_prewarn_data 1 p STARTED
unidom_prewarn_data 1 r UNASSIGNED INDEX_CREATED
unidom_prewarn_data 2 r STARTED
unidom_prewarn_data 2 p STARTED
unidom_prewarn_data 2 r STARTED
unidom_prewarn_data 2 r UNASSIGNED INDEX_CREATED
unidom_prewarn_data 0 r STARTED
unidom_prewarn_data 0 p STARTED
unidom_prewarn_data 0 r STARTED
unidom_prewarn_data 0 r UNASSIGNED INDEX_CREATED
分析:
以上的0,1,2代表节点的编号,很清楚的能看到每个节点,一个p(主分片),3个r(副本分片),然后有一个副本分片不能分配
备注:
1、当副本数大于数据节点数时,那么每个分片只能最多有(节点数量-1)个副本,无法分配的副本数则为主分片数*(副本数-(节点数-1)).假设节点数为3,主分片数为1,副本数为3,那么无法分配的副本数则为:1*(3-(3-1))=1。那么此时只需要重新设置索引副本分片数即可
2、总shard数是节点的整数倍
重新分配unassigned分片
curl -XPUT 'http://ip:9200/unidom_suggest_data(有unassigned的分片)/_settings' -H 'Content-Type: application/json' -d '{ "number_of_replicas": 2(修改分片数)}' #这个数通过上述备注计算即可 上述计算出有一个无法分配,那么在此前分片的基础上再减去那一个分片即可。即为2