【ES实战】 低版本Elasticsearch(不具备CCR)集群迁移

低版本Elasticsearch(不具备CCR)集群迁移方案

文章目录

一、迁移背景与目标

将现有 ES 集群 A 中的所有索引完整迁移至新集群 B,验证无误后安全下线集群 A。根据索引的读写特征,将所有待迁移索引分为三类,分别制定差异化迁移策略。

分类 特征描述 数量占比
静态索引 只读不写,数据不再变化
一类变化索引 纯新增写入,历史数据不更新
二类变化索引 既有新增写入,也有历史数据更新

二、总体迁移架构

#mermaid-svg-ZteMneI2r30KaetN{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-ZteMneI2r30KaetN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZteMneI2r30KaetN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZteMneI2r30KaetN .error-icon{fill:#552222;}#mermaid-svg-ZteMneI2r30KaetN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZteMneI2r30KaetN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZteMneI2r30KaetN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZteMneI2r30KaetN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZteMneI2r30KaetN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZteMneI2r30KaetN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZteMneI2r30KaetN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZteMneI2r30KaetN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZteMneI2r30KaetN .marker.cross{stroke:#333333;}#mermaid-svg-ZteMneI2r30KaetN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZteMneI2r30KaetN p{margin:0;}#mermaid-svg-ZteMneI2r30KaetN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZteMneI2r30KaetN .cluster-label text{fill:#333;}#mermaid-svg-ZteMneI2r30KaetN .cluster-label span{color:#333;}#mermaid-svg-ZteMneI2r30KaetN .cluster-label span p{background-color:transparent;}#mermaid-svg-ZteMneI2r30KaetN .label text,#mermaid-svg-ZteMneI2r30KaetN span{fill:#333;color:#333;}#mermaid-svg-ZteMneI2r30KaetN .node rect,#mermaid-svg-ZteMneI2r30KaetN .node circle,#mermaid-svg-ZteMneI2r30KaetN .node ellipse,#mermaid-svg-ZteMneI2r30KaetN .node polygon,#mermaid-svg-ZteMneI2r30KaetN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZteMneI2r30KaetN .rough-node .label text,#mermaid-svg-ZteMneI2r30KaetN .node .label text,#mermaid-svg-ZteMneI2r30KaetN .image-shape .label,#mermaid-svg-ZteMneI2r30KaetN .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZteMneI2r30KaetN .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZteMneI2r30KaetN .rough-node .label,#mermaid-svg-ZteMneI2r30KaetN .node .label,#mermaid-svg-ZteMneI2r30KaetN .image-shape .label,#mermaid-svg-ZteMneI2r30KaetN .icon-shape .label{text-align:center;}#mermaid-svg-ZteMneI2r30KaetN .node.clickable{cursor:pointer;}#mermaid-svg-ZteMneI2r30KaetN .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZteMneI2r30KaetN .arrowheadPath{fill:#333333;}#mermaid-svg-ZteMneI2r30KaetN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZteMneI2r30KaetN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZteMneI2r30KaetN .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZteMneI2r30KaetN .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZteMneI2r30KaetN .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZteMneI2r30KaetN .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZteMneI2r30KaetN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZteMneI2r30KaetN .cluster text{fill:#333;}#mermaid-svg-ZteMneI2r30KaetN .cluster span{color:#333;}#mermaid-svg-ZteMneI2r30KaetN 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-ZteMneI2r30KaetN .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZteMneI2r30KaetN rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZteMneI2r30KaetN .icon-shape,#mermaid-svg-ZteMneI2r30KaetN .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZteMneI2r30KaetN .icon-shape p,#mermaid-svg-ZteMneI2r30KaetN .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZteMneI2r30KaetN .icon-shape .label rect,#mermaid-svg-ZteMneI2r30KaetN .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZteMneI2r30KaetN .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZteMneI2r30KaetN .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZteMneI2r30KaetN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 目标集群 B
迁移管道
源集群 A(待下线)
一次性迁移
历史+增量
历史+增量+停写
静态索引
一类变化索引
二类变化索引
Reindex / Spark
Reindex + 增量同步
Reindex + 多轮增量

  • 停写窗口最终同步
    静态索引
    一类变化索引
    二类变化索引

