一、重新启动集群节点
要重新启动集群节点,请关闭MySQL并重新启动它。该节点将离开集群(并且法定人数的总计数应该减少)。发布命令 systemctl restart mysql
当它重新加入时,节点应该使用IST进行同步。如果gcache在整个集群中的任何其他节点上的文件中找不到IST所需的更改集,则会执行SST。因此,从集群的角度来看,重新启动集群节点以进行滚动配置更改或软件升级非常简单。
注意
如果您重新启动具有无法加载MySQL配置更改的节点,则Galera将删除该节点的状态并强制该节点的SST。
二、集群故障转移
集群成员资格仅由哪些节点连接到集群的其余部分来确定; 没有配置设置明确定义所有可能的集群节点的列表。因此,每次节点加入集群时,集群的总大小都会增加,并且节点离开(优雅地)时大小会减小。
集群的大小用于确定实现法定人数所需的投票。当一个或多个节点被怀疑不再是集群的一部分时(他们没有回应),将进行法定人数投票。此无响应超时是evs.suspect_timeout在设置wsrep_provider_options(默认值为5秒),并且当一个节点出现异常,写操作将被阻止在集群上的时间比超时稍长。
一旦确定某个节点(或多个节点)断开连接,则其余节点将投出法定票数,并且如果断开连接之前的大多数节点仍处于连接状态,则该分区保持连接状态。在网络分区的情况下,一些节点将在网络断开的每一侧处于活动并处于活动状态。在这种情况下,只有法定人数会继续。没有法定人数的分区将更改为非主要状态。
因此,在2节点集群中无法实现安全的自动故障切换,因为一个节点的故障将导致其余节点变为非主节点。而且,任何一个节点数量为偶数的节点(比如两个不同交换机中的两个节点)都有一定的分裂情况的可能性,当两个节点之间的连接丢失时,任何一个分区都不能保留法定数量投票,而成为非主要分区。
因此,对于自动故障转移,建议使用3s规则。它适用于各种级别的基础架构,具体取决于集群散布多远以避免单点故障。例如:
单个交换机上的集群应该有3个节点
跨越集群的交换机应平均分布在至少3台交换机上
跨越网络的集群应该跨越至少3个网络
跨越数据中心的集群应至少跨越3个数据中心
这些规则将防止裂脑情况并确保自动故障切换正常工作。
1、使用仲裁员
如果添加第三个节点,交换机,网络或数据中心的成本太高,则应使用仲裁器。仲裁者是可以接收和转发复制的集群的投票成员,但它不会保留任何数据,并且运行自己的守护进程而不是mysqld。即使是第三位的仲裁员也可以将分裂脑保护添加到仅分布在两个节点/位置的集群中。
2、恢复非主集群
需要注意的是,3s的规则仅适用于自动故障转移。如果是双节点集群(或者在其他一些中断使少数节点处于活动状态的情况下),则一个节点的故障将导致另一节点成为非主节点并拒绝操作。但是,您可以使用以下命令从非主状态恢复节点:
SET GLOBAL wsrep_provider_options = 'pc.bootstrap = true' ;
这将告诉节点(以及所有节点仍然连接到其分区)它可以成为主集群。但是,只有当您确定没有其他分区在主服务器上运行时才能执行此操作,否则Percona XtraDB Cluster将允许这两个分区发生分歧(并且最终会生成两个不可能重新分区的数据库自动合并)。
例如,假设有两个数据中心,其中一个是主要数据中心,另一个数据中心用于灾难恢复,每个数据中心都有偶数个节点。当额外仲裁器节点仅在主数据中心中运行时,以下高可用性功能将可用:
主数据中心或辅助数据中心内任何一个或多个节点的自动故障转移
辅助数据中心的故障不会导致主数据中心失效(由于有仲裁节点)
主数据中心的故障将使辅助中心处于非主要状态。
如果已执行灾难恢复故障转移,则可以让辅助数据中心使用单个命令引导自己,但灾难恢复故障转移仍在您的控制之中。