【Elasticsearch】迁出节点”≠“恢复源节点

复制代码
ShardRouting source = startedShard.relocate(nodeId, expectedShardSize);
ShardRouting target = source.getTargetRelocatingShard();
updateAssigned(startedShard, source);
node(target.currentNodeId()).add(target);
assignedShardsAdd(target);
addRecovery(target); //找恢复源(这里用到的恢复源不一定是迁出节点的)
changes.relocationStarted(startedShard, target);
复制代码
@Nullable //给一个副本分片,返回一条“可以用来当恢复源”的主分片路由。
private ShardRouting findAssignedPrimaryIfPeerRecovery(ShardRouting routing) {
    ShardRouting primary = null;
    if (routing.recoverySource() != null && routing.recoverySource().getType() == RecoverySource.Type.PEER) {
        List<ShardRouting> shardRoutings = assignedShards.get(routing.shardId());
        if (shardRoutings != null) {
            for (ShardRouting shardRouting : shardRoutings) {
                if (shardRouting.primary()) {   //这里只选主分片
                    if (shardRouting.active()) {
                        return shardRouting;
                    } else if (primary == null) {
                        primary = shardRouting;
                    } else if (primary.relocatingNodeId() != null) { //如果当前这个shardRouting还没active,并且旧的主分片正在作为迁移源往外迁移,
                        primary = shardRouting;
                    }
                }
            }
        }
    }
    return primary;
}

完全正确 ------ **"迁出节点"≠"恢复源节点"**:

  1. `startedShard.relocate(...)` 只是**生成两条路由记录**:
  • **源**:状态 `RELOCATING`,仍在**原节点**;

  • **目标**:状态 `INITIALIZING`,在**新节点**。

  1. 后续副本做 **PEER 恢复**时,**选源逻辑只看"哪条主分片路由当前能提供数据"**(通常就是那条 `RELOCATING` 源记录),**不管它物理上在哪个节点**;

因此恢复流量走向是:

**"选中的主分片路由所在节点" → 副本节点**

  1. 如果主分片本身也在 relocating,**旧节点**上的 `RELOCATING` 源分片仍处于 `STARTED` 状态,**照样能当数据源**;

一旦旧主分片关闭、新主分片 `STARTED`,恢复源会自动切换到新节点。

**结论:**

**"迁出节点"只是路由表里的一个中间状态,真正的恢复源由 `findAssignedPrimaryIfPeerRecovery` 动态选择,两者没有绑定关系。**

相关推荐
janeboe9 分钟前
抖音黑科技兵马俑总站源头简博科技 | 抖音锚点不合规挂载新规今日生效,短视频引流直播间迈入三端全链路监管时代
大数据·人工智能·科技
@insist12327 分钟前
信息系统管理工程师-数字化转型核心知识与应试要点
大数据·软考·信管·软件水平考试·信息系统管理工程师
Elasticsearch31 分钟前
如何使用 OpenTelemetry 对你的搜索 API 进行埋点,并使用 ES|QL 对其进行查询
elasticsearch
步步精BBJconn43 分钟前
从GPU服务器到数据中心:AI服务器高压连接器的应用与发展趋势
大数据·运维·服务器·人工智能·科技·物联网
大模型码小白11 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
阿里云大数据AI技术13 小时前
更快、更稳、更省:揭秘阿里云 Elasticsearch 存算分离与弹性扩缩
elasticsearch
延凡科技14 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
ifenxi爱分析14 小时前
爱分析最新报告解读:AI数据基础设施与数据中台的区别
大数据·人工智能
阿里云大数据AI技术15 小时前
Search Lake:ES x Paimon 让湖上多模态数据可搜可用
人工智能·elasticsearch·搜索引擎
品牌全球行15 小时前
共商共建共享 链接数字未来——“一带一路数字新城(深圳)会客厅筹备办”揭牌仪式在深圳隆重举行
大数据·人工智能