Elastic Stack梳理:分布式存储机制深度解析与工程实践

C++ Linux服务器架构师进阶:从内核原理到分布式系统实战 Linux服务器开发是构建高性能、高可用后端系统的核心技术领域,其核心在于深入理解操作系统内核机制与网络协议栈原理。通过掌握进程调度、内存管理、epoll等底层机制,开发者能够优化服务性能,解决线上高并发场景下的稳定性问题。在分布式架构成为主流的今天,掌握RPC框架、服务治理、分布式事务与缓存等中间件技术,是实现系统弹性扩展与数据一致性的关键。本文基于零声教育13代课程体系,系统梳理了从Linux内核深度到分布式系统设计的完整进阶路径,涵盖网络编程、并发模型、存储方案及实战项目,为C++后台开发者提供架构师 阅读详情

文档到分片的映射算法与存储原理


ElasticSearch通过分片(Shard)实现文档的分布式存储
每个文档根据routing参数(默认为文档ID)计算目标分片位置

计算公式为:
shard = hash(routing) % number_of_primary_shards

  • 哈希算法:确保文档均匀分布到所有主分片(如MurmurHash3)
  • 分片数不可修改:若number_of_primary_shards变更,文档将无法通过相同算法定位(导致数据不可访问)
  • 自定义路由:可通过指定routing(如论坛板块ID)实现相关文档聚合存储,提升查询效率

关键设计目的:

  • 避免维护文档-分片映射表的高成本
  • 同时解决随机分片/轮询分片导致的查询性能问题(无需广播查询所有分片)

文档操作流程详解


1 ) 单文档写入流程(以创建文档为例)

  1. 协调节点(Coordinating Node)(如Node3)接收PUT /test_index/_doc/1请求
  2. 计算目标分片:hash(1) % 3 = shard1,通过集群状态(Cluster State)确认Shard1位于Node2
  3. 转发请求至Node2(主分片P1)
  4. P1写入成功后,同步至副本分片R1(位于Node1)
  5. R1写入成功后返回响应,最终由Node3通知客户端。

2 ) 批量操作流程(Bulk API)

  1. 协调节点按routing将文档分组,并发转发至对应主分片
  2. 主分片并行写入本地,异步同步至副本
  3. 所有分片响应成功后返回客户端

3 ) 文档读取流程

  1. 协调节点计算目标分片(同写入算法)
  2. 采用轮询策略从主/副本分片中选择一个节点查询(如优先副本分片以减轻主分片压力)
  3. 目标节点返回文档数据

脑裂问题(Split-Brain)解决方案


当网络分区导致集群分裂时(如Node1与Node2、Node3失联):

1 ) 问题本质:

  • 分裂的子集群各自选举新Master,生成冲突的Cluster State。
  • 网络恢复后出现双Master,集群状态无法自动修复。

2 ) 解决方案:法定人数(Quorum)机制

# 配置关键参数(elasticsearch.yml)
discovery.zen.minimum_master_nodes: 2  # 公式 = master_eligible_nodes / 2 + 1
  • Quorum计算:3节点集群中,Quorum = 3/2 + 1 = 2(向上取整)。
  • 作用:
    • 失联节点数不足Quorum时(如Node1单节点),禁止其选举Master。
    • 仅健康节点(Node2+Node3)可选举新Master,保证集群可用性。
    • 网络恢复后,隔离节点自动重新加入集群。

工程示例:基于NestJS的ES调用与配置


1 ) 方案1:基础文档操作服务

// src/elastic/elastic.service.ts
import { Injectable } from '@nestjs/common';
import { Client } from '@elastic/elasticsearch';
 
@Injectable()
export class ElasticService {
  private readonly client: Client;
 
  constructor() {
    this.client = new Client({ node: 'http://localhost:9200' });
  }
 
  // 创建文档(指定路由)
  async createDocument(index: string, id: string, body: object, routing?: string) {
    return this.client.index({
      index,
      id,
      body,
      routing,  // 自定义路由参数(如板块ID)
    });
  }
 
  // 批量写入 
  async bulkCreate(index: string, docs: Array<{ id: string; body: object }>) {
    const body = docs.flatMap(doc => [
      { index: { _index: index, _id: doc.id } },
      doc.body 
    ]);
    return this.client.bulk({ body });
  }
}

2 ) 方案2:分片策略优化配置

# ElasticSearch 索引配置(创建时固定分片数)
# PUT /test_index
{
  "settings": {
    "number_of_shards": 3,     // 主分片数(创建后不可修改)
    "number_of_replicas": 1,   // 每个主分片的副本数 
    "routing": {
      "allocation": {
        "include": {
          "box_type": "hot"    // 自定义分片分配策略 
        }
      }
    }
  }
}

3 ) 方案3:脑裂防护集群配置

