内页banner>

联系方式

当前位置: 首页 > 经典案例

经典案例 Projects

联系我们Contact Us

飞鱼加速器(中国)官方网站|飞鱼加速器

电话:13594780107

联系人:周经理

邮箱:addictive@hotmail.com

网址:https://www.ghcyd.com

地址:泉州市刊舌入口209号

通过使用 ProxySQL 实现一次停机时间不超过一秒的升级,适用于拥有两个可读备用的 Amazon

2026-01-27 14:58:05
26次

使用ProxySQL在升级Amazon RDS MultiAZ部署时实现1秒或更少的宕机时间

关键要点

在这篇文章中,我们将探讨如何使用ProxySQL实现升级Amazon RDS for MySQL MultiAZ部署时的宕机时间通常为1秒或更少。通过ProxySQL,您可以简化操作并缩短传统升级方法中常见的35秒宕机时间。

在本文中,我们将探讨如何使用ProxySQL,在对Amazon RDS for MySQL MultiAZ部署进行小版本升级时,通常实现1秒或更少的宕机时间。ProxySQL是一个用于MySQL的开源代理。

传统的升级过程

目前,对于Amazon RDS for MySQL数据库的小版本升级或系统维护更新通常需要几分钟,并需要计划停机。这些自定义升级解决方案并未完全自动化,使用时复杂,需要协调多个应用用户,且资源消耗大,构建费用高。

通过使用Amazon RDS MultiAZ DB集群,您可以将小版本升级或系统维护更新的宕机时间缩短至通常35秒或更少。而结合ProxySQL后,这个停机时间可以进一步减少到通常1秒或更少。

解决方案概览

在升级Amazon RDS MultiAZ DB集群的小版本时,过程开始于按顺序应用补丁到每个可读实例。升完两个读取器后,将其中一个提升为新的写入器,随后对旧的写入器进行升级。这一切的切换过程大约需要1秒或更少。然而,应用程序仍可能需要经历至少35秒的宕机。这是因为域名系统DNS传播延迟引起的集群端点的变化。

通过设置ProxySQL与Amazon RDS MultiAZ DB集群,您现在可以将小版本升级和系统维护更新的宕机时间减少到通常1秒或更少。ProxySQL能监控数据库的写入器变化并将流量重定向到新写入器。当针对Amazon RDS MultiAZ DB集群正确配置时,ProxySQL不受DNS传播延迟的影响,能快速检测新写入器的变化,从而在小版本升级中,使应用程序的停机时间通常保持在1秒以内。

接下来的部分中,我们将演示如何配置ProxySQL用于Amazon RDS for MySQL MultiAZ DB集群,以减少您的应用程序在小版本升级或系统维护更新期间的停机时间通常为1秒或更少。

前提条件

在详细介绍设置ProxySQL的步骤之前,您需要满足以下要求:

一个Amazon RDS for MySQL MultiAZ DB集群。您可以使用现有集群或创建一个新的集群。请记得使用一个运行较旧MySQL版本的集群,以便测试1秒或更少的停机时间的小版本升级。一个Amazon Elastic Compute CloudAmazon EC2实例用于ProxySQL。EC2实例应与您的Amazon RDS MultiAZ DB集群位于同一区域和VPC中。建议使用Amazon Linux 2或更高版本的EC2实例。推荐使用ProxySQL版本251或更高版本。如果您已经有一个在与您的Amazon RDS MultiAZ DB集群相同区域和VPC中运行ProxySQL的EC2实例,可以使用相同实例并按照本文设置。如果没有,请在新EC2实例上安装ProxySQL并完成初始配置。欲了解更多信息,请参阅入门指南。

收集Amazon RDS MultiAZ DB集群中所有实例的端点和端口

一整个Amazon RDS MultiAZ DB集群有一个写入实例和两个读取实例。集群中每个DB实例都有自己的内置端点。您可以通过AWS管理控制台、AWS命令行界面AWS CLI或Amazon RDS API来找到所有集群实例的端点和端口。

通过控制台查找实例端点和端口

要使用控制台,完成以下步骤:

