欢迎光临
我们一直在努力

Elasticsearch 数据一致性与可靠性保障机制

Elasticsearch 数据一致性与可靠性保障机制

    • 一、前言
    • 二、一句话总结
    • 三、Elasticsearch 保证数据一致性 & 可靠性的 8 大核心机制
      • 1. 副本机制(Replica)—— 高可靠基石
      • 2. 主分片 + 副本同步写入机制(核心一致性保证)
      • 3. 事务日志(Translog)—— 防止断电丢数据
      • 4. 版本号控制(Version)—— 乐观锁,保证并发一致性
      • 5. 分段提交(Segment Commit)+ 持久化
      • 6. 自动故障转移(Auto Failover)
      • 7. 确认写入机制(Wait For Active Shards)
      • 8. 磁盘水位线保护
    • 四、数据写入完整流程(一致性最强版)
    • 五、ES 如何保证强一致性?
      • 满足两大分布式一致性原则:
    • 六、ES 如何保证数据可靠性?
    • 七、核心总结(面试必背)
      • Elasticsearch 保证数据一致性的机制:
      • Elasticsearch 保证数据可靠性的机制:
    • 最终一句话(最经典)

🌺The Begin🌺点点关注,收藏不迷路🌺

一、前言

很多人担心:ES 是分布式系统,会不会丢数据?会不会不一致? 答案是:不会,只要正确配置,Elasticsearch 数据非常安全可靠。

这篇文章带你彻底搞懂: ES 如何保证数据不丢失、数据一致、高可靠、高可用。


二、一句话总结

Elasticsearch 通过 副本机制、同步写入、版本控制、事务日志、故障自动转移 五大核心机制,确保数据强一致性与高可靠性。


三、Elasticsearch 保证数据一致性 & 可靠性的 8 大核心机制

1. 副本机制(Replica)—— 高可靠基石

  • 每个主分片都有 N 个副本
  • 主分片与副本绝不放在同一个节点
  • 一个节点宕机,数据依然完整
  • 副本还能提供负载均衡 + 高可用

作用:数据绝对不丢。


2. 主分片 + 副本同步写入机制(核心一致性保证)