# elasticsearch.yml(关键参数)
cluster.name: my-cluster
node.master: true             # 节点可参与Master选举
node.data: true               # 节点存储数据 
discovery.zen.minimum_master_nodes: 2  # 3节点集群的Quorum值 
discovery.zen.ping.unicast.hosts: ["node1", "node2", "node3"]  # 集群节点列表

关键技术点总结


  1. 分片映射算法:依赖哈希路由确保数据均匀分布,分片数需预先合理规划。
  2. 读写扩散策略:
    • 写操作:主分片同步副本(强一致性)。
    • 读操作:主/副本轮询(负载均衡)。
  3. 脑裂防护:
    • Quorum机制是分布式系统共识基础(如Paxos/Raft的变体)。
    • 生产环境需部署3个Master节点并设置minimum_master_nodes=2
  4. 路由优化场景:
    • 时序数据按时间路由,日志数据按服务名路由,减少跨分片查询

通过分片策略、路由优化和集群配置的协同设计,可构建高可用、高性能的ElasticSearch分布式系统
初学者需重点理解分片不可变与Quorum机制的核心逻辑,此为分布式存储的基石设计原则

【信息科学与工程学】【云计算】计算机科学与自动化——第十五篇 云计算10 云计算领域架构 ​:作为前端请求的统一入口,负载均衡器基于预设算法(如轮询、最小连接数)动态分配流量至后端服务器集群。​:通过IP哈希或Cookie绑定,保障同一用户请求由同一服务器处理(如电商购物车场景)。​:Nginx(HTTP/HTTPS反向代理)、HAProxy(TCP层负载均衡)。​:实时监控服务器状态(如响应时间、连接数),自动剔除故障节点,确保服务连续性。​:本地资源满载时,将流量分流至公有云(如AWS + 私有云混合架构)。​:LSTM预测流量峰值,强化学习动态调整权重(如阿里云智能负载均衡)。 阅读详情

相关推荐

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 413

Mac下MySQL的配置和修改密码以及忘记密码后的重置密码

1 ) Mac下MySQL的配置和修改密码 2 ) 忘记并重置密码 启动MySQL服务,通过 $ps aux | grep mysql 判断是否启动该服务,若未启动,则到 系统偏好设置/MySQL面板 启动服务 软件默认会安装到:/usr/local/mysql 目录,进入这个目录下的bin目录:$cd /usr/local/mysql/bin 执行 $./mysql -u root -p 通过初始密码登录MySQL 通...

Wang的专栏 6258

【信息科学与工程学】【数据中心】计算机科学与自动化——四十五篇 云原生01

针对 AI/大数据/批处理场景,社区演化出多种调度器:调度器适用场景关键能力kube-batch​批处理调度公平共享、基于队列调度、作业优先级Volcano​HPC / AI / 大数据PodGroups 协同调度、作业依赖、队列管理Kueue​队列式批调度配额管理、借用/预留、抢占YuniKorn​大数据 / ML层级队列、跨队列公平共享、Gang scheduling​微服务 + AI 混部基于 QoS 的精细化编排与隔离​长运行集群。

weixin_49199313的博客 19

mysql数据库的一些简单的sql语句 内连接 - 表的关联查询

# 创建一个user表 create table users( id int primary key auto_increment, name varchar(20), dpt_id int ); # 向user表中插入数据 insert into users values (null,'刘备',1), (null,'关羽',2), (null,'赵

Wang的专栏 4264

AMD显卡跑Ollama大模型?手把手教你搞定Windows下GPU识别与加速(以RX 9600XT为例)

本文详细指导如何在Windows系统下使用AMD显卡(如RX 9600XT)运行Ollama大模型,解决GPU识别与加速问题。通过获取非官方Ollama版本、替换ROCm库文件等步骤,实现高效的GPU加速推理,提升大语言模型的运行效率。

weixin_28707365的博客 485

【深度学习】肺结节分割项目实战一:处理数据集

