集群故障转移¶
集群成员资格仅由哪些节点连接到集群的其余部分来确定;没有显式定义所有可能集群节点列表的配置设置。因此,每当一个节点加入集群时,集群的总大小就会增加,而当一个节点(优雅地)离开时,集群的大小就会减小。
集群的大小是用来确定实现所需票数的法定人数。当一个或多个节点怀疑不再是集群的一部分(它们不响应)时,进行quorum投票。此无响应超时是evs.suspect_timeout在wsrep_provider_options(默认为5秒),当一个节点不正常地宕机时,集群上的写操作将被阻塞,时间略长于该超时。
一旦一个节点(或多个节点)被确定断开连接,其余节点将进行仲裁投票,如果断开连接之前的大多数节点仍然连接,那么该分区将保持正常。在网络分区的情况下,在网络断开连接的每一侧,一些节点都是活动的。在这种情况下,只有法定人数将继续。没有法定人数的分区将变为非主状态。
因此,在2节点集群中不可能实现安全的自动故障转移,因为一个节点的故障将导致其余节点变为非主节点。此外,任何具有偶数个节点的集群(例如两个节点位于两个不同的交换机中)都有某种可能性分裂的大脑如果两个分区之间的连接丢失,那么两个分区都不能保留quorum,因此它们都成为非主分区。
因此,对于自动故障转移,使用3s法则建议。它适用于基础设施的各个级别,这取决于集群的分布范围,以避免单点故障。例如:
单个交换机上的集群应该有3个节点
跨交换机的集群应该均匀地分布在至少3个交换机上
跨网络的集群至少需要跨3个网络
跨数据中心的集群至少要跨3个数据中心
这些规则将防止大脑分裂的情况,并确保自动故障转移正常工作。
使用仲裁人¶
如果添加第三个节点、交换机、网络或数据中心的成本太高,则应该使用仲裁器。仲裁程序是集群中有投票的成员,可以接收和中继复制,但它不持久化任何数据,而是运行自己的守护进程mysqld。甚至在3中放置一个仲裁员理查德·道金斯定位可以为仅分布在两个节点/位置的集群添加脑裂保护。
恢复非主集群¶
重要的是要注意3s法则仅适用于自动故障切换。在2节点集群的情况下(或者在其他一些中断的情况下,只有少数节点处于活动状态),一个节点的故障将导致另一个节点成为非主节点并拒绝操作。但是,可以使用以下命令从非主状态恢复节点:
集全球wsrep_provider_options=“pc.bootstrap = true”;
这将告诉该节点(以及仍然连接到其分区的所有节点)它可以成为一个主集群。但是,只有当您确定主分区中没有其他分区在操作时,才可以安全地这样做,否则Percona XtraDB Cluster将允许这两个分区分离(最终您将得到两个不可能自动重新合并的数据库)。雷竞技下载官网
例如,假设有两个数据中心,其中一个是主数据中心,另一个用于灾难恢复,每个数据中心的节点数量为偶数。当一个额外的仲裁节点仅在主数据中心中运行时,以下高可用性特性将可用:
主数据中心或辅助数据中心内任何单个或多个节点的自动故障转移
辅助数据中心的故障不会导致主数据中心宕机(因为仲裁器)。
主数据中心的故障将使辅助数据中心处于非主状态。
如果已经执行了灾难恢复故障转移,您可以使用一个命令告诉辅助数据中心引导自己,但是灾难恢复故障转移仍在您的控制范围内。