在Amazon RDS控制台中,选择DB集群创建所在的区域。在导航窗格中,选择“数据库”,以显示所有DB实例的列表。选择DB集群的名称。选择DB集群的instance1名称,以显示所有详细信息。

在“连接与安全”选项卡中,记下实例的端点和端口号。

对DB集群的instance2和instance3重复此步骤,以收集其端点和端口信息。

免费加速器15分钟试用

在本示例中,我们的Amazon RDS MultiAZ DB集群mycluster具有以下实例端点和端口信息。

实例端点端口myclusterinstance1csempbee1cemuswest2rdsamazonawscom3306myclusterinstance2csempbee1cemuswest2rdsamazonawscom3306myclusterinstance3csempbee1cemuswest2rdsamazonawscom3306

使用AWS CLI查找实例端点和端口

要使用AWS CLI,通过describedbclusters命令找到集群所有三个实例的DBInstanceIdentifier。然后使用describedbinstances命令查找每个实例的端点和端口信息。

使用Amazon RDS API查找实例端点和端口

要使用Amazon RDS API,调用DescribeDBClusters API查找集群所有实例的DBInstanceIdentifier。然后调用DescribeDBInstances API查找每个实例的端点和端口信息。

通过使用 ProxySQL 实现一次停机时间不超过一秒的升级,适用于拥有两个可读备用的 Amazon

将Amazon RDS MultiAZ DB集群接入ProxySQL

使用在上一步中检索到的实例端点和端口信息,将Amazon RDS MultiAZ DB集群接入ProxySQL。这将防止ProxySQL受到前面提到的DNS传播延迟问题的影响。

连接到运行ProxySQL的EC2实例。

通过管理界面连接ProxySQL进行配置:

bashmysql u proxyadmin p password h 127001 P6032 prompt=ProxySQL Admingt

将您在前面检索到的Amazon RDS MultiAZ DB集群中所有实例的端点和端口插入到ProxySQL配置的mysqlservers表中。在以下示例中,我们将集群的所有实例接入了hostgroupid 1。您可以根据需要使用不同的ID,但所有实例应接入同一个hostgroupid。

添加instance1的端点:

bashProxySQL Admingt INSERT INTO mysqlservers(hostgroupidhostnameport) VALUES(1myclusterinstance1csempbee1cemuswest2rdsamazonawscom3306)

添加instance2的端点:

bashProxySQL Admingt INSERT INTO mysqlservers(hostgroupidhostnameport) VALUES(1myclusterinstance2csempbee1cemuswest2rdsamazonawscom3306)

添加instance3的端点:

bashProxySQL Admingt INSERT INTO mysqlservers(hostgroupidhostnameport) VALUES(1myclusterinstance3csempbee1cemuswest2rdsamazonawscom3306)

验证集群的三个实例已添加到ProxySQL配置中:

bashProxySQL Admingt select hostgroupid hostname port status from mysqlservers hostgroupid hostname port status 1 myclusterinstance1csempbee1cemuswest2rdsamazonawscom 3306 ONLINE 1 myclusterinstance2csempbee1cemuswest2rdsamazonawscom 3306 ONLINE 1 myclusterinstance3csempbee1cemuswest2rdsamazonawscom 3306 ONLINE 3 rows in set (000 sec)

将mysqlservers表配置加载到运行时并保存到磁盘:

bashProxySQL Admingt LOAD MYSQL SERVERS TO RUNTIMEProxySQL Admingt SAVE MYSQL SERVERS TO DISK

配置ProxySQL监控Amazon RDS MultiAZ DB集群

这将帮助ProxySQL监控Amazon RDS MultiAZ DB集群中的写入器变化,在1秒或更少内检测到新写入器,并迅速将流量重定向到新写入器。

在这个示例中,我们使用默认的ProxySQL监控用户monitor和密码monitor配置监控。您可以使用不同的监控用户和密码。

首先,在Amazon RDS MultiAZ DB集群上配置ProxySQL监控用户。

登录到Amazon RDS for MySQL MultiAZ DB集群数据库。

创建ProxySQL监控用户并授予其监控权限:

bashmysqlgt CREATE USER monitor@ IDENTIFIED BY monitormysqlgt GRANT PROCESS REPLICATION CLIENT ON TO monitor@