三、分类型迁移方案详解

3.1 静态索引迁移(只读索引)

流程示意

#mermaid-svg-rAaH7jJDHj3eGucV{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-rAaH7jJDHj3eGucV .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rAaH7jJDHj3eGucV .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rAaH7jJDHj3eGucV .error-icon{fill:#552222;}#mermaid-svg-rAaH7jJDHj3eGucV .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rAaH7jJDHj3eGucV .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rAaH7jJDHj3eGucV .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rAaH7jJDHj3eGucV .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rAaH7jJDHj3eGucV .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rAaH7jJDHj3eGucV .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rAaH7jJDHj3eGucV .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rAaH7jJDHj3eGucV .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rAaH7jJDHj3eGucV .marker.cross{stroke:#333333;}#mermaid-svg-rAaH7jJDHj3eGucV svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rAaH7jJDHj3eGucV p{margin:0;}#mermaid-svg-rAaH7jJDHj3eGucV .edge{stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .section--1 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section--1 path,#mermaid-svg-rAaH7jJDHj3eGucV .section--1 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section--1 text{fill:#ffffff;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth--1{stroke-width:17;}#mermaid-svg-rAaH7jJDHj3eGucV .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:#ffffff;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-0 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-0 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-0 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-0 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-0{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-0{stroke-width:14;}#mermaid-svg-rAaH7jJDHj3eGucV .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-1 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-1 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-1 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-1 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-1{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-1{stroke-width:11;}#mermaid-svg-rAaH7jJDHj3eGucV .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-2 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-2 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-2 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-2 text{fill:#ffffff;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-2{stroke-width:8;}#mermaid-svg-rAaH7jJDHj3eGucV .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:#ffffff;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-3 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-3 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-3 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-3 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-3{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-3{stroke-width:5;}#mermaid-svg-rAaH7jJDHj3eGucV .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-4 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-4 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-4 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-4 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-4{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-4{stroke-width:2;}#mermaid-svg-rAaH7jJDHj3eGucV .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-5 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-5 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-5 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-5 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-5{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-5{stroke-width:-1;}#mermaid-svg-rAaH7jJDHj3eGucV .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-6 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-6 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-6 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-6 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-6{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-6{stroke-width:-4;}#mermaid-svg-rAaH7jJDHj3eGucV .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-7 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-7 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-7 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-7 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-7{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-7{stroke-width:-7;}#mermaid-svg-rAaH7jJDHj3eGucV .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-8 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-8 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-8 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-8 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-8{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-8{stroke-width:-10;}#mermaid-svg-rAaH7jJDHj3eGucV .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-9 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-9 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-9 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-9 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-9{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-9{stroke-width:-13;}#mermaid-svg-rAaH7jJDHj3eGucV .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-10 rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-10 path,#mermaid-svg-rAaH7jJDHj3eGucV .section-10 circle,#mermaid-svg-rAaH7jJDHj3eGucV .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-10 text{fill:black;}#mermaid-svg-rAaH7jJDHj3eGucV .node-icon-10{font-size:40px;color:black;}#mermaid-svg-rAaH7jJDHj3eGucV .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .edge-depth-10{stroke-width:-16;}#mermaid-svg-rAaH7jJDHj3eGucV .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-rAaH7jJDHj3eGucV .lineWrapper line{stroke:black;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled,#mermaid-svg-rAaH7jJDHj3eGucV .disabled circle,#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:lightgray;}#mermaid-svg-rAaH7jJDHj3eGucV .disabled text{fill:#efefef;}#mermaid-svg-rAaH7jJDHj3eGucV .section-root rect,#mermaid-svg-rAaH7jJDHj3eGucV .section-root path,#mermaid-svg-rAaH7jJDHj3eGucV .section-root circle{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-rAaH7jJDHj3eGucV .section-root text{fill:#ffffff;}#mermaid-svg-rAaH7jJDHj3eGucV .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-rAaH7jJDHj3eGucV .edge{fill:none;}#mermaid-svg-rAaH7jJDHj3eGucV .eventWrapper{filter:brightness(120%);}#mermaid-svg-rAaH7jJDHj3eGucV :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 准备阶段 Mapping/Settings 同步至 B 创建目标索引结构 数据迁移 Reindex 或者 Spark 按数据量进行分批次传输 数据校验 文档数量比对 抽样内容校验 流量切换 读请求灰度切至 B 全量切换 清理 集群 A 保留观察 ≥7天 确认无误后删除 静态索引迁移时间线

