【TiDB 使用环境】生产环境 /测试/ Poc
【TiDB 版本】
【操作系统】
【部署方式】云上部署(什么云)/机器部署(什么机器配置、什么硬盘)
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】
假设三节点,每个节点上10个region,如果node1挂掉后重启,间隔的时间不到30分钟,还没有出发剔除副本和补副本的操作。这种情况下,其它两个节点向故障节点复制时是否有优先级
三个节点三副本的情况,node1挂掉后重启,触发不了剔除副本和补副本的操作,因为你没有多余的节点啊。。。这种情况下,只会把原来leader在node1上的region的leader迁移到其他节点上。
这种情况不进行region的复制和迁移,只是在node1挂掉之后,尽快把上面的Leader转移到另外两个节点而已,有监控可以观察到的
而且你的三节点三副本架构,即使30分钟之后也不进行region的复制和迁移啊,没有多余的节点呢
在 TiDB 中,当出现节点故障(如 node1 挂掉后重启,且间隔时间不到 30 分钟,未触发剔除副本和补副本操作 ),其他两个节点向故障节点复制数据时存在一定的优先级和策略逻辑:
基于 Raft 协议的基本原理
TiDB 的 Region 数据副本管理基于 Raft 分布式一致性算法,每个 Region 有多个副本(默认三副本 ),其中一个副本作为 Leader,其他副本作为 Follower。当 node1 挂掉,node1 上的副本会变为不可用状态,但只要其他节点(node2 和 node3 )上存在有效的 Leader 副本,集群就能继续提供读 / 写服务(读可以从 Leader 或 Follower 副本,写只能通过 Leader 副本 )。
副本复制优先级因素
- 日志同步状态:在 Raft 协议中,Follower 副本需要从 Leader 副本同步日志。如果 node2 和 node3 上的副本向 node1 复制数据,已经同步了较多日志,且网络连接、磁盘 I/O 等资源状态良好的副本会相对更有 “优势” 进行数据复制。例如,node2 上某个 Region 的副本与 Leader 副本的日志差距较小,且 node2 本身资源充足,那么在向 node1 上对应 Region 副本恢复数据时,该副本就可能会优先进行数据复制 。
- 网络拓扑与延迟:TiDB 会考虑节点之间的网络拓扑关系和网络延迟情况。如果 node2 与 node1 之间的网络延迟更低,网络带宽更充足,那么在数据复制时,node2 上的副本会优先于 node3 上的副本向 node1 复制数据 。可以想象成一条更通畅的 “数据高速公路”,数据传输更高效 。
- 节点负载情况:TiDB 会监控每个节点的 CPU、内存、磁盘 I/O 等资源负载情况。如果 node3 的 CPU 使用率已经很高,磁盘 I/O 繁忙,而 node2 负载相对较低,那么 node2 上的副本会被优先选择向 node1 进行数据复制 ,以避免给高负载的 node3 带来更大压力,影响整个集群性能 。
实际操作中的策略体现
- Region 级别的调度:PD(Placement Driver )作为 TiDB 集群的调度中心,会实时收集各个 Region 的副本状态信息,根据上述优先级因素,对每个 Region 制定具体的副本数据恢复策略。例如,对于 Region A ,PD 发现 node2 上副本更适合向 node1 恢复数据,就会优先安排 node2 上 Region A 的副本进行数据复制;对于 Region B ,如果 node3 上副本的条件更优,则由 node3 上 Region B 的副本进行数据复制 。
- 动态调整:随着时间推移和节点状态变化,数据复制的优先级也会动态调整。比如在复制过程中,node2 的网络突然出现波动,而 node3 的负载降低且网络稳定,那么 PD 会重新评估并调整后续数据复制的优先级,让 node3 上的副本继续进行数据复制 。
总体而言,TiDB 在其他节点向故障节点复制数据时,会综合多方面因素确定优先级,目的是在保障集群数据一致性和可用性的前提下,尽可能高效地恢复故障节点上的副本数据 。
优先级不好说,不过肯定有先后顺序,raft也是串行同步二阶段锁吧
这种情况不会进行数据复制,只会进行切主