Percona XtraDB Cluster集群节点重启及故障转移

一、重新启动集群节点

要重新启动集群节点,请关闭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将允许这两个分区发生分歧(并且最终会生成两个不可能重新分区的数据库自动合并)。

例如,假设有两个数据中心,其中一个是主要数据中心,另一个数据中心用于灾难恢复,每个数据中心都有偶数个节点。当额外仲裁器节点仅在主数据中心中运行时,以下高可用性功能将可用:

   主数据中心或辅助数据中心内任何一个或多个节点的自动故障转移    辅助数据中心的故障不会导致主数据中心失效(由于有仲裁节点)    主数据中心的故障将使辅助中心处于非主要状态。    如果已执行灾难恢复故障转移,则可以让辅助数据中心使用单个命令引导自己,但灾难恢复故障转移仍在您的控制之中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构师学习

通过 Java 线程堆栈进行性能瓶颈分析

31360
来自专栏一名叫大蕉的程序员

分布式文件系统.get(V2)No.106

2018年9月28号,我估计会记得很久这一天,因为那天刚刚好是我来西厂的一周年,那天刚刚好是农历生日,刚刚好那天晚上我挖了一个大坑,跟遣怀师兄和小美姐姐一起填坑...

12720
来自专栏xingoo, 一个梦想做发明家的程序员

ADX3000二层的负载均衡设计问题

我的想法是 想在现有的局域网内部,利用ADX划分出一个新的局域网,模拟负载均衡。 现在有三台试验机器,拓扑图如下: ? 各个机器IP设置如下图: 我进行了如下的...

24550
来自专栏大宽宽的碎碎念

你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?

681100
来自专栏程序员互动联盟

【答疑释惑 第十讲】如何在windows下学习linux?

疑惑一 现在手游的server 端,一般都用哪种语言开发? 业界主要的是c/c++ + Python/lua模式做游戏服务器。c/c++做网络通讯数据传输,py...

39850
来自专栏腾讯Bugly的专栏

《手Q Android线程死锁监控与自动化分析实践》

手Q每个版本上线以后研发同学都会收到各种问题反馈。在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下:

1.1K80
来自专栏CSDN技术头条

RebornDB:下一代分布式Key-Value数据库

现实世界有许多的Key-Value数据库,它们都被广泛应用于很多系统。比如,我们能够用Memcached数据库存储一个MySQL查询结果集给后续相同的查询使用,...

333100
来自专栏沃趣科技

沃趣科技火线救援某公安系统核心业务数据

求助电话 只剩下键盘敲打声的办公室,被一个突如其来的电话打破了宁静。电话那头,是某公安客户的紧急求助。 案发现场 其核心数据库,由于存储突然断电,导致数据库实例...

36570
来自专栏Java技术分享

java系统高并发的解决方案

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要...

1.1K90
来自专栏思考的代码世界

Python网络数据采集之创建爬虫|第00天

开始本系列的文章时,可能你需要了解一下Python的基础知识,熟悉Python的基本编程,了解一些网络知识等。如果不是特别了解,可以看看我的Python基础系列...

43650

扫码关注云+社区

领取腾讯云代金券