评估维度 评级 说明
数据一致性风险 数据不变,一次迁移即可保证一致
业务影响 不涉及写入,可随时执行
实施复杂度 简单 标准操作,无需额外开发
回滚难度 极低 集群 A 数据未删除前可随时回退

3.2 一类变化索引迁移(纯新增写入)

流程示意

#mermaid-svg-5nwfAH74N2uh5ZFe{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-5nwfAH74N2uh5ZFe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5nwfAH74N2uh5ZFe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5nwfAH74N2uh5ZFe .error-icon{fill:#552222;}#mermaid-svg-5nwfAH74N2uh5ZFe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5nwfAH74N2uh5ZFe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5nwfAH74N2uh5ZFe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5nwfAH74N2uh5ZFe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5nwfAH74N2uh5ZFe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5nwfAH74N2uh5ZFe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5nwfAH74N2uh5ZFe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5nwfAH74N2uh5ZFe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5nwfAH74N2uh5ZFe .marker.cross{stroke:#333333;}#mermaid-svg-5nwfAH74N2uh5ZFe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5nwfAH74N2uh5ZFe p{margin:0;}#mermaid-svg-5nwfAH74N2uh5ZFe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5nwfAH74N2uh5ZFe .cluster-label text{fill:#333;}#mermaid-svg-5nwfAH74N2uh5ZFe .cluster-label span{color:#333;}#mermaid-svg-5nwfAH74N2uh5ZFe .cluster-label span p{background-color:transparent;}#mermaid-svg-5nwfAH74N2uh5ZFe .label text,#mermaid-svg-5nwfAH74N2uh5ZFe span{fill:#333;color:#333;}#mermaid-svg-5nwfAH74N2uh5ZFe .node rect,#mermaid-svg-5nwfAH74N2uh5ZFe .node circle,#mermaid-svg-5nwfAH74N2uh5ZFe .node ellipse,#mermaid-svg-5nwfAH74N2uh5ZFe .node polygon,#mermaid-svg-5nwfAH74N2uh5ZFe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5nwfAH74N2uh5ZFe .rough-node .label text,#mermaid-svg-5nwfAH74N2uh5ZFe .node .label text,#mermaid-svg-5nwfAH74N2uh5ZFe .image-shape .label,#mermaid-svg-5nwfAH74N2uh5ZFe .icon-shape .label{text-anchor:middle;}#mermaid-svg-5nwfAH74N2uh5ZFe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5nwfAH74N2uh5ZFe .rough-node .label,#mermaid-svg-5nwfAH74N2uh5ZFe .node .label,#mermaid-svg-5nwfAH74N2uh5ZFe .image-shape .label,#mermaid-svg-5nwfAH74N2uh5ZFe .icon-shape .label{text-align:center;}#mermaid-svg-5nwfAH74N2uh5ZFe .node.clickable{cursor:pointer;}#mermaid-svg-5nwfAH74N2uh5ZFe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5nwfAH74N2uh5ZFe .arrowheadPath{fill:#333333;}#mermaid-svg-5nwfAH74N2uh5ZFe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5nwfAH74N2uh5ZFe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5nwfAH74N2uh5ZFe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5nwfAH74N2uh5ZFe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5nwfAH74N2uh5ZFe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5nwfAH74N2uh5ZFe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5nwfAH74N2uh5ZFe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5nwfAH74N2uh5ZFe .cluster text{fill:#333;}#mermaid-svg-5nwfAH74N2uh5ZFe .cluster span{color:#333;}#mermaid-svg-5nwfAH74N2uh5ZFe 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-5nwfAH74N2uh5ZFe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5nwfAH74N2uh5ZFe rect.text{fill:none;stroke-width:0;}#mermaid-svg-5nwfAH74N2uh5ZFe .icon-shape,#mermaid-svg-5nwfAH74N2uh5ZFe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5nwfAH74N2uh5ZFe .icon-shape p,#mermaid-svg-5nwfAH74N2uh5ZFe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5nwfAH74N2uh5ZFe .icon-shape .label rect,#mermaid-svg-5nwfAH74N2uh5ZFe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5nwfAH74N2uh5ZFe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5nwfAH74N2uh5ZFe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5nwfAH74N2uh5ZFe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否





