Elasticsearch集群如何实现高可用和一致性

Elasticsearch集群如何实现高可用和一致性

Elasticsearch (ES) 的高可用性是指集群在部分节点或分片出现故障时,仍能确保数据的持续可用和集群的稳定运行。ES 通过分片机制、主从结构、分配策略、故障恢复和分布式一致性等多种机制实现高可用。

1. 分片机制和副本

ES 通过 分片副本 实现数据的备份和容错,其分片和副本机制是基于索引的。

  • 主分片 (Primary Shard):每个索引在创建时会定义若干个主分片。主分片用于存储数据,并负责处理写请求。每个文档只能存在于一个主分片中。
  • 副本分片 (Replica Shard):副本是主分片的完全拷贝,提供冗余和负载均衡。副本分片能够接收读请求,并且当主分片不可用时,副本可以提升为主分片继续承担写操作。

在这里插入图片描述

分片分配与负载均衡
  • ES 会尽量将主分片和副本分片分布在不同的节点上,以防止节点宕机导致数据不可用。副本不仅用于数据备份,也用于负载均衡,处理查询请求。
分片数和副本数配置

在创建索引时,可以指定主分片和副本数量,示例配置如下:

PUT /my_index
{
  "settings": {
    "number_of_shards": 5,   # 主分片数量
    "number_of_replicas": 1  # 副本分片数量
  }
}

2. 分配策略与故障恢复

ES 提供了多种分片分配策略和故障恢复机制,确保集群在节点宕机或加入新节点时能够自动调整。

自定义分配策略

ES 支持通过节点的自定义属性(如磁盘空间、机房等)来影响分片的分配。使用 node.attr.<attribute> 配置节点属性,在创建索引时通过 cluster.routing.allocation 属性来控制分配策略。实例如下

机房感知:当集群跨多个机房部署时,可以通过配置机房感知(node.attr.dc)来优化分片分配,确保主副分片分布在不同机房,从而避免单一机房故障影响整个集群。

node.attr.dc: dc1  # 设置节点所在的机房

在创建索引时使用:

PUT /my_index
{
  "settings": {
    "cluster.routing.allocation.awareness.attributes": "dc",  # 根据机房分配
    "cluster.routing.allocation.awareness.force.dc.values": "dc1,dc2"  # 强制分配到不同机房
  }
}

3. Zen2 协议与主节点选举

Elasticsearch 7.x 引入了 Zen2 协议来自动化主节点选举,确保集群的一致性和高可用性。Zen2 协议通过基于 termepoch 的一致性机制,解决了传统选举方式中的脑裂问题。

主节点选举机制
  • 多数决原则:Zen2 协议采用 多数决机制,即主节点必须获得集群超过一半节点的支持才能当选。当主节点宕机时,集群会自动进行选举,并选出新的主节点。
  • 投票与一致性:选举过程中,集群中的节点通过交换 termepoch 值来投票,确保一致性。只有获得多数节点支持的主节点才能继续集群管理工作。

term 是一个递增的整数值,用来表示当前集群的 “任期”。每次主节点选举时,都会生成一个新的 term,并且所有的选举和集群状态变更都将与该 term 相关联。也就是说节点的term越大,证明其参与选举的次数越多,数据越新。

epoch 是与选举过程和投票相关的另一个标识符,表示一个特定的选举周期。每个节点都在选举中持有一个 epoch,表示它所在的选举周期或阶段。防止多个节点处在不同的选举周期中,导致选举过程错乱。

当节点宕机时,ES集群会从green状态变为red或yellow,这取决于本次宕机是否异常集群的写入功能,也就是主分片的副分片是否存在并成功升级为主分片。如果是yellow,ES会自动将宕机节点上的主分片的副本提升为主分片,保证写操作的持续性,并重新分配剩余的副本分片。

  • 副本分片升级:如果主分片所在的节点宕机,副本分片会被提升为新的主分片,继续承载写操作。系统会保持副本数量一致,并重新分配副本分片。
  • 分片重新分配:当节点恢复时,ES 会尝试将丢失的副本分片分配到其他节点,并确保数据冗余。
防止脑裂

当出现网络分区时,可能会出现一个小集群中包含主节点,另一个大集群中不包含主节点,但由于可选举节点超出既定值,可以完成选举,导致出现两个主节点,当网络分区消失后,两个主节点相遇,Zen2 协议通过使用 term 值来避免这种脑裂问题,term大的一方证明是新选举的主节点,则会成为真正的主节点,确保集群中只有一个有效的主节点。

Voting-only 节点

Elasticsearch 允许将某些节点配置为 Voting-only 节点,这些节点只能参与投票,不能被选举为主节点。这有助于保证选举的稳定性,防止某些节点因网络问题而成为主节点候选。

4. 集群健康与故障恢复

