不可用的ES节点重启后重新加入集群

如果一个之前不可用的ES节点重启后重新加入集群,而该节点上还有旧的数据,ES会做以下几件事:

  1. ES会发现node2上有旧的数据分片
  2. 会将node2上的分片标记为不可分配(unassigned)
  3. 会将node2上的分片数据与其他 Master eligible 节点上的 primary/replica 数据对比
  4. 如果数据不一致,ES会:
    • 保留其他节点的数据
    • 删除node2节点上不一致的数据
  5. 然后将需要的replica分片重新分配给node2
  6. node2上的replica分片将与其他primary/replica的数据进行同步
  7. 数据一致后,node2上的分片才会变为可用(assigned)状态

整个流程相当于:

  • 删除node2上不一致的数据
  • 重新分配需要的replica分片给node2
  • 与其他节点的数据同步,让node2的数据保持一致
  • 将node2上的分片变为assigned状态

所以总的来说:

  • ES会检查node2上的数据是否存在没有 replicate 的分片
  • 如果有,会将这些分片标记为unassigned,然后删除
  • 然后将需要的replica分片分配给node2
  • 数据同步后,node2上分片变为assigned状态
  • 确保了集群的数据一致性

所以即使node2重新加入集群时上面还有旧数据,通过上述步骤,数据最终也能保持一致。

你可能感兴趣的:(elasticsearch)