开始
Reindex 同步历史数据

(集群A持续写入中)
历史数据

同步完成?
记录同步截止时间点 T₁
增量同步:查询 A 中

time > T₁ 的新增文档
差异数据量

< 阈值?
记录新时间点 T₂

T₁ ← T₂
⏸️ 短暂停写

(秒级/分钟级/小时级)
最终增量同步
数据校验通过?
排查并修复
客户端读写切换至 B
完成

增量识别策略
策略 适用条件 优点 缺点
时间字段过滤 索引含可靠写入时间字段 实现简单,查询高效 毫秒级精度可能遗漏并发写入
_id 范围扫描 _id 单调递增(如自增ID) 无遗漏 依赖 ID 有序性,UUID 不适用
双写过渡 客户端可改造 零数据丢失 客户端写入延迟增加,改造成本高
业务字段 有特殊业务字段 实现简单,查询高效,零数据丢失
评估维度 评级 说明
数据一致性风险 增量窗口内可能存在少量遗漏
业务影响 轻微 最终切换需秒级停写
实施复杂度 中等 需开发增量同步逻辑与校验脚本
回滚难度 中等 切换后若发现问题需反向同步
建议
  • 采用多轮收敛策略:每轮增量同步后缩小时间窗口,通常 3~5 轮可将差异降至百条以内
  • 最终停写窗口控制在 5~10 秒内完成最终同步+校验

3.3 二类变化索引迁移(新增 + 更新)

流程示意

#mermaid-svg-VWHV6auYwtVuCpbK{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-VWHV6auYwtVuCpbK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VWHV6auYwtVuCpbK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VWHV6auYwtVuCpbK .error-icon{fill:#552222;}#mermaid-svg-VWHV6auYwtVuCpbK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VWHV6auYwtVuCpbK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VWHV6auYwtVuCpbK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VWHV6auYwtVuCpbK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VWHV6auYwtVuCpbK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VWHV6auYwtVuCpbK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VWHV6auYwtVuCpbK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VWHV6auYwtVuCpbK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VWHV6auYwtVuCpbK .marker.cross{stroke:#333333;}#mermaid-svg-VWHV6auYwtVuCpbK svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VWHV6auYwtVuCpbK p{margin:0;}#mermaid-svg-VWHV6auYwtVuCpbK .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VWHV6auYwtVuCpbK .cluster-label text{fill:#333;}#mermaid-svg-VWHV6auYwtVuCpbK .cluster-label span{color:#333;}#mermaid-svg-VWHV6auYwtVuCpbK .cluster-label span p{background-color:transparent;}#mermaid-svg-VWHV6auYwtVuCpbK .label text,#mermaid-svg-VWHV6auYwtVuCpbK span{fill:#333;color:#333;}#mermaid-svg-VWHV6auYwtVuCpbK .node rect,#mermaid-svg-VWHV6auYwtVuCpbK .node circle,#mermaid-svg-VWHV6auYwtVuCpbK .node ellipse,#mermaid-svg-VWHV6auYwtVuCpbK .node polygon,#mermaid-svg-VWHV6auYwtVuCpbK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VWHV6auYwtVuCpbK .rough-node .label text,#mermaid-svg-VWHV6auYwtVuCpbK .node .label text,#mermaid-svg-VWHV6auYwtVuCpbK .image-shape .label,#mermaid-svg-VWHV6auYwtVuCpbK .icon-shape .label{text-anchor:middle;}#mermaid-svg-VWHV6auYwtVuCpbK .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VWHV6auYwtVuCpbK .rough-node .label,#mermaid-svg-VWHV6auYwtVuCpbK .node .label,#mermaid-svg-VWHV6auYwtVuCpbK .image-shape .label,#mermaid-svg-VWHV6auYwtVuCpbK .icon-shape .label{text-align:center;}#mermaid-svg-VWHV6auYwtVuCpbK .node.clickable{cursor:pointer;}#mermaid-svg-VWHV6auYwtVuCpbK .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VWHV6auYwtVuCpbK .arrowheadPath{fill:#333333;}#mermaid-svg-VWHV6auYwtVuCpbK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VWHV6auYwtVuCpbK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VWHV6auYwtVuCpbK .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VWHV6auYwtVuCpbK .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VWHV6auYwtVuCpbK .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VWHV6auYwtVuCpbK .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VWHV6auYwtVuCpbK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VWHV6auYwtVuCpbK .cluster text{fill:#333;}#mermaid-svg-VWHV6auYwtVuCpbK .cluster span{color:#333;}#mermaid-svg-VWHV6auYwtVuCpbK 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-VWHV6auYwtVuCpbK .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VWHV6auYwtVuCpbK rect.text{fill:none;stroke-width:0;}#mermaid-svg-VWHV6auYwtVuCpbK .icon-shape,#mermaid-svg-VWHV6auYwtVuCpbK .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VWHV6auYwtVuCpbK .icon-shape p,#mermaid-svg-VWHV6auYwtVuCpbK .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VWHV6auYwtVuCpbK .icon-shape .label rect,#mermaid-svg-VWHV6auYwtVuCpbK .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VWHV6auYwtVuCpbK .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VWHV6auYwtVuCpbK .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VWHV6auYwtVuCpbK :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否





