Elasticsearch之下

上一篇上一篇

🛡️ 第六幕:集群容灾与扩展

1. 脑裂(Split Brain)

  • 网络分区 → 多个 Master 同时存在 → 数据写坏
  • 对策
    • discovery.zen.minimum_master_nodes = (master_eligible_nodes / 2) + 1(7.x 前)
    • 7.x+ 用 Raft,自动防脑裂

场景:某台服务器宕机

  • 如果挂的是 Data Node
    • Primary Shard 挂了?→ 自动提升 Replica 为 Primary
    • 集群状态变 Yellow(副本缺失),但服务不中断
  • 如果挂的是 Master Node
    • 其他 Master-eligible 节点自动选举新老大(基于 Zen Discovery 或新版 Raft)

如何扩容?

  • 加机器 → 自动加入集群
  • 索引分片会自动 rebalance(数据迁移)
  • 查询自动路由到新节点 → 无缝扩展

💡 最佳实践

  • 至少 3 个 Master 节点(防脑裂)
  • Data 节点按角色分离(hot-warm-cold 架构)

第七幕:调优与问题

瓶颈 优化手段
Refresh 太频繁 refresh_interval: 30s
Translog 同步太勤 translog.durability: async
副本太多 写入时设 replicas: 0,写完再加
Bulk 太小 单次 Bulk 5--15MB(约 1000--5000 docs)
Mapping 动态膨胀 关闭 dynamic: strict

1. 慢查询雪崩

  • 一个复杂聚合占满 CPU → 其他查询排队 → 集群 hang
  • 对策
    • search.default_search_timeout(超时熔断)
    • indices.breaker.*(内存熔断)
    • 监控 thread_pool.search.rejected

2. Field Data 爆炸

  • text 字段做聚合 → 加载到堆内存(Field Data)
  • 对策永远不要对 text 做聚合!用 keyword

3.极限写入架构:

Logstash/Filebeat → Kafka → Spark/Flink → ES Bulk Write

  • 中间加消息队列削峰
  • Flink 做窗口聚合,减少 ES 写入量

🚫 ES 对 JVM 的特殊要求:

  • 堆内存 ≤ 32GB(否则指针压缩失效,内存翻倍)
  • 堆内存 ≤ 物理内存 50%(留一半给 OS Page Cache)
  • 禁用 Swapbootstrap.memory_lock: true
区域 用途 调优建议
Heap 存储查询上下文、聚合中间结果 ≤ 31GB,G1GC
Page Cache 缓存 Segment 文件 越大越好(靠 OS 管理)
Translog 事务日志 SSD 必备
场景 为什么不适合 正确姿势
强事务 ES 不支持 ACID 用 MySQL,ES 只做搜索同步
频繁更新 更新 = 删除+重建,性能差 少量更新 or 用 _update 脚本
大宽表 JOIN 不支持 JOIN 用 Nested / Parent-Child(慎用)或应用层关联
精确计数(10亿级) total: 10000+ 是估算 track_total_hits=true(性能代价大)

记住
ES 是"搜索加速器",不是"主数据库"

🎯 终极总结

原则 实现 目的
不可变性 Immutable Segments 高并发、缓存友好
近实时 Refresh + Translog 写入吞吐 vs 可见性平衡
列存聚合 Doc Values 高效 BI 分析
分片自治 Shard = Lucene Index 水平扩展
协调解耦 Coordinating Node 无状态,易扩展

ES 不是银弹,而是一套精密的权衡系统

  • 空间换时间(Doc Values + 副本)
  • 延迟换吞吐(Refresh 间隔)
  • 复杂度换能力(分布式协调)

真正的大神,不是会用 ES,而是知道什么时候不该用 ES

超能力 技术实现 效果
闪电搜索 倒排索引 + 分词 毫秒级全文检索
横向扩展 分片 + 集群 PB 级数据轻松扛
高可用 副本 + 自动故障转移 节点挂了照常工作
智能分析 聚合 + Doc Values 实时 BI 报表
近实时 Refresh + Translog 写入1秒可见,不丢数据

"如果你还在用 LIKE %keyword% 做搜索,那你不是在查数据,你是在给用户表演'系统正在思考人生'。"

相关推荐
阿星AI工作室8 小时前
刘润年中大课笔记:一句话说清AI落地之战的本质
大数据·人工智能·创业创新·商业
不仙52011 小时前
VMware Workstation 26.0.0 在 Ubuntu 24.04 (内核 6.17.0) 上的安装与内核模块编译问题
linux·ubuntu·elasticsearch
1892280486112 小时前
NY352固态MT29F32T08GWLBHD6-24QJ:B
大数据·服务器·人工智能·科技·缓存
不开大的凯207712 小时前
麦当秀AiPPT战略转向:从SaaS订阅迈向Token经济,AI办公定价模式迎来新探索
大数据·人工智能
程序鉴定师12 小时前
西安小程序制作的可靠选择与发展前景
大数据·小程序
黎阳之光12 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
qziovv13 小时前
Git 回退场景
大数据·git·elasticsearch
ZeroNews内网穿透14 小时前
面向 AI 协作的本地客户端能力:ZeroNews Agent Skills
大数据·人工智能·elasticsearch
SelectDB14 小时前
Agent 时代,为什么传统的可观测方案不适用了?
大数据·数据库·数据分析
Elastic 中国社区官方博客14 小时前
快 12 倍的 Elasticsearch 向量索引:使用 GPU 和 CPU 分层部署 NVIDIA cuVS
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·nvidia