一、LIDC-IDRI数据集简介 官方网站 肺图像数据库协会的图像收集(LIDC-IDRI)包括诊断和带有病变注释标记的肺癌筛查胸部CT。这是一个网络公开的国际资源,用于肺癌检测和诊断的计算机辅助诊断(CAD)方法的开发、培训和评估。 数据集包含1018个病例,每个病例包括来自临床胸部CT扫描的图像和一个相关的XML文件,该文件记录了由四名经验丰富的胸部放射科医生进行的两阶段图像注释过程的结果。在最初的盲读阶段,每个放射科医生独立审查每个CT扫描,并标记出属于三种类型之一的病变(“结节>= 3mm”,

weixin_42182906的博客 1万+

数据库、数据库类型、RDBMS以及MySQL

什么是数据库 数据库 就是按一定的结构来组织、存储和管理数据的仓库 可以很方便的进行crud, 能提供多个用户共享、具有尽可能小的冗余度、与应用程序批次独立的数据集合。 其他持久储存缺点:文件操作(不灵活) 数据库类型 包括 : 关系型 和 非关系型 【关系型】 MySQL MariaDB PostgreSQL Microsoft SQL Server Oracle数据库 Sybase 【...

Wang的专栏 4039

​基于stm32的智能空气加湿器设计(含源代码和Proteus仿真)

课程设计分享

LoongSTUDIO的博客 2929

Eggjs笔记:Eggjs集成ElasticSearch及CRUD操作

相关文档 https://www.elastic.co/guide/index.html https://www.elastic.co/guide/en/elasticsearch/client https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.html https://www.elastic.co/guide/en/elasticsearch/client/javascrip

Wang的专栏 3530

Android音频学习(十四)——加载音频设备

loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。

miemie2014的博客 1732

Mid-360激光雷达与Fast-LIO2实战:从环境搭建到实时点云建图

本文提供Livox Mid-360激光雷达与Fast-LIO2算法从零开始的实战教程。详细介绍了在Ubuntu和ROS环境下进行系统配置、依赖安装、硬件连接与网络设置的完整流程,并指导如何运行算法实现实时点云建图与可视化,最后总结了关键参数调优与常见问题排查方法。

weixin_29300241的博客 153

Redis: 集群高可用之故障转移和集群迁移

若要检查源和目标是否数据统一,还可选择阿里配套工具RedisFullCheck。3.4 使用 RedisFullCheck 工具检查。下载官方编译好的工具包,直接解压后就能使用。故障转移,包括自动故障转移和手动故障转移。运行之后,就给一个反馈结果,如果是。1.2 原集群与目标集群结构不一致。1.1 原集群与目标集群结构一致。2 ) 手动故障转移。

Wang的专栏 2918

认知网络分析实战:用Python复现课堂对话研究(含LSA代码)

本文通过Python实战,详细演示了如何运用认知网络分析(ENA)和滞后序列分析(LSA)两种方法,对课堂对话数据进行深度挖掘。文章提供了从数据清洗、行为编码到网络构建、序列统计及可视化的完整代码流程,帮助教育研究者和数据分析师量化分析对话中的认知结构与动态互动模式,从而获得超越文本表面的研究洞见。

weixin_28559803的博客 155

Python笔记:基于Django框架的数据库设计

概述 需要根据《项目建议书》、《需求说明书》、界面原型、各种标准规范对数据库进行设计, 我们目前先参考这一设计图 结构设计 1 ) 找实体 实体是实体-关系模型的基本对象, 是现实世界中各种事物的抽象。 凡是可以相互区 开并可以被识 的事、物、概念等对象均可认为是实体。 基本的实体列表如下: 会员 类别 商品 订单 订单详情 收货地址 商品评论 商品图片 友情链接 站内公告 … ...

Wang的专栏 2772

ComfyUI-controlnet控制出图

提供加载预处理器节点。

Bu2n的博客 5497

FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四

FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四

坚韧与专注 2164

Elastic Stack梳理:集群搭建指南之高可用架构与实战部署

本文介绍了Elasticsearch分布式架构和Cerebro监控工具的部署策略。主要内容包括: ES集群角色划分(主节点、数据节点、协调节点)及功能说明 Cerebro监控工具的独立部署方法和访问方式 集群拓扑规划示例,包含节点IP分配和架构拓扑图 各类型节点的配置原则和数量计算公式 高可用主节点配置要点及示例配置 生产环境优化建议,包括分片规划、硬件配置和安全措施 文章提供了完整的集群部署方案,涵盖从基础概念到具体实施的各个环节,适用于不同规模的ES集群建设。

Wang的专栏 2545

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Redis: 集群环境搭建,集群状态检查,分析主从日志,查看集群信息

当从节点获得足够多的选票时,它就会成为新的主节点,并增加自己的configEpoch来更新槽位配置。在Redis集群中,纪元的更新通常是由节点间的通信和状态变更触发的。例如,当某个节点接收到来自其他节点的状态变更通知时,它会比较通知中的纪元与自己的纪元。如果通知中的纪元更大,则更新自己的纪元。确保集群状态的一致性:通过递增的纪元,集群中的节点可以确保它们对集群状态的认知是一致的。通过递增的纪元版本号,集群中的节点可以确保它们对集群状态的认知是一致的,并解决可能出现的配置冲突问题。4 )纪元的更新机制。

Wang的专栏 2464

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MySQL: 数据库性能的决定性因素之从双十一大促高并发场景看系统瓶颈与优化路径

