Skip to content

数据分区的故障恢复

如果因 Ignite 无法保证数据一致而无法进行数据操作时,可以执行故障恢复来进行恢复,以将数据返回到一致状态或声明当前为一致状态。

提示

系统组(集群管理组元存储组)的故障恢复将在单独的章节中介绍。

1.故障场景和恢复说明

1.1.少数离线

少数是指不到分布区(DZ)配置的副本数的一半,例如 DZ1 配置了 2 个副本,DZ2 配置了 3 个副本,丢失单个 Ignite 节点是 DZ1 的多数损失,而 DZ2 是少数损失。

发现一个或多个集群节点离线有多种方式,包括使用带有--global选项的恢复分区状态命令,该命令将显示离线节点的只读分区降级分区不可用分区

发现少数离线状态后:

  1. 操作集群使离线节点上线; 集群尝试使指定的节点上线,可能的结果是:

    • 节点以有效数据及时恢复在线状态(在缩容超时之前),系统使用日志复制或完整状态传输过程复制缺失的数据(如果有);
    • 节点及时恢复在线状态,但没有数据,系统使用完整状态传输过程复制数据;
    • 节点在缩容超时之前未恢复在线状态,系统将副本分发到新节点并启动再平衡过程;
    • 节点恢复在线状态时数据不一致,见下面的步骤 4 和 5;

    提示

    完全状态传输和再平衡可能需要很长时间(数十分钟级),所以建议在发现节点离线后立即恢复节点。

  2. 在相关分布区/节点/分区上运行恢复分区状态命令以验证分区状态

  3. 如果状态为HealthyAvailable partition,则认为恢复已完成;

  4. 如果状态为Broken

  5. 如果分区状态为Read-only partitionDegraded partitionUnavailable partition,需使用重置分区命令重置相关的分区。

1.2.多数离线

多数是指分布区(DZ)配置的副本数的一半(或更多),例如 DZ1 配置了 2 个副本,DZ2 配置了 3 个副本,丢失单个 Ignite 节点是 DZ1 的多数损失,而 DZ2 是少数损失。

发现一个或多个集群节点离线有多种方式,包括使用带有--global选项的恢复分区状态命令,该命令将显示离线节点的只读分区降级分区不可用分区

如果保持在线的节点持有主副本,则分区将变为只读(参见全局分区状态),在租约到期之前,所有数据都可以读。如果保持在线的节点不包括主副本,则分区将变为不可用(参见全局分区状态)。

发现多数离线状态后:

  1. 操作集群使离线节点上线; 集群尝试使指定的节点上线,可能的结果是:

    • 节点以有效数据及时恢复在线状态(在缩容超时之前),然后选出领导者,系统使用日志复制或完整状态传输过程复制缺失的数据(如果有),并选出租约持有者;
    • 节点恢复在线状态时数据不一致,见下面的步骤 4 和 5;

    提示

    完全状态传输和再平衡可能需要很长时间(数十分钟级),所以建议在发现节点离线后立即恢复节点。

  2. 在相关分布区/节点/分区上运行恢复分区状态命令以验证分区状态

  3. 如果状态为HealthyAvailable partition,则认为恢复已完成;

  4. 如果状态为Broken

  5. 如果分区状态为Read-only partitionDegraded partitionUnavailable partition,需使用重置分区命令重置相关的分区。

在多数离线场景中,通常会丢失部分数据,例如如果在分区 B 处于不可用状态时重置分区 A,则会丢失以下信息:

  • 通过重置分区还原的 A 中的最新数据;
  • 来自 B 的一些最新数据,这些数据是在一个事务中插入的,该事务也将数据插入了A。

1.3.分区丢失

多数离线的场景中,可能丢失分区的所有副本,例如分区 A。即在运行重置分区命令后丢失分区 A 中的所有数据,并且可能会丢失其他分区中的一些最新更新。

建议将节点重新上线,如多数离线章节中所述。

2.分区状态

本章节介绍定义分区可用性和就绪情况的数据分区状态。

2.1.本地分区状态

本地分区状态是与分区关联的副本、存储、状态机等的本地属性。

  • Healthy:状态机运行正常;
  • Initializing:节点在线,但对应的 Raft 组尚未完成初始化;
  • Snapshot installation:正在进行全面状态传输,完成后分区将变为 healthycatching-up,在此之前,无法读取数据,并且日志复制处于暂停状态;
  • Catching-up:某个节点正在从领导者复制数据,并且其数据略微处于过去时。更具体地说,节点没有复制对应于 100 个日志条目的日志尾部;
  • Broken:状态机遇到问题(可能是由于异常),某些数据可能无法读取,并且无法复制日志。此状态不会自动调整,需要人为干预。

2.2.全局分区状态

全局分区状态是分区的全局属性,从用户的角度指定其功能。

  • Available partition:运行正常的可以处理读取和写入请求的分区,表示所有对等节点目前都处于正常状态;
  • Read-only partition:可以处理读取请求但不能处理写入请求的分区。没有健康的多数。但是至少有一个在线(Healthy/Catching-up)的对等节点可以处理历史只读查询;
  • Unavailable partition:无法处理任何请求的分区;
  • Degraded partition:用户可以使用的分区,但与其他分区相比,出现问题的风险更高。例如该组的某个对等方处于离线状态,仍然有大多数,但备用因子很低。

18624049226