开始
Reindex 同步历史数据
多轮增量同步

(基于 update_time 追踪变更)
差异收敛步

至可接受范围?
通知业务方

预约停写窗口
⛔ 客户端停止写入
执行最终全量差异同步
B 集群数据

与 A 完全一致?
重试 / 人工介入
✅ 客户端读写切换至 B
验证通过?
回滚至集群 A
排查问题后重新迁移
迁移完成

评估维度 评级 说明
数据一致性风险 更新操作的增量识别复杂,易遗漏
业务影响 显著 必须停写,窗口大小取决于差异数据量
实施复杂度 复杂 需精确追踪更新、设计停写流程、准备回滚预案
回滚难度 较高 切换后若 B 数据异常,反向同步涉及更新合并
建议(重点)

存在历史数据更新的操作,导致无法消除停写窗口。

能做的优化是:尽量【缩小】停写窗口。
#mermaid-svg-vcr74OYJZuwiTRqj{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-vcr74OYJZuwiTRqj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-vcr74OYJZuwiTRqj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-vcr74OYJZuwiTRqj .error-icon{fill:#552222;}#mermaid-svg-vcr74OYJZuwiTRqj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vcr74OYJZuwiTRqj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-vcr74OYJZuwiTRqj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vcr74OYJZuwiTRqj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vcr74OYJZuwiTRqj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-vcr74OYJZuwiTRqj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vcr74OYJZuwiTRqj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vcr74OYJZuwiTRqj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vcr74OYJZuwiTRqj .marker.cross{stroke:#333333;}#mermaid-svg-vcr74OYJZuwiTRqj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vcr74OYJZuwiTRqj p{margin:0;}#mermaid-svg-vcr74OYJZuwiTRqj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vcr74OYJZuwiTRqj .cluster-label text{fill:#333;}#mermaid-svg-vcr74OYJZuwiTRqj .cluster-label span{color:#333;}#mermaid-svg-vcr74OYJZuwiTRqj .cluster-label span p{background-color:transparent;}#mermaid-svg-vcr74OYJZuwiTRqj .label text,#mermaid-svg-vcr74OYJZuwiTRqj span{fill:#333;color:#333;}#mermaid-svg-vcr74OYJZuwiTRqj .node rect,#mermaid-svg-vcr74OYJZuwiTRqj .node circle,#mermaid-svg-vcr74OYJZuwiTRqj .node ellipse,#mermaid-svg-vcr74OYJZuwiTRqj .node polygon,#mermaid-svg-vcr74OYJZuwiTRqj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vcr74OYJZuwiTRqj .rough-node .label text,#mermaid-svg-vcr74OYJZuwiTRqj .node .label text,#mermaid-svg-vcr74OYJZuwiTRqj .image-shape .label,#mermaid-svg-vcr74OYJZuwiTRqj .icon-shape .label{text-anchor:middle;}#mermaid-svg-vcr74OYJZuwiTRqj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-vcr74OYJZuwiTRqj .rough-node .label,#mermaid-svg-vcr74OYJZuwiTRqj .node .label,#mermaid-svg-vcr74OYJZuwiTRqj .image-shape .label,#mermaid-svg-vcr74OYJZuwiTRqj .icon-shape .label{text-align:center;}#mermaid-svg-vcr74OYJZuwiTRqj .node.clickable{cursor:pointer;}#mermaid-svg-vcr74OYJZuwiTRqj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-vcr74OYJZuwiTRqj .arrowheadPath{fill:#333333;}#mermaid-svg-vcr74OYJZuwiTRqj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vcr74OYJZuwiTRqj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vcr74OYJZuwiTRqj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vcr74OYJZuwiTRqj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-vcr74OYJZuwiTRqj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vcr74OYJZuwiTRqj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-vcr74OYJZuwiTRqj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vcr74OYJZuwiTRqj .cluster text{fill:#333;}#mermaid-svg-vcr74OYJZuwiTRqj .cluster span{color:#333;}#mermaid-svg-vcr74OYJZuwiTRqj 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-vcr74OYJZuwiTRqj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-vcr74OYJZuwiTRqj rect.text{fill:none;stroke-width:0;}#mermaid-svg-vcr74OYJZuwiTRqj .icon-shape,#mermaid-svg-vcr74OYJZuwiTRqj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-vcr74OYJZuwiTRqj .icon-shape p,#mermaid-svg-vcr74OYJZuwiTRqj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-vcr74OYJZuwiTRqj .icon-shape .label rect,#mermaid-svg-vcr74OYJZuwiTRqj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-vcr74OYJZuwiTRqj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-vcr74OYJZuwiTRqj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-vcr74OYJZuwiTRqj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 切换后
⛔ 停写窗口(必存在)
停写前:尽量缩小差异
Reindex 历史
基于 update_time 多轮增量

