原文地址:Group Replication and Percona XtraDB Cluster: Overview of Common Operations
在这篇博文中,我将概述使用 MySQL Group Replication 8.0.19(又称 GR)和 Percona XtraDB Cluster 8 (PXC)(基于 Galera)时最常见的故障转移场景和操作,并解释每种技术如何处理每种情况。我使用单个主节点和三节点 PXC(均为默认设置)创建了一个具有群复制功能的三节点集群。我还将使用 ProxySQL 来连接这两个集群。
在这两个集群中,节点的名称都是 mysql1、mysql2 和 mysql3。在组复制中,如果我们使用单主配置,主节点就是写入的位置。在 PXC 中,我也将使用相同的术语,并将发送写入内容的节点称为 Primary 节点。但是,在 PXC 中实际没有主节点的概念,所有节点都是平等的。
这是两种解决方案的大致设置情况。
主服务器崩溃
组复制 - 写
在此测试中,我只向群集发送写查询。当我杀死 GR 上的主服务器时,需要 5-15 秒来重组拓扑结构,ProxySQL 也需要 5-15 秒才能将写入发送到新的主服务器。启动旧的主服务器并将其添加回群集不会导致任何中断。
组复制 - 读取
如果我只向群集发送读取查询,主服务器崩溃会导致读取中断吗?ProxySQL 会简单地将流量重定向到其他节点。在重组期间,群集不会被阻塞。
Percona XtraDB 集群 - 写入/读取
在 PXC 中,读取和写入没有区别,一旦某个节点崩溃/消失/分离,集群就必须重新创建集群视图并检查法定节点数。在此过程中,它不接受任何读取或写入。通常,这需要 3-10 秒的时间,在这段时间内,应用程序会受到影响。
删除/添加节点
如果我们删除或添加一个新节点,群集会如何运行?
组复制
在 GR 中,添加或删除节点不会影响或导致应用程序中断。如果我们使用克隆插件添加新节点,群集会将数据传播到新节点。
Percona XtraDB 集群
删除或添加节点不会导致任何中断。同样,就像在 GR 中一样,当我们添加一个新节点时,它会执行 SST(状态快照传输),从另一个节点获取所有数据。
部分网络故障
如果读节点与主节点分离,但仍能看到其他节点,群集会发生什么情况?
在这种情况下,mysql2(主服务器)和 mysql3 之间出现了网络中断。
组复制
在上一篇博文《MySQL 组复制 - 部分网络故障对性能的影响》中,我详细解释了这种特殊情况。基本上,部分网络中断会严重影响集群的写入性能,从而导致应用程序问题或停机。
Percona XtraDB 集群
在 PXC 中,当集群重新创建集群视图并开始将流量转发到可以看到该服务器的节点时,会出现 3-5 秒的中断。之后,它将继续像以前一样工作,不会对性能造成任何严重影响。
全面网络隔离
现在,mysql3 与所有其他节点完全分离。
组复制
集群可以接受读取和写入,不会出现任何中断,ProxySQL 会将读取重定向到其他节点。
Percona XtraDB 集群
在 PXC 上,当集群意识到某个节点不可用时,会有 3-5 秒钟的中断,并会如上所述重新创建集群视图。之后,它就可以处理读取和写入了。
应用未通过Proxysql访问数据库集群,直连数据库节点
如果一个节点或部分节点分离,没有法定节点数,但它们在同一网段中拥有应用服务器,仍可连接到数据库服务器,会发生什么情况?
组复制
分离的节点仍将接受读取流量,因此应用程序可以根据过时的数据做出决策。这是默认设置,但你可以使用名为 group_replication_exit_state_action 的变量进行配置。
Percona XtraDB 集群
在 PXC 中,如果一个节点被分离,它将不会接受任何读取或写入。优先级是数据一致性,只有拥有法定节点数的部分才会接受任何读写。
更改主服务器
组复制
如果要使用新的主节点,必须将一个读节点提升为新的主节点:
MySQL mysql2:3306 ssl JS > cluster.setPrimaryInstance("mysql2:3306")
ProxySQL 会跟随更改,但在集群重组时会造成几秒钟的中断。
Percona XtraDB 集群
PXC 上没有 Primary 的概念,任何节点都可以随时写入,因此我们只需将流量重定向到负载平衡器中的另一个节点(即:ProxySQL)。PXC 中还有一个 pxc_maint_mode
变量。将其更改为 MAINTENANCE
会软移除节点上的连接,即使该节点是主节点,但 ProxySQL Native Galera 支持较差。我建议使用尊重该变量的 1.4 调度器。
总结
Group Replication | Percona XtraDB Cluster | |
---|---|---|
主服务器崩溃 | 中断5-15s | 中断5-10s |
读服务器崩溃 | 无影响 | 中断3-5s |
添加节点 | 无影响 | 无影响 |
删除节点 | 无影响 | 无影响 |
部分网络故障 | 影响性能较多 | 中断 3-5 秒,性能低于正常水平 |
全面网络隔离 | 无影响 | 中断3-5s |
更改主 | 中断1-3s | 对集群没影响 |
如果读节点宕机或分离,组复制的影响较小。在 PXC 中,由于所有节点都是相同的,因此没有专用的主节点;如果任何节点发生任何情况,集群都必须投票并重新创建集群视图,这可能会对应用程序造成一定影响。不过,PXC 能更好地处理主节点晋升和网络故障。
我们可以看到,两种集群解决方案各有利弊。我希望这份总结能帮助您更多地了解它们,从而更容易地决定使用哪种技术。