写入流程:

  • 客户端写入协调节点
  • 路由到主分片
  • 主分片写入成功
  • 同步复制到所有副本分片
  • 全部成功才返回成功
  • #mermaid-svg-TlBFmAavFzX04wGS{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TlBFmAavFzX04wGS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TlBFmAavFzX04wGS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TlBFmAavFzX04wGS .error-icon{fill:#552222;}#mermaid-svg-TlBFmAavFzX04wGS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TlBFmAavFzX04wGS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TlBFmAavFzX04wGS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TlBFmAavFzX04wGS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TlBFmAavFzX04wGS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TlBFmAavFzX04wGS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TlBFmAavFzX04wGS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TlBFmAavFzX04wGS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TlBFmAavFzX04wGS .marker.cross{stroke:#333333;}#mermaid-svg-TlBFmAavFzX04wGS svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TlBFmAavFzX04wGS p{margin:0;}#mermaid-svg-TlBFmAavFzX04wGS .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-TlBFmAavFzX04wGS .cluster-label text{fill:#333;}#mermaid-svg-TlBFmAavFzX04wGS .cluster-label span{color:#333;}#mermaid-svg-TlBFmAavFzX04wGS .cluster-label span p{background-color:transparent;}#mermaid-svg-TlBFmAavFzX04wGS .label text,#mermaid-svg-TlBFmAavFzX04wGS span{fill:#333;color:#333;}#mermaid-svg-TlBFmAavFzX04wGS .node rect,#mermaid-svg-TlBFmAavFzX04wGS .node circle,#mermaid-svg-TlBFmAavFzX04wGS .node ellipse,#mermaid-svg-TlBFmAavFzX04wGS .node polygon,#mermaid-svg-TlBFmAavFzX04wGS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TlBFmAavFzX04wGS .rough-node .label text,#mermaid-svg-TlBFmAavFzX04wGS .node .label text,#mermaid-svg-TlBFmAavFzX04wGS .image-shape .label,#mermaid-svg-TlBFmAavFzX04wGS .icon-shape .label{text-anchor:middle;}#mermaid-svg-TlBFmAavFzX04wGS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TlBFmAavFzX04wGS .rough-node .label,#mermaid-svg-TlBFmAavFzX04wGS .node .label,#mermaid-svg-TlBFmAavFzX04wGS .image-shape .label,#mermaid-svg-TlBFmAavFzX04wGS .icon-shape .label{text-align:center;}#mermaid-svg-TlBFmAavFzX04wGS .node.clickable{cursor:pointer;}#mermaid-svg-TlBFmAavFzX04wGS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TlBFmAavFzX04wGS .arrowheadPath{fill:#333333;}#mermaid-svg-TlBFmAavFzX04wGS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TlBFmAavFzX04wGS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TlBFmAavFzX04wGS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TlBFmAavFzX04wGS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TlBFmAavFzX04wGS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TlBFmAavFzX04wGS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TlBFmAavFzX04wGS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TlBFmAavFzX04wGS .cluster text{fill:#333;}#mermaid-svg-TlBFmAavFzX04wGS .cluster span{color:#333;}#mermaid-svg-TlBFmAavFzX04wGS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TlBFmAavFzX04wGS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TlBFmAavFzX04wGS rect.text{fill:none;stroke-width:0;}#mermaid-svg-TlBFmAavFzX04wGS .icon-shape,#mermaid-svg-TlBFmAavFzX04wGS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TlBFmAavFzX04wGS .icon-shape p,#mermaid-svg-TlBFmAavFzX04wGS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TlBFmAavFzX04wGS .icon-shape .label rect,#mermaid-svg-TlBFmAavFzX04wGS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TlBFmAavFzX04wGS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TlBFmAavFzX04wGS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TlBFmAavFzX04wGS :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    客户端写入

    主分片

    副本1

    副本2

    全部写入成功

    返回成功

    这就是 ES 的强一致性模型。


    3. 事务日志(Translog)—— 防止断电丢数据

    • 数据写入内存时,同时写入 Translog
    • 日志落盘,断电不丢失
    • 崩溃重启后自动恢复数据
    • 默认每请求刷新落盘(最高可靠性)

    作用:机器断电数据也不会丢。


    4. 版本号控制(Version)—— 乐观锁,保证并发一致性

    • 每个文档有 _version 版本号
    • 每次修改 +1
    • 并发修改时版本不匹配则拒绝
    • 保证多线程并发下数据不乱

    作用:并发更新数据一致。


    5. 分段提交(Segment Commit)+ 持久化

    • ES 定期把内存数据刷到磁盘(segment)
    • 一旦刷盘,数据永久落地
    • 结合 Translog,保证不丢数据

    6. 自动故障转移(Auto Failover)

    • 节点宕机
    • 主节点立即检测
    • 副本分片自动提升为主分片
    • 集群恢复服务
    • 数据依然完整

    作用:节点挂了服务不中断、数据不丢失。


    7. 确认写入机制(Wait For Active Shards)

    写入时可配置:

    • wait_for_active_shards=all
    • 必须等待足够多的分片存活才能写入
    • 防止分片不足导致数据不一致

    8. 磁盘水位线保护

    • 低水位 85%
    • 高水位 90%
    • 停止写入水位 95%
    • 防止磁盘满导致数据异常

    四、数据写入完整流程(一致性最强版)

    #mermaid-svg-dG0zJHO6bDxllUiv{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-dG0zJHO6bDxllUiv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-dG0zJHO6bDxllUiv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-dG0zJHO6bDxllUiv .error-icon{fill:#552222;}#mermaid-svg-dG0zJHO6bDxllUiv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dG0zJHO6bDxllUiv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-dG0zJHO6bDxllUiv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dG0zJHO6bDxllUiv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dG0zJHO6bDxllUiv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-dG0zJHO6bDxllUiv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dG0zJHO6bDxllUiv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dG0zJHO6bDxllUiv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dG0zJHO6bDxllUiv .marker.cross{stroke:#333333;}#mermaid-svg-dG0zJHO6bDxllUiv svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dG0zJHO6bDxllUiv p{margin:0;}#mermaid-svg-dG0zJHO6bDxllUiv .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-dG0zJHO6bDxllUiv .cluster-label text{fill:#333;}#mermaid-svg-dG0zJHO6bDxllUiv .cluster-label span{color:#333;}#mermaid-svg-dG0zJHO6bDxllUiv .cluster-label span p{background-color:transparent;}#mermaid-svg-dG0zJHO6bDxllUiv .label text,#mermaid-svg-dG0zJHO6bDxllUiv span{fill:#333;color:#333;}#mermaid-svg-dG0zJHO6bDxllUiv .node rect,#mermaid-svg-dG0zJHO6bDxllUiv .node circle,#mermaid-svg-dG0zJHO6bDxllUiv .node ellipse,#mermaid-svg-dG0zJHO6bDxllUiv .node polygon,#mermaid-svg-dG0zJHO6bDxllUiv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dG0zJHO6bDxllUiv .rough-node .label text,#mermaid-svg-dG0zJHO6bDxllUiv .node .label text,#mermaid-svg-dG0zJHO6bDxllUiv .image-shape .label,#mermaid-svg-dG0zJHO6bDxllUiv .icon-shape .label{text-anchor:middle;}#mermaid-svg-dG0zJHO6bDxllUiv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-dG0zJHO6bDxllUiv .rough-node .label,#mermaid-svg-dG0zJHO6bDxllUiv .node .label,#mermaid-svg-dG0zJHO6bDxllUiv .image-shape .label,#mermaid-svg-dG0zJHO6bDxllUiv .icon-shape .label{text-align:center;}#mermaid-svg-dG0zJHO6bDxllUiv .node.clickable{cursor:pointer;}#mermaid-svg-dG0zJHO6bDxllUiv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-dG0zJHO6bDxllUiv .arrowheadPath{fill:#333333;}#mermaid-svg-dG0zJHO6bDxllUiv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dG0zJHO6bDxllUiv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dG0zJHO6bDxllUiv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dG0zJHO6bDxllUiv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-dG0zJHO6bDxllUiv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dG0zJHO6bDxllUiv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-dG0zJHO6bDxllUiv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dG0zJHO6bDxllUiv .cluster text{fill:#333;}#mermaid-svg-dG0zJHO6bDxllUiv .cluster span{color:#333;}#mermaid-svg-dG0zJHO6bDxllUiv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dG0zJHO6bDxllUiv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-dG0zJHO6bDxllUiv rect.text{fill:none;stroke-width:0;}#mermaid-svg-dG0zJHO6bDxllUiv .icon-shape,#mermaid-svg-dG0zJHO6bDxllUiv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-dG0zJHO6bDxllUiv .icon-shape p,#mermaid-svg-dG0zJHO6bDxllUiv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-dG0zJHO6bDxllUiv .icon-shape .label rect,#mermaid-svg-dG0zJHO6bDxllUiv .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-dG0zJHO6bDxllUiv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-dG0zJHO6bDxllUiv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-dG0zJHO6bDxllUiv :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    客户端写入

    写入主分片

    写入Translog(落盘)

    同步到副本分片

    所有分片确认成功

    返回客户端成功

    只要返回 200 OK,数据 100% 安全。


    五、ES 如何保证强一致性?

    满足两大分布式一致性原则:

  • 写入时主副分片全部同步成功才返回
  • 读取时从最新主/副分片读取
  • 所以: ES 是 强一致性 系统(Linearizability) 不是最终一致性!


    六、ES 如何保证数据可靠性?

  • 多副本存储
  • 跨节点、跨机架
  • 事务日志永不丢
  • 故障自动转移
  • 写入确认机制
  • 磁盘保护机制
  • 只要配置 1 个副本,数据就有 99.999% 可靠性。


    七、核心总结(面试必背)

    Elasticsearch 保证数据一致性的机制:

  • 主分片 + 多副本同步写入
  • 全部成功才返回
  • 版本乐观锁控制并发
  • 强一致性模型
  • Elasticsearch 保证数据可靠性的机制:

  • 副本机制
  • Translog 事务日志
  • 故障自动转移
  • 磁盘水位保护
  • 持久化落盘

  • 最终一句话(最经典)

    Elasticsearch 通过同步多副本写入、事务日志、版本控制、自动故障转移,实现了强一致性与极高的数据可靠性,完全胜任金融、电商、核心业务系统。


    在这里插入图片描述

    🌺The End🌺点点关注,收藏不迷路🌺

    赞(0)
    未经允许不得转载:171主机测评 » Elasticsearch 数据一致性与可靠性保障机制
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址