如何防止ElasticSearch集群出现脑裂现象
什么是“脑裂”现象?
由于某些节点的失效,部分节点的网络连接会断开,并形成一个与原集群一样名字的集群,这种情况称为集群脑裂(split-brain)现象。这个问题非常危险,因为两个新形成的集群会同时索引和修改集群的数据。
如何避免脑裂问题?
避免脑裂现象,用到的一个参数是:discovery.zen.minimum_master_nodes。这个参数决定了要选举一个Master需要多少个节点(最少候选节点数)。默认值是1。根据一般经验这个一般设置成 N/2 + 1,N是集群中节点的数量,例如一个有3个节点的集群,minimum_master_nodes 应该被设置成 3/2 + 1 = 2(向下取整)。
用到的另外一个参数是:discovery.zen.ping.timeout,等待ping响应的超时时间,默认值是3秒。如果网络缓慢或拥塞,建议略微调大这个值。这个参数不仅仅适应更高的网络延迟,也适用于在一个由于超负荷而响应缓慢的节点的情况。
如果您刚开始使用elasticsearch,建议搭建拥有3个节点的集群,这种方式可以把discovery.zen.minimum_master_nodes设置成2,这样就限制了发生脑裂现象的可能,且保持着高度的可用性:如果你设置了副本,在丢失一个节点的情况下,集群仍可运行。
真的高枕无忧了?
其实问题依然存在,ES的issue空间也在讨论一个特例情况《#2488》:即使 minimum_master_nodes 设置了一个正确的值,脑裂也有可能发生。
如何识别这个问题?
在您的集群里面尽快识别这个问题非常重要。一个比较容易的方法是定时获取每一个节点/_nodes响应,它返回了集群中所有节点的状态报告,如果两个节点返回的集群状态不一样,就是一个脑裂情况发生的警示信号。
新增解决方案
对于一个具有全功能的ES节点,必须要有一个活动的Master节点。ES1.4.0.Beta1后,新增了一项没有Master时阻塞集群操作设置:discovery.zen.no_master_block。
当集群中没有活动的Master节点后,该设置指定了哪些操作(read、write)需要被拒绝(即阻塞执行)。有两个设置值:all和write,默认为wirte。
这项配置不会对基本api(例如集群状态、节点信息和状态API)产生影响,这些节点在任何节点上执行都不会被阻塞。
总结
脑裂问题依然是一个比较难以解决的问题,最终解决方案也是妥协的结果。这个问题也是分布式系统都会面临的问题。一下子想到了前几天看到的CAP理论,难道只有CP或者AP?
总体感觉ES还很年轻,但因为它的开箱即用、天生集群、自动容错、扩展性强等优点,还是选择它来做全文检索。
相关推荐
下面我们就来深入探讨如何搭建一个基于Elasticsearch的集群环境,并实现一些高级功能,比如head插件的安装与使用,以及ES用户认证的创建。 首先,为了安装Elasticsearch,需要准备以下软件环境: - Java环境:...
在Windows环境下搭建Elasticsearch集群,虽然相对Linux环境复杂一些,但仍然可行,且具有一定的灵活性。下面将详细介绍如何在Windows上构建一个一主两从的Elasticsearch集群。 首先,我们需要下载Elasticsearch的...
Elasticsearch主备集群搭建与配置详解 Elasticsearch 是一款功能强大的开源搜索引擎,广泛应用于日志分析、全文检索和实时数据分析等领域。构建一个主备集群可以提高数据的可用性和可靠性,确保在主节点出现问题时...
通过这样的配置,我们能构建一个包含一个主节点和两个数据节点的Elasticsearch集群,同时提供了一个可视化界面`es-head`。运行`docker-compose up -d`命令即可启动所有服务,`-d`参数表示后台运行。在实际环境中,...
es高可用 防止集群脑裂问题 防止单点故障问题 Master节点故障 Data节点故障 节点可迁移 集群的横向动态扩容
minimum_master_nodes 是 ES 集群的最小主节点数,用于防止脑裂。 四、性能优化 1. 如何对 ES 进行性能优化?ES 的性能优化可以通过索引设计、写入优化、查询优化等方式实现。 2. 什么是写入优化?写入优化可以...
在正常的集群运行状态下,所有节点对于集群中master节点的选择应该是一致的,但在网络不稳定时,就可能出现所谓的“脑裂”现象,即不同的节点对master节点的选择出现异常,导致集群状态信息的不一致。因此,如果数据...
### 15、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。 ### 16、REST API在 Elasticsearch 方面有哪些优势? ### 17、请解释一下 Elasticsearch 中聚合? ##...
Elasticsearch 集群安装在 CentOS 7.4 上涉及多个步骤,包括服务器准备、基础配置、JDK 安装、以及 Elasticsearch 集群的详细配置。以下是详细的安装和配置过程: 1. **服务器准备**: - 你需要准备三台运行 ...
### 11、什么是ElasticSearch脑裂? ### 12、你能否列出与 Elasticsearch 有关的主要可用字段数据类型? ### 13、详细描述一下 Elasticsearch 索引文档的过程。 ### 14、elasticsearch 分布式架构原理 ### 15、...
回答中需要讨论ElasticSearch的master选举机制,例如只有候选主节点(master:true)的节点才能成为主节点,min_master_nodes的目的是防止脑裂,选举流程的核心入口为findMaster等。 这些问题涵盖了ElasticSearch的...
3. **脑裂现象**:当网络分割导致两个或更多节点无法通信时,可能会出现多个主节点,需要避免这种情况。 **四、Elasticsearch集群扩容和容灾** 1. **集群健康**:检查集群状态,确保所有节点正常运行。 2. **主分...
选举过程由`findMaster`方法触发,遵循最小主节点数(`min_master_nodes`)设置以防止脑裂现象。一旦超过半数的候选主节点同意某个节点为主节点,这个节点就会被选中并开始协调集群的操作。 4. **部署与运维**: ...
为了避免脑裂现象,即集群分裂为两个或多个独立的集群,Elasticsearch 配置了 `discovery.zen.minimum_master_nodes` 参数,设定至少需要多少 Master 节点才能构成有效集群,以防止网络分区导致的不一致。...
- 在每个节点上启动Elasticsearch集群: `./elasticsearch`。 #### 三、Elasticsearch简单命令操作 - **CURL工具介绍**: Curl是一个命令行工具,用于发送HTTP请求,支持GET、POST等多种方法。 - 示例命令: 创建...
- **问题背景**:当Elasticsearch集群重启时,可能会遇到Shard恢复时间过长的问题,这会影响到系统的可用性和性能。 - **解决策略**: - 使用`index.recovery.initial_shards`参数来指定初始恢复的分片数量。 - ...
选举过程涉及对discovery.zen.minimum_master_nodes的检查,防止脑裂现象。一旦满足条件,节点间通过findMaster流程进行选举。 这些问题旨在评估候选人对Elasticsearch的理解深度,包括其架构、优化策略、分布式...
- `discovery.zen.minimum_master_nodes`: 防止脑裂现象,设置最小主节点数量,通常是(N/2)+ 1,其中N为集群中主节点总数。 3. **网络与端口配置** - `network.host`: 设置监听的网络接口,可以是IP地址或主机...
1. **Elasticsearch 集群架构与调优** - 集群架构通常包括多个节点,每个节点负责不同的职责,如数据存储、搜索、复制等。在实际应用中,可能会有13个节点,按照业务逻辑创建20多个索引,并根据日期不断增长。每个...