(追平大部分变更)
差异量收敛到

可接受范围
客户端停止写入
等待进行中的写操作完成

(几秒?)
最终一轮差异同步

(此时数据是静态的,

可以精确比对)
数据校验
客户端读写切至B
灰度验证

四、风险评估矩阵

#mermaid-svg-UVKXLCe3XXmzoa50{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-UVKXLCe3XXmzoa50 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-UVKXLCe3XXmzoa50 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-UVKXLCe3XXmzoa50 .error-icon{fill:#552222;}#mermaid-svg-UVKXLCe3XXmzoa50 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UVKXLCe3XXmzoa50 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-UVKXLCe3XXmzoa50 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UVKXLCe3XXmzoa50 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UVKXLCe3XXmzoa50 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-UVKXLCe3XXmzoa50 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UVKXLCe3XXmzoa50 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UVKXLCe3XXmzoa50 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UVKXLCe3XXmzoa50 .marker.cross{stroke:#333333;}#mermaid-svg-UVKXLCe3XXmzoa50 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UVKXLCe3XXmzoa50 p{margin:0;}#mermaid-svg-UVKXLCe3XXmzoa50 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 🔴 重点关注 谨慎推进 优先执行 稳步推进 二类变化索引 一类变化索引 静态索引 低业务影响 高业务影响 低数据风险 高数据风险 迁移风险四象限评估

五、迁移执行路线图

  1. 准备工作
    索引/索引模板同步
    数据校验脚本开发
    回滚方案评审?
  2. 第一批:静态索引
    Snapshot/Restore 迁移
    数据校验 & 读流量切换
    观察期
  3. 第二批:一类变化索引
    历史数据 Reindex
    增量同步 & 收敛
    停写切换 & 校验
    观察期
  4. 第三批:二类变化索引
    历史数据 Reindex
    多轮增量同步
    停写窗口 & 最终同步
    灰度切流验证
    观察期
  5. 收尾
    集群 A 正式下线

六、关键保障措施清单

6.1 迁移前必做

序号 事项 负责方 状态
1 Mapping / Settings / Index Templates 同步至 B
2 别名(Aliases)迁移规划与脚本准备
3 集群 B 容量评估(磁盘/内存/CPU/节点数)
4 数据校验工具/脚本开发与测试
5 回滚方案编写与评审
6 业务方停写窗口沟通与确认(二类索引)
7 监控告警配置(B 集群性能、迁移进度)

6.2 迁移后必验

