ElasticSearch 操作异常总结
1. Index 写入数据 FORBIDDEN 问题
1.1 问题描述
在使用七牛云的 Logkit 往 ElasticSearch 发送数据的时候出现了以下异常信息;
1 | # SendError: bulk failed with last error |
其核心异常提示是:[FORBIDDEN/12/index read-only / allow delete (api)]
1.2 原因分析
从字面意思看,ES 禁止数据写入;
联想到最近服务器发生的一系列问题,一切都能解释的通了;
最近发现:ES 集群的一个节点挂了(主要是因为服务器的磁盘坏了);
在这样的情况下,触发了 ES 的保护机制,因此出现了上面的情况;
1.3 解决方法
1 | curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}' |
参考链接:[如何修复 ElasticSearch FORBIDDEN/12/index read-only / allow delete (api)] – TechOverflow
2. ElasticSearch 启动参数问题
通过 docker 启动 es 的时候,相关参数设置跟 es 的镜像版本有关;
这里主要说明常见的各种 es 设置问题
2.1 unknown setting [discovery.seed_hosts]
产生背景
使用2019年的老脚本启动 es 的 docker 实例;
注:笔者是 2021.12.15 pull 最新的 es 镜像启动实例的,启动实例使用的参数是 2019 年底时的;
原因
2019 年底的 es 镜像和 2021 年的镜像文件参数设置不一致,
可以通过 dock inspect elasticsearch 查看
解决方法
使用下面的配置替代
1 | discovery.zen.ping.unicast.hosts: ["192.168.10.11:9300","192.168.10.12:9300","192.168.10.13:9300"] |
注意:启动脚本,最好跟 docker 镜像配套使用
类似的问题
unknown setting [cluster.initial_master_nodes]
2.2 ES 缓存设置
默认设置:ES_JAVA_OPTS=”-Xms256m -Xmx256m”
启动的时候可以加 -e 指定参数
1 | -e ES_JAVA_OPTS="-Xms1g -Xmx1g" |
设置过大可能导致本机缓存不够,启动时有如下错误提示:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:修改 centos 系统的缓存设置
1 | 1. open and edit conf |
3. ElasticSearch 集群状态排查
Elasticsearch 集群故障排查及修复指南_铭毅天下(公众号同名)-CSDN博客
4. ES 索引 primary shard is unassigned 解决方法
1 | POST /_cluster/reroute |
ES 遇到 unassigned shard如何处理?_weixin_34050519的博客-CSDN博客
解决elasticsearch分片unassigned的3个方法_dlm_bk的博客-CSDN博客_es分片unassigned