所谓脑裂问题(类似于精神分裂),就是同一个集群中的不同节点,对于集群的状态有了不一样的理解。
今天,Elasticsearch集群出现了查询极端缓慢的情况,通过以下命令查看集群状态:
curl -XGET 'es-1:9200/_cluster/health'
发现,集群的总体状态是red,本来9个节点的集群,在结果中只显示了4个;但是,将请求发向不同的节点之后,我却发现即使是总体状态是red的,但是可用的节点数量却不一致。
正常情况下,集群中的所有的节点,应该对集群中master的选择是一致的,这样获得的状态信息也应该是一致的,不一致的状态信息,说明不同的节点对master节点的选择出现了异常——也就是所谓的脑裂问题。这样的脑裂状态直接让节点失去了集群的正确状态,导致集群不能正常工作。
可能导致的原因:
1. 网络:由于是内网通信,网络通信问题造成某些节点认为master死掉,而另选master的可能性较小;进而检查Ganglia集群监控,也没有发现异常的内网流量,故此原因可以排除。
2. 节点负载:由于master节点与data节点都是混合在一起的,所以当工作节点的负载较大(确实也较大)时,导致对应的ES实例停止响应,而这台服务器如果正充当着master节点的身份,那么一部分节点就会认为这个master节点失效了,故重新选举新的节点,这时就出现了脑裂;同时由于data节点上ES进程占用的内存较大,较大规模的内存回收操作也能造成ES进程失去响应。所以,这个原因的可能性应该是最大的。
应对问题的办法:
1. 对应于上面的分析,推测出原因应该是由于节点负载导致了master进程停止响应,继而导致了部分节点对于master的选择出现了分歧。为此,一个直观的解决方案便是将master节点与data节点分离。为此,我们添加了三台服务器进入ES集群,不过它们的角色只是master节点,不担任存储和搜索的角色,故它们是相对轻量级的进程。可以通过以下配置来限制其角色:
[plain] view plain copy
node.master: true
node.data: false
当然,其它的节点就不能再担任master了,把上面的配置反过来即可。这样就做到了将master节点与data节点分离。当然,为了使新加入的节点快速确定master位置,可以将data节点的默认的master发现方式有multicast修改为unicast:
[plain] view plain copy
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"]
2. 还有两个直观的参数可以减缓脑裂问题的出现:
discovery.zen.ping_timeout(默认值是3秒):默认情况下,一个节点会认为,如果master节点在3秒之内没有应答,那么这个节点就是死掉了,而增加这个值,会增加节点等待响应的时间,从一定程度上会减少误判。
discovery.zen.minimum_master_nodes(默认是1):这个参数控制的是,一个节点需要看到的具有master节点资格的最小数量,然后才能在集群中做操作。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量(我们的情况是3,因此这个参数设置为2,但对于只有2个节点的情况,设置为2就有些问题了,一个节点DOWN掉后,你肯定连不上2台服务器了,这点需要注意)。
分享到:
相关推荐
ElasticSearch集群脑裂优化设置,配合博文ES集群优化。
springboot 2.0.2集成elasticsearch5.5.1,并使用集群模式,亲测可用!!!
elasticsearch集群简单搭建
es集群安装包,资源共享,个人安装没问题,可以下载试一下
原文链接:https://blog.csdn.net/m0_37814112/article/details/122965720 说明:包含elasticsearch7.15.0集群3节点、5节点、7节点等三种方式的K8S部署yaml文件、镜像文件,里面有详细的README.txt部署参考
Elasticsearch集群安装配置
开箱即用,简单粗暴...我们本机启动两个es实例,也就是两个node节点,默认集群名称是elasticsearch,所以他会自动将这两个node凑成一个集群,我们什么都不用配置,它自动发现。shard负载均衡假设我们有1个index,
Bigdesk 是 ElasticSearch 的一个集群监控工具,可生成 ElasticSearch 集群的即时图表和统计信息。可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等。版本对应关系表:...
ElasticSearch集群部署方式及社会公共信息系统配置文件中es相关参数的修改
CentOS7下搭建多节点Elasticsearch集群
采用三台CentOS7.2部署Elasticsearch集群,部署Elasticsearch集群就不得不提索引分片,以下是索引分片的简单介绍。
该安装包实现利用给定参数安装单机版或者集群版es数据库,指定参数后安装过程全自动,自动修改系统内核,配置jdk,自动识别并配置内存,自动根据节点数配置集群脑溢节点配置数。涉及到以下操作 1、自动检测配置java...
学习总结资料
一键部署工具实现功能如下: 1、支持单节点部署 2、支持伪集群部署 3、支持分布式集群部署 ...5、支持集群名称、数据目录、...说明:工具使用非常简单,只需要修改变量文件,一分钟就可以快速帮你部署elasticsearch集群。
本文档主要以Elasticsearch6.6.2为版本,以Centos7.6为操作系统,详细讲解了ES的集群部署和配置,该文档也支持其他ES其他版本部署配置。原创作者:永远的SSS
04elasticsearch集群部署.md
elasticsearch集群节点监控脚本异常通过mail465发送邮件通知
ELasticsearch的集群是由多个节点组成的,通过cluster.name设置集群名称,并且用于区分其它的集群,每个节点通过node.name指定节点的名称。 在Elasticsearch中,节点的类型主要有4种: master节点: 配置文件中node...
一个满足亿级流量实时计算,实时监控的系统,SpringBoot+ElasticSearch集群+RocketMQ+Codis集群架构实现,项目经过严格测试,确保可以运行! 主要功能是通过ElasticSearch实现实时计算、实时分析海量数据,聚合处理...
es高可用 防止集群脑裂问题 防止单点故障问题 Master节点故障 Data节点故障 节点可迁移 集群的横向动态扩容