Elastic Search跨AZ脑裂问题讨论

企业动态
AZ(可用区,Availability Zone)这个是AWS发明的概念,AWS引入可用区设计主要是为了提升用户应用程序的高可用性。下面,我们就来谈谈跨AZ脑裂问题。

AZ概念

AZ(可用区,Availability Zone)这个是AWS发明的概念,AWS引入可用区设计主要是为了提升用户应用程序的高可用性。因为可用区与可用区之间在设计上是相互独立的,也就是说它们会有独立的供电、独立的网络等,这样假如一个可用区出现问题时也不会影响另外的可用区。在一个区域内,可用区与可用区之间是通过高速网络连接,从而保证有很低的延时。

ES脑裂问题

说完可用区,再来看看ES(Elastic Search)主动选举机制:

elasticsearch集群一旦建立起来以后,会选举出一个master,其他都为slave节点。但是具体操作的时候,每个节点都提供写和读的操作。就是说,你不论往哪个节点中做写操作,这个数据也会分配到集群上的所有节点中。

这里有某个节点挂掉的情况,如果是slave节点挂掉了,那么首先关心,数据会不会丢呢?不会。如果你开启了replicate,那么这个数据一定在别的机器上是有备份的。别的节点上的备份分片会自动升格为这份分片数据的主分片。这里要注意的是这里会有一小段时间的yellow状态时间。

如果是主节点挂掉怎么办呢?当从节点们发现和主节点连接不上了,那么他们会自己决定再选举出一个节点为主节点。但是这里有个脑裂的问题,假设有5台机器,3台在一个机房,2台在另一个机房,当两个机房之间的联系断了之后,每个机房的节点会自己聚会,推举出一个主节点。这个时候就有两个主节点存在了,当机房之间的联系恢复了之后,这个时候就会出现数据冲突了。

解决的办法就是设置参数:

  1. discovery.zen.minimum_master_nodes 

为3(超过一半的节点数),那么当两个机房的连接断了之后,就会以大于等于3的机房的master为主,另外一个机房的节点就停止服务了。

AZ可用 + 脑裂放一块怎么办?

其实很难办,为了做到不脑裂,就要设置最小可用节点要超过整个集群的一半。但是同样,但是这样做同样,AZ通信断了或者挂了一个AZ,整个服务可能节点数就不到集群的一半,服务就无法使用了,好像AZ的可靠性就没有起到作用。

AWS是怎么弄的?

看AWS的开发文档里面有如下说明:

每个 AWS 区域都是一个独立的地理区域,其中包含多个相互隔离的位置,这些位置称为可用区。为避免数据损失,并***限度地减少节点和数据中心故障时导致的停机时间,您可以使用 Amazon ES 控制台,在同一区域的两个可用区之间,分配属于 Elasticsearch 群集的节点和副本索引分片。此分配称为区域感知。如果启用区域感知,则您还必须使用本机 Elasticsearch API 为您的群集创建副本分片。Amazon ES 在可用区的各节点之间分配副本,这会增加您的群集的可用性。为群集启用区域感知会略微增加网络延迟。

Important

区域感知要求实例数量为偶数。所有索引的默认配置均为副本数量等于 1。如果您为一个索引指定。副本数量等于 0,则区域感知不复制分片到第二个可用区。如果没有副本分片,则无需将副本分发。到第二个可用区,启用该功能不提供数据损失保护。

下图显示了启用区域感知的四节点群集。该服务将所有主索引分片放在一个可用区中,将所有副本分片放在第二个可用区中。

启用区域感知的四节点群集

不难看出来,AWS并没有解决这个问题,而是做了一个取舍,要求两个AZ节点数都为偶数,更多的是为了AZ之间更好的数据均衡。

【本文为51CTO专栏作者“大数据和云计算”的原创稿件,转载请通过微信公众号获取联系和授权】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2019-11-29 11:12:56

Zookeeper脑裂选举算法

2020-10-27 11:50:53

运维Zookeeper脑裂

2022-10-24 00:18:41

Elasticsea分布式数量

2022-06-20 05:25:54

裂脑Oracle RAC数据库

2022-01-26 08:47:17

部署应用分布式

2017-10-18 08:24:11

存储双活脑裂风险

2022-10-11 09:27:45

搜索引擎es索引

2021-07-29 06:56:36

分布式系统脑裂

2022-07-07 07:51:00

数据中心存储层脑裂

2017-07-31 09:20:52

Elastic seaKibana数据

2022-10-27 21:32:34

oracle数据库

2023-05-15 08:02:33

Kafka选举Broker

2009-12-29 17:21:24

Ubuntu 8.04

2010-07-13 15:36:33

2009-10-16 10:17:27

6类布线技术

2022-02-18 10:52:52

Elastic亚马逊AWS

2011-04-13 14:20:52

SQL Server主键

2011-07-04 16:40:39

QT 串口 QML

2024-02-27 09:48:25

Redis集群数据库
点赞
收藏

51CTO技术栈公众号