电商大促期间,数据库面临高并发写入、连接数暴增、慢查询积压等核心挑战。本文分析了锁竞争、主从延迟等关键性能瓶颈,并提出多种优化方案:1)使用乐观锁通过版本号控制库存超卖;2)CAS机制实现无锁并发;3)分布式锁协调多节点操作。这些方案在保证数据一致性的同时提升吞吐量,适用于库存扣减、订单创建等典型场景,有效解决数据库扩展难题。

Wang的专栏 2426

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Redis: Sentinel哨兵监控架构及环境搭建

在主从模式下,我们通过从节点只读模式提高了系统的并发能力并发不断增加,只需要扩展从节点即可,只要主从服务器之间,网络连接正常主服务器就会将写入自己的数据同步更新给从服务器,从而保证主从服务器的数据相同在这种架构下,它仍然是有一些缺点的,比如说它的可靠性保证不是很好,因为主从模式下,主节点故障了便无法提供写入的服务现在,我们通过哨兵来解决这个问题然后,主节点其实写的压力也是并没有被释放的包括主从之间的数据是相同的,它还有数据冗余一个问题后面集群也会解决这个问题。

Wang的专栏 2181

MongoDB小课堂: 高级查询操作符与游标管理综合指南之深度整合逻辑操作符、字段处理、数组查询与游标控制的最佳实践

MongoDB查询操作符与游标管理摘要 本文整合了MongoDB常用查询操作符和游标管理的关键知识点: 比较操作符: $in和$nin用于多值匹配,注意$nin会包含字段缺失文档 结合$exists可处理字段缺失问题 逻辑操作符: $and可简写为逗号分隔条件 $or可用$in优化等值查询性能 $not和$nor需谨慎处理字段缺失 字段操作符: $exists检查字段存在性 $type支持按BSON类型筛选 数组操作符: $all要求包含所有指定元素 $elemMatch匹配满足条件的数组元素 正则表达式:

Wang的专栏 2145

Redis: 集群测试和集群原理

Redis Cluster 没有单机那种 16个数据库 (0 - 15) 数据库的概念了,就是我们已经看不到数据库了。而是分成了 16384 个 slots (槽位) ,每个节点负责其中一部分槽位,槽位的信息存储于每个节点中。2 ) 16384 个 slots (槽位)那我们客户端这边是怎么来操作集群的呢?1 ) SET/GET 命令。2 ) 开启从节点只读模式。

Wang的专栏 2102

Eggjs笔记:详解Mongoose的聚合管道以及populate实现关联查询

基于mongodb的聚合管道 此处忽略之前mongodb在eggjs中需要配置的步骤,前文已有说明,现在开始在controller中调用(应该封装到service中的,仅作为示例) const result = await this.app.mongo.aggregate('order', { pipeline: [ { $lookup: {...

Wang的专栏 2096

MySQL: 数据库监控核心要素与实施策略

数据库监控是确保系统稳定的关键,涵盖服务可用性、性能、主从复制和资源使用等方面。核心监控包括:通过真实连接和查询验证数据库可用性;跟踪QPS、TPS和并发线程数等性能指标;监控主从复制的链路状态和延迟;以及关注磁盘空间等服务器资源。实现方案包括网络连接验证、读写测试和连接数阈值监控。性能监控需持续记录数据趋势,并采用精准方法检测阻塞事务和复制延迟。全面的数据库监控能有效预防故障,保障系统稳定运行。

Wang的专栏 2095

MySQL: 索引优化策略详解:核心原则、高级应用与维护实践

本文介绍了数据库索引优化的核心策略。第一部分重点讲解高效索引设计原则:禁止在索引列使用表达式或函数;合理使用前缀索引以平衡选择性和存储空间;设计联合索引时应优先考虑高频查询、高选择性和小宽度列;以及利用覆盖索引减少回表查询。第二部分探讨索引的高级应用,特别强调通过合理设计索引优化排序操作。文章指出索引列顺序需与ORDER BY完全一致,并分析了InnoDB与MyISAM存储引擎在排序支持上的差异。通过实际SQL示例展示了索引优化前后的性能差异,为数据库性能调优提供了实用指导。

Wang的专栏 2061

告别规则黑盒:基于JVS-Rules的风控规则治理实践——可视化决策编排+血缘追踪+版本快照

可读’——通过决策流图谱与业务语义节点,让非技术人员理解逻辑;‘可溯’——依赖规则版本快照与执行日志,实现任意交易的全链路回放;‘可担责’——基于血缘追踪与权限基线,清晰界定业务定义、技术实现、合规验证三方责任。这三者共同构成风控规则治理的三角支柱,将隐性经验转化为可版本化、可审计、可协同的组织级数字资产。

weixin_42054392的博客 445
上一篇: Elastic Stack梳理:动态控制、多字段优化与工程集成
下一篇: Elastic Stack梳理:深度解析Elasticsearch分布式查询机制与相关性算分优化实践
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值