ES在接受到写入操作时,会讲写入指令优先存入事务日志,当一条数据被加载进内存并写入日志后,则会返回写入成功。这一操作可以提高ES的写入效率,无需等待ES持久化完数据在进行下一步操作,并且可以在故障恢复时,执行事务日志内容来恢复数据,从分片也会从事务日志同步数据。

Elasticsearch 集群中各个节点通过心跳机制确认对方的存活,当集群中过半的节点都无法连接某个节点时则认为这个节点宕机,在遭遇节点宕机或故障时,会通过以下机制进行恢复:

  • 节点故障处理:当节点宕机时,ES 会自动重新分配该节点的分片,提升副本为主分片,保证集群的写操作继续进行。
  • 恢复过程:当故障节点恢复时,ES 会同步集群中其他节点的事务日志内容用于恢复数据,确保节点数据与集群状态一致。若节点长时间宕机,ES 会根据副本分片的可用性自动进行数据恢复。
  • 自动分配与重平衡:在新节点加入或节点宕机时,ES 会触发分片的重新分配,保持集群的负载均衡。

ES并不会马上将数据写入磁盘,而是定期的将内存中的数据刷新到磁盘中的Lucene 索引中。Lucene索引文件是用于搜索的文件,其中包含了数据和倒排索引等。ES还会定期生成快照文件用于故障恢复。快照和事务日志是保证数据不丢失且能快速相应的一种手段。有点类似于Redis的rdb和aof。

5. 写入一致性与确认

Elasticsearch 支持根据写入一致性级别来确保数据的可靠性。

  • 写入一致性:通过配置 index.write.wait_for_active_shards,可以控制写操作的确认级别。例如,设置为 all 时,写操作需要等待所有副本分片确认后才算成功。
  • 同步写操作:ES 支持同步和异步写操作。用户可以根据需求选择合适的一致性级别,在确保一致性的同时,平衡系统的性能与可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/926024.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实现Linux平台自定义协议族

一 简介 我们常常在Linux系统中编写socket接收TCP/UDP协议数据&#xff0c;大家有没有想过它怎么实现的&#xff0c;如果我们要实现socket接收自定义的协议数据又该怎么做呢&#xff1f;带着这个疑问&#xff0c;我们一起往下看吧~~ 二 Linux内核函数简介 在Linux系统中要想…

数组和链表OJ题