现在配置ProxySQL监控Amazon RDS MultiAZ DB集群。

连接到运行ProxySQL的EC2实例。

通过管理界面连接ProxySQL以进行配置:

bashmysql u proxyadmin p password h 127001 P6032 prompt=ProxySQL Admingt

配置监控用户和密码:

bashProxySQL Admingt UPDATE globalvariables SET variablevalue=monitor WHERE variablename=mysqlmonitorusernameProxySQL Admingt UPDATE globalvariables SET variablevalue=monitor WHERE variablename=mysqlmonitorpassword

通过设置mysqlmonitorreadonlyinterval为100毫秒来配置监控间隔。这将有助于ProxySQL在100毫秒内检测到新写入器的变化。

bashProxySQL Admingt UPDATE globalvariables SET variablevalue=100 WHERE variablename=mysqlmonitorreadonlyinterval

将配置加载到运行时并保存到磁盘:

bashProxySQL Admingt LOAD MYSQL VARIABLES TO RUNTIMEProxySQL Admingt SAVE MYSQL VARIABLES TO DISK

验证ProxySQL能够连接到Amazon RDS MultiAZ DB集群并进行监控,确保没有连接或心跳错误。

bashProxySQL Admingt SELECT FROM monitormysqlserverconnectlog ORDER BY timestartus DESC LIMIT 3 hostname port timestartus connectsuccesstimeus connecterror myclusterinstance3csempbee1cemuswest2rdsamazonawscom 3306 1699340963758529 1776 NULL myclusterinstance2csempbee1cemuswest2rdsamazonawscom 3306 1699340963326166 806 NULL myclusterinstance1csempbee1cemuswest2rdsamazonawscom 3306 1699340962893914 3000 NULL 3 rows in set (000 sec)

ProxySQL Admingt SELECT FROM monitormysqlserverpinglog ORDER BY timestartus DESC LIMIT 3 hostname port timestartus pingsuccesstimeus pingerror myclusterinstance2csempbee1cemuswest2rdsamazonawscom 3306 1699341052591621 300 NULL myclusterinstance3csempbee1cemuswest2rdsamazonawscom 3306 1699341052591377 576 NULL myclusterinstance1csempbee1cemuswest2rdsamazonawscom 3306 1699341052591211 752 NULL 3 rows in set (000 sec)

配置ProxySQL MySQL复制主机组

ProxySQL使用MySQL复制主机组hostgroup来理解复制拓扑,识别集群中的阅读器和写入器实例,并监控集群的拓扑变化。

在mysqlreplicationhostgroups表中的每一行表示一对写入器和阅读器主机组。ProxySQL监控每个主机组对中所有服务器的readonly属性,并将每个服务器分配到相应的写入器或阅读器主机组。

在本示例中,我们在ProxySQL上创建了writerhostgroup 1和readerhostgroup 2,因为在前一步中我们已将集群的所有实例接入hostgroupid 1。

在ProxySQL上创建读写主机组:

bashProxySQL Admingt INSERT INTO mysqlreplicationhostgroups (writerhostgroupreaderhostgroupcomment) VALUES (12aws1secdowntime)ProxySQL Admingt select from mysqlreplicationhostgroups writerhostgroup readerhostgroup checktype comment 1 2 readonly aws1secdowntime

启用复制主机组:

bashProxySQL Admingt LOAD MYSQL SERVERS TO RUNTIMEProxySQL Admingt SAVE MYSQL SERVERS TO DISK

验证两个阅读器实例(readonly=1)和一个写入器实例(readonly=0)均已被正确分组到相应的主机组,并且日志中没有错误。

bashProxySQL Admingt SELECT FROM monitormysqlserverreadonlylog ORDER BY timestartus DESC LIMIT 3 hostname port timestartus successtimeus readonly error myclusterinstance2csempbee1cemuswest

飞鱼加速器(中国)官方网站|飞鱼加速器

电话:13594780107

联系人:周经理

邮箱:addictive@hotmail.com

网址:https://www.ghcyd.com

地址:泉州市刊舌入口209号

在线留言

  • 体验移动端

    体验移动端

  • 联系客服

    联系客服