ProxySQL 结合 Group Replication 构建多主 RDS 集群应用,实现多节点写及小于 1 秒节点维护影响

ProxySQL 结合 Group Replication 构建多主 RDS 集群应用,实现多节点写及小于 1 秒节点维护影响

💡 原文中文,约11100字,阅读约需27分钟。
📝

内容提要

亚马逊RDS for MySQL 8.0.35开始支持Group Replication插件,使用ProxySQL中间件管理Replication Group实现高可用集群。通过ProxySQL+RDS MySQL Group Replication,节点停机对应用的影响时间低于1秒。建议在生产环境中采用ProxySQL Cluster模式提升中间层的高可用性。

🔎

延伸解读

ProxySQL 监控机制与快速故障转移

ProxySQL 通过监控用户定期查询 Group Replication 的元数据,获取各节点状态。文中将 MySQL-monitor_read_only_interval 设置为 100 毫秒,使 ProxySQL 能在 100 毫秒内检测到新写入器,并迅速将流量重新路由。这种机制是节点停机影响低于 1 秒的关键,但实际切换时间还受网络延迟、监控间隔和事务延迟阈值等因素影响。

多主架构下的写负载均衡与高可用

Group Replication 多主模式允许所有节点接受写请求,ProxySQL 通过 hostgroup 定义写节点组和备份写节点组,实现写负载均衡。当某个节点故障时,ProxySQL 自动将写请求路由到其他可用节点,从而提升数据库层的高可用性。文中设置 max_writers 为 2,意味着最多两个节点同时处理写请求,这有助于控制冲突和延迟。

生产环境部署建议:ProxySQL Cluster 模式

文中示例采用单机 ProxySQL,虽然实现了数据库层的高可用,但 ProxySQL 本身成为单点。若 ProxySQL 所在 EC2 实例故障,整个应用将不可用。因此,在生产环境中建议采用 ProxySQL Cluster 模式,通过多个 ProxySQL 实例组成集群,避免中间层单点故障,进一步提升整体架构的可靠性。

测试方法与实际影响时间

作者使用 Go 程序每 100 毫秒执行一次更新,模拟应用持续写入。手动停止一个 RDS 实例后,通过日志中的失败记录统计影响时间。结果显示,在 ProxySQL 和 Group Replication 配合下,节点停机对应用的影响可控制在 1 秒以下,甚至达到百毫秒级别。但该测试基于特定环境和配置,实际影响时间可能因负载和网络条件而异。

❓

Q&A

Amazon RDS for MySQL 从哪个版本开始支持 Group Replication 插件?

Amazon RDS for MySQL 8.0.35 版本开始支持 Group Replication 插件。

如何用 ProxySQL 和 RDS MySQL Group Replication 搭建多主高可用集群?

首先创建 3 节点的多主 Group Replication 集群,然后配置 ProxySQL:收集所有实例的终端节点和端口,将其加载到 ProxySQL 的 mysql_servers 表并配置 mysql_group_replication_hostgroups 表,最后配置监控用户和监控参数,使 ProxySQL 能实时感知节点状态并路由流量。

ProxySQL 如何配置才能快速检测 Group Replication 的新写入器?

需要配置监控用户和密码,并将 MySQL-monitor_read_only_interval 设置为 100 毫秒,这样 ProxySQL 可以在 100 毫秒内检测到新写入器的更改。

节点故障时,ProxySQL 结合 Group Replication 对应用的影响时间是多少?

通过测试模拟 RDS 实例宕机,应用侧读写影响时间低于 1 秒,甚至可达到百毫秒级别。

在生产环境中,ProxySQL 部署模式有什么建议?

建议采用 ProxySQL Cluster 模式提升中间层的高可用性,而不是单机部署模式。

使用 ProxySQL 和 RDS MySQL Group Replication 构建多主集群有哪些优势?

可以构建高可用的多主数据库集群,实现多节点写负载均衡,ProxySQL 能基于 Group Replication 元数据实时感知节点状态,在 1 秒内完成主节点切换,节点故障对应用影响极低。

🏷️

标签

➡️

继续阅读