leetcode用编译器调试的技巧 数组和链表练习题 leetcode/reverse_Link/main.c Hera_Yc/bit_C_学习 - 码云 - 开源中国 1、移除元素 ​​​​​​27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; int removeElement(int* nums, int numsSize, int val) {int src 0, …

VSCode 使用教程:项目使用配置、使用哪些插件、Live Server使用问题及解决方案(你想要的,都在这里)

VSCode的配置&#xff1a; Ⅰ、VSCode 可能需要的项目配置&#xff1a;1、项目颜色主题的切换&#xff1a;其一、点击设置 -> 选择主题 -> 选择颜色主题&#xff1a;其二、通过上下键操作&#xff0c;选择想要的主题&#xff1a; 2、项目文件图标主题的切换&#xff1a;其…

28 基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;通过ADC0808获取两路电压&#xff0c;通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码&#xff0c;PROTEUS8.15进行仿真&#xff0c;全部资源在页尾&#xff0c;提供…

宠物空气净化器推荐2024超详细测评 希喂VS霍尼韦尔谁能胜出

最近有粉丝一直在评论区和后台探讨宠物空气净化器是不是智商税的问题&#xff0c;有人认为宠物空气净化器肯定不是智商税&#xff0c;有些人认为将其购回家就是个没用的东西&#xff0c;还占地方&#xff0c;双方各有自己的观点。 其实宠物空气净化器和普通的空气净化器是有很大…

鸿蒙学习笔记:CheckboxGroup组件

本次鸿蒙CheckboxGroup组件实战&#xff0c;先创建CheckboxGroupDemoAbility与CheckboxGroupDemo.ets页面&#xff0c;在ets页面以Row、Column布局呈现界面。利用CheckboxGroup管理爱好相关Checkbox&#xff0c;通过状态记录及“确定”按钮实现选择展示。设置页面为首页后启动应…

[Java]微服务之分布式事务

介绍 下单业务&#xff0c;前端请求首先进入订单服务&#xff0c;创建订单并写入数据库。然后订单服务调用购物车服务和库存服务: 购物车服务负责清理购物车信息库存服务负责扣减商品库存 问题分析: 下单过程中, 订单服务创建订单, 插入自己的数据库, 执行成功购物车服务, 清…

如何在谷歌浏览器中使用开发者工具调试网页

在数字时代&#xff0c;网页开发和调试已成为每个前端开发人员必备的技能。谷歌浏览器&#xff08;Google Chrome&#xff09;提供了强大的开发者工具&#xff0c;帮助开发者快速定位和修复网页中的问题。本文将详细介绍如何使用Chrome开发者工具来调试网页&#xff0c;同时也会…

新增工作台模块,任务中心支持一键重跑,MeterSphere开源持续测试工具v3.5版本发布

2024年11月28日&#xff0c;MeterSphere开源持续测试工具正式发布v3.5版本。 在这一版本中&#xff0c;MeterSphere新增工作台模块&#xff0c;工作台可以统一汇总系统数据&#xff0c;提升测试数据的可视化程度并增强对数据的分析能力&#xff0c;为管理者提供测试工作的全局…

在Springboot项目中实现将文件上传至阿里云 OSS

oss介绍 阿里云对象存储服务&#xff08;OSS&#xff09;是一种高效、安全和成本低廉的数据存储服务&#xff0c;可以用来存储和管理海量的数据文件。本文将教你如何使用 Java 将文件上传到阿里云 OSS&#xff0c;并实现访问文件。 1. 准备工作 1.1 开通 OSS 服务 登录阿里云…

CrystalDiskInfo:硬盘健康监测工具简介和下载

原论坛给你更好的阅读体验&#xff1a;CrystalDiskInfo&#xff1a;硬盘健康监测工具简介和下载 | 波波论坛 引言 在日常使用电脑时&#xff0c;硬盘的健康状态对于系统的稳定性和数据的安全性至关重要。硬盘出现故障可能会导致数据丢失&#xff0c;严重时甚至会使整个系统无…

springboot339javaweb的新能源充电系统pf(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;新能源充电系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解…

【第三讲】Spring Boot 3.4.0 新特性详解:增强的配置属性支持

Spring Boot 3.4.0 版本在配置属性的支持上进行了显著增强&#xff0c;使得开发者能够更灵活地管理和使用应用程序的配置。新的特性包括对配置属性的改进、类型安全增强、以及对环境变量的更好支持。这些改进旨在提升开发效率和代码可读性&#xff0c;同时简化配置过程。本文将…

龙迅#LT6912适用于HDMI2.0转HDMI+LVDS/MIPI,分辨率高达4K60HZ,支持音频和HDCP2.2

1. 描述 LT6912是一款高性能的HDMI2.0转HDMI和LVDS和MIPI转换器。 HDMI2.0 输入和输出均支持高达 6Gbps 的数据速率&#xff0c;为4k60Hz视频提供足够的带宽。此外&#xff0c;还支持 HDCP2.2 进行数据解密&#xff08;无数据 加密&#xff09;。 对于 LVDS 输出&#xff0c…

彻底理解微服务配置中心的作用

常见的配置中心有SpringCloudConfig、Apollo、Nacos等&#xff0c;理解它的作用&#xff0c;无非两点&#xff0c;一是配置中心能做什么&#xff0c;不使用配置中心会出现什么问题。 作用&#xff1a;配置中心是用来集中管理服务的配置&#xff0c;它是用来提高系统配置的维护…

MySQL数据库表的操作

1、总述 今天我跟大家分享MySQL数据库中表的创建&#xff0c;查看&#xff0c;修改&#xff0c;删除。 2、创建表 create table table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明&#xff1…

摄影相关常用名词

本文介绍与摄影相关的常用名词。 曝光 Exposure 感光元件接收光线的过程&#xff0c;决定图像的明暗程度和细节表现。 光圈 Aperture 控制镜头进光量的孔径大小&#xff0c;用 F 值&#xff08;f-stop&#xff09; 表示。 光圈越大&#xff08;F 值越小&#xff09;&#xff0c…

使用 VLC 在本地搭建流媒体服务器 (详细版)

提示&#xff1a;详细流程 避坑指南 Hi~&#xff01;欢迎来到碧波空间&#xff0c;平时喜欢用博客记录学习的点滴&#xff0c;欢迎大家前来指正&#xff0c;欢迎欢迎~~ ✨✨ 主页&#xff1a;碧波 &#x1f4da; &#x1f4da; 专栏&#xff1a;音视频 目录 借助VLC media pl…

C++之C++11新特性(三)--- 智能指针

目录 一、智能指针 1.1 为什么需要智能指针 1.2 内存泄漏 1.2.1 内存泄漏的基本概念 1.2.2 内存泄漏的分类 1.2.3 如何避免内存泄漏 1.3 智能指针的使用及其原理 1.3.1 RAII 1.3.2 智能指针的基本原理 1.3.3 auto_ptr 1.3.4 unique_ptr 1.3.5 shared_ptr 1.3.6 sha…

Elasticearch索引mapping写入、查看、修改

作者&#xff1a;京东物流 陈晓娟 一、ES Elasticsearch是一个流行的开源搜索引擎&#xff0c;它可以将大量数据快速存储和检索。Elasticsearch还提供了强大的实时分析和聚合查询功能&#xff0c;数据模式更加灵活。它不需要预先定义固定的数据结构&#xff0c;可以随时添加或修…