序号 校验项 方法 通过标准
1 Document Count _count API 逐索引比对 A == B
2 抽样数据内容 随机抽取 1000 条逐字段比对 100% 一致
3 聚合查询结果 相同 DSL 在 A/B 执行比对 结果一致
4 读写性能 压测 B 集群核心查询 P99 ≤ A 集群基线
5 灰度切流 10%→30%→50%→100% 逐步放量 错误率 < 0.01%

6.3 客户端切换策略

#mermaid-svg-ZGsVQ6gHa6E5mTOn{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-ZGsVQ6gHa6E5mTOn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .error-icon{fill:#552222;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .marker.cross{stroke:#333333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZGsVQ6gHa6E5mTOn p{margin:0;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .cluster-label text{fill:#333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .cluster-label span{color:#333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .cluster-label span p{background-color:transparent;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .label text,#mermaid-svg-ZGsVQ6gHa6E5mTOn span{fill:#333;color:#333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .node rect,#mermaid-svg-ZGsVQ6gHa6E5mTOn .node circle,#mermaid-svg-ZGsVQ6gHa6E5mTOn .node ellipse,#mermaid-svg-ZGsVQ6gHa6E5mTOn .node polygon,#mermaid-svg-ZGsVQ6gHa6E5mTOn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .rough-node .label text,#mermaid-svg-ZGsVQ6gHa6E5mTOn .node .label text,#mermaid-svg-ZGsVQ6gHa6E5mTOn .image-shape .label,#mermaid-svg-ZGsVQ6gHa6E5mTOn .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .rough-node .label,#mermaid-svg-ZGsVQ6gHa6E5mTOn .node .label,#mermaid-svg-ZGsVQ6gHa6E5mTOn .image-shape .label,#mermaid-svg-ZGsVQ6gHa6E5mTOn .icon-shape .label{text-align:center;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .node.clickable{cursor:pointer;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .arrowheadPath{fill:#333333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZGsVQ6gHa6E5mTOn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZGsVQ6gHa6E5mTOn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZGsVQ6gHa6E5mTOn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .cluster text{fill:#333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .cluster span{color:#333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn 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-ZGsVQ6gHa6E5mTOn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZGsVQ6gHa6E5mTOn rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .icon-shape,#mermaid-svg-ZGsVQ6gHa6E5mTOn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .icon-shape p,#mermaid-svg-ZGsVQ6gHa6E5mTOn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .icon-shape .label rect,#mermaid-svg-ZGsVQ6gHa6E5mTOn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZGsVQ6gHa6E5mTOn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZGsVQ6gHa6E5mTOn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZGsVQ6gHa6E5mTOn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Step1: 10%
Step1: 90%
Step2: 50%
Step2: 50%
Step3: 100%
负载均衡 / API Gateway
集群 B
集群 A
负载均衡 / API Gateway
集群 B
集群 A
负载均衡 / API Gateway
集群 B

相关推荐
AIwenIPgeolocation2 小时前
告别“数据孤岛”:可信数据空间如何打通产业链、城市群?
大数据·人工智能
云上工程笔记2 小时前
四柱记账法和复式记账法有什么区别?复式记账为什么更适合查错和对账
大数据·前端·人工智能
微三云生态系统架构师-彭丹3 小时前
区域拆分独立分红池系统设计:解决大盘分红迟滞的四维拆分引擎
大数据·人工智能
吴佳浩 Alben3 小时前
构建企业级 DevOps 排错 Agent:从日志告警到自动化修复 PR
大数据·人工智能·语言模型·架构·自动化·ai编程·devops
Elastic 中国社区官方博客3 小时前
隐藏在可观测性数据中的安全攻击
大数据·网络·安全·elasticsearch·搜索引擎·全文检索
FII工业富联科技服务3 小时前
三维世界模型驱动机器人操作:概念解析、技术挑战与Omniverse全栈架构深度拆解
大数据·架构·机器人
见闻小天地3 小时前
空调机房冷冻泵与冷却泵是什么?选型要点与赛莱默方案解析
大数据·网络
国科安芯4 小时前
抗辐射MCU在低轨卫星电源管理单元中的电压监测与保护策略研究
大数据·单片机·嵌入式硬件·电源管理·低轨卫星·抗辐射·星间链路
4SAPI4 小时前
2026年大模型API接入选型指南:企业与个人用户的架构、稳定性与成本考量
大数据·开发语言·数据库·人工智能·架构·php