文档章节

elaselasticsearch集群脑裂

 张欢19933
发布于 2017/08/16 10:50
字数 1189
阅读 39
收藏 0

集群脑裂是什么?

  所谓脑裂问题(类似于精神分裂),就是同一个集群中的不同节点,对于集群的状态有了不一样的理解。

   由于某些节点的失效,部分节点的网络连接会断开,并形成一个与原集群一样名字的集群,这种情况成为集群脑裂(split-brain)现象。这个问题非常危险,因为两个新形成的集群会同时索引和修改集群的数据。

今天,Elasticsearch集群出现了查询极端缓慢的情况,通过以下命令查看集群状态

  curl -XGET 'http://master:9200/_cluster/health'

    或者

  curl -XGET 'http://localhost:9200/_cluster/health'

  发现,集群的总体状态是red,本来9个节点的集群,在结果中只显示了4个;但是,将请求发向不同的节点之后,我却发现即使是总体状态是red的,但是可用的节点数量却不一致。

  正常情况下,集群中的所有的节点,应该对集群中master的选择是一致的,这样获得的状态信息也应该是一致的,不一致的状态信息,说明不同的节点对master节点的选择出现了异常——也就是所谓的脑裂问题。这样的脑裂状态直接让节点失去了集群的正确状态,导致集群不能正常工作。

ES集群脑裂可能导致的原因:
  1. 网络: 由于是内网通信, 网络通信问题造成某些节点认为 master 死掉, 而另选 master的可能性较小; 进而检查 Ganglia 集群监控, 也没有发现异常的内网流量, 故此原因可以排除。

   内网一般不会出现es集群的脑裂问题,可以监控内网流量状态。外网的网络出现问题的可能性大些。

  2. 节点负载: 由于 master 节点与 data 节点都是混合在一起的, 所以当工作节点的负载较大( 确实也较大) 时, 导致对应的 ES 实例停止响应, 而这台服务器如果正充当着 master节点的身份, 那么一部分节点就会认为这个 master 节点失效了, 故重新选举新的节点, 这时就出现了脑裂; 同时由于 data 节点上 ES 进程占用的内存较大, 较大规模的内存回收操作也能造成 ES 进程失去响应。 所以, 这个原因的可能性应该是最大的。

   3、回收内存

  由于data节点上es进程占用的内存较大,较大规模的内存回收操作也能造成es进程失去响应。

ES集群脑裂应对问题的办法:
  1、对应于上面的分析, 推测出原因应该是由于节点负载导致了 master 进程停止响应, 继而导致了部分节点对于 master 的选择出现了分歧。 为此, 一个直观的解决方案便是将 master节点与 data 节点分离。 为此, 我们添加了三台服务器进入 ES 集群, 不过它们的角色只是master 节点, 不担任存储和搜索的角色, 故它们是相对轻量级的进程。 可以通过以下配置来限制其角色:

  node.master: true
  node.data: false
  当然, 其它的节点就不能再担任 master 了, 把上面的配置反过来即可。 这样就做到了将 master 节点与 data 节点分离。当然,为了使新加入的节点快速确定master位置,可以将data节点的默认的master发现方式有multicast修改为unicast:

  discovery.zen.ping.multicast.enabled: false  

  discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"]  

  还有两个直观的参数可以减缓脑裂问题的出现:
  2、discovery.zen.ping_timeout( 默认值是 3 秒) : 默认情况下, 一个节点会认为, 如果 master节点在 3 秒之内没有应答, 那么这个节点就是死掉了, 而增加这个值, 会增加节点等待响应的时间, 从一定程度上会减少误判。

  3、discovery.zen.minimum_master_nodes( 默认是 1) : 这个参数控制的是, 一个节点需要看到的具有 master 节点资格的最小数量, 然后才能在集群中做操作。 官方的推荐值是(N/2)+1, 其中 N 是具有 master 资格的节点的数量( 我们的情况是 3, 因此这个参数设置为2, 但对于只有 2 个节点的情况, 设置为 2 就有些问题了, 一个节点 DOWN 掉后, 你肯定连不上 2 台服务器了, 这点需要注意) 。

  以上的解决方法只能是减缓这种现象的发生, 并没有从根本上杜绝。

本文转载自:http://www.cnblogs.com/zlslch/p/6477312.html

共有 人打赏支持
粉丝 33
博文 460
码字总数 226276
作品 0
海淀
EMQ 2.3-beta.1 发布, 百万级 MQTT 消息服务器

EMQ R2.3-beta.1版本发布!该版本正式支持集群节点自动发现与集群脑裂自动愈合,支持基于IP Multicast、Etcd、Kubernetes等多种策略自动构建集群。 节点发现与自动集群 EMQ R2.3 版本支持多种...

emqtt
2017/07/25
1K
4
elasticsearch脑裂问题

所谓脑裂问题(类似于精神分裂),就是同一个集群中的不同节点,对于集群的状态有了不一样的理解。 正常情况下,集群中的所有的节点,应该对集群中master的选择是一致的,这样获得的状态信息...

枫林飘影
04/03
0
0
Elasticsearch部分节点不能发现集群(脑裂)问题处理

什么是脑裂? 让我们看一个有两个节点的elasticsearch集群的简单情况。集群维护一个单个索引并有一个分片和一个复制节点。节点1在启动时被选举为主节点并保存主分片(在下面的schema里标记为...

键走偏锋
2017/09/27
0
0
split-brain 脑裂问题(Keepalived)

脑裂(split-brain) 指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏...

吞吞吐吐的
2017/09/15
0
0
mysql galera cluster集群的分裂与仲裁机制

集群的分裂 当集群由于网络原因分裂为几个单独的组时(一组可能是单节点,也可能是几个互联的节点),数据出现不一致,此时可能产生脑裂及数据不一致。这种情况下,只有一组节点能够继续提供...

bupt晶
2015/12/21
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx的简单使用:负载均衡

nginx:反向代理的服务器;用户发送请求到nginx,nginx把请求发送给真正的服务器,等待服务器处理完数据并返回,再把数据发送给用户。 nginx作为一个反向代理服务器,能缓存我们项目的静态文...

osliang
16分钟前
1
0
网站title标题被改并被百度网址安全中心提醒的解决办法

国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百...

网站安全
18分钟前
1
0
JDK版本与major.minor version的对照关系

其实,只需要记住jdk6对于major.minor version 50即可,其他版本自行计算即可。 ---------------------

码代码的小司机
20分钟前
1
0
C++基础教程面向对象学习笔记及心得感悟[图]

C++基础教程面向对象学习笔记及心得感悟[图] 使用友元函数重载算术运算符: C ++中一些最常用的运算符是算术运算符 - 即加号运算符(+),减运算符( - ),乘法运算符(*)和除法运算符(/...

原创小博客
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部