数据分区的故障恢复
如果因 Ignite 无法保证数据一致而无法进行数据操作时,可以执行故障恢复来进行恢复,以将数据返回到一致状态或声明当前为一致状态。
1.故障场景和恢复说明
1.1.少数离线
少数
是指不到分布区(DZ)配置的副本数
的一半,例如 DZ1 配置了 2 个副本,DZ2 配置了 3 个副本,丢失单个 Ignite 节点是 DZ1 的多数损失,而 DZ2 是少数损失。
发现一个或多个集群节点离线有多种方式,包括使用带有--global
选项的恢复分区状态命令,该命令将显示离线节点的只读分区
、降级分区
或不可用分区
。
发现少数离线状态后:
操作集群使离线节点上线; 集群尝试使指定的节点上线,可能的结果是:
- 节点以有效数据及时恢复在线状态(在缩容超时之前),系统使用日志复制或完整状态传输过程复制缺失的数据(如果有);
- 节点及时恢复在线状态,但没有数据,系统使用完整状态传输过程复制数据;
- 节点在缩容超时之前未恢复在线状态,系统将副本分发到新节点并启动再平衡过程;
- 节点恢复在线状态时数据不一致,见下面的步骤 4 和 5;
提示
完全状态传输和再平衡可能需要很长时间(数十分钟级),所以建议在发现节点离线后立即恢复节点。
如果状态为
Healthy
或Available partition
,则认为恢复已完成;如果状态为
Broken
:如果分区状态为
Read-only partition
、Degraded partition
或Unavailable partition
,需使用重置分区命令重置相关的分区。
1.2.多数离线
多数是指分布区(DZ)配置的副本数的一半(或更多),例如 DZ1 配置了 2 个副本,DZ2 配置了 3 个副本,丢失单个 Ignite 节点是 DZ1 的多数损失,而 DZ2 是少数损失。
发现一个或多个集群节点离线有多种方式,包括使用带有--global
选项的恢复分区状态命令,该命令将显示离线节点的只读分区
、降级分区
或不可用分区
。
如果保持在线的节点持有主副本,则分区将变为只读
(参见全局分区状态),在租约到期之前,所有数据都可以读。如果保持在线的节点不包括主副本,则分区将变为不可用
(参见全局分区状态)。
发现多数离线状态后:
操作集群使离线节点上线; 集群尝试使指定的节点上线,可能的结果是:
- 节点以有效数据及时恢复在线状态(在缩容超时之前),然后选出领导者,系统使用日志复制或完整状态传输过程复制缺失的数据(如果有),并选出租约持有者;
- 节点恢复在线状态时数据不一致,见下面的步骤 4 和 5;
提示
完全状态传输和再平衡可能需要很长时间(数十分钟级),所以建议在发现节点离线后立即恢复节点。
如果状态为
Healthy
或Available partition
,则认为恢复已完成;如果状态为
Broken
:如果分区状态为
Read-only partition
、Degraded partition
或Unavailable partition
,需使用重置分区命令重置相关的分区。
在多数离线场景中,通常会丢失部分数据,例如如果在分区 B 处于不可用
状态时重置分区 A,则会丢失以下信息:
- 通过重置分区还原的 A 中的最新数据;
- 来自 B 的一些最新数据,这些数据是在一个事务中插入的,该事务也将数据插入了A。
1.3.分区丢失
多数离线的场景中,可能丢失分区的所有副本,例如分区 A。即在运行重置分区命令后丢失分区 A 中的所有数据,并且可能会丢失其他分区中的一些最新更新。
建议将节点重新上线,如多数离线章节中所述。
2.分区状态
本章节介绍定义分区可用性和就绪情况的数据分区状态。
2.1.本地分区状态
本地分区状态是与分区关联的副本、存储、状态机等的本地属性。
Healthy
:状态机运行正常;Initializing
:节点在线,但对应的 Raft 组尚未完成初始化;Snapshot installation
:正在进行全面状态传输,完成后分区将变为healthy
或catching-up
,在此之前,无法读取数据,并且日志复制处于暂停状态;Catching-up
:某个节点正在从领导者复制数据,并且其数据略微处于过去时。更具体地说,节点没有复制对应于 100 个日志条目的日志尾部;Broken
:状态机遇到问题(可能是由于异常),某些数据可能无法读取,并且无法复制日志。此状态不会自动调整,需要人为干预。
2.2.全局分区状态
全局分区状态是分区的全局属性,从用户的角度指定其功能。
Available partition
:运行正常的可以处理读取和写入请求的分区,表示所有对等节点目前都处于正常状态;Read-only partition
:可以处理读取请求但不能处理写入请求的分区。没有健康的多数。但是至少有一个在线(Healthy
/Catching-up
)的对等节点可以处理历史只读查询;Unavailable partition
:无法处理任何请求的分区;Degraded partition
:用户可以使用的分区,但与其他分区相比,出现问题的风险更高。例如该组的某个对等方处于离线状态,仍然有大多数,但备用因子很低。
18624049226