为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用持久连接在AWS中处理PDO MySQL故障转移

如何使用持久连接在AWS中处理PDO MySQL故障转移

PHP
犯罪嫌疑人X 2021-05-13 22:50:39
我们遇到了AWS Aurora故障转移问题,并正在寻找解决方法的指针。设想AWS Aurora设置了两个端点:作家:主机:stackName-dbcluster-ID.cluster-ID.us-west-2.rds.amazonaws.com解析为IP:10.1.0.X读者:主机:stackName-dbcluster-ID.cluster-ro-ID.us-west-2.rds.amazonaws.com解析为IP:10.1.0.Y因此,我们的PDO MySQL连接字符串为stackName-dbcluster-ID.cluster-ID.us-west-2.rds.amazonaws.com(用于编写)故障转移后故障转移时,DNS条目将翻转为指向以下位置:读者:主机:stackName-dbcluster-ID.cluster-ro-ID.us-west-2.rds.amazonaws.com解析为IP:10.1.0.X作家:主机:stackName-dbcluster-ID.cluster-ID.us-west-2.rds.amazonaws.com解析为IP:10.1.0.Y至关重要的是,PDO连接字符串(用于写入)仍然是相同的“ stackName-dbcluster-ID.cluster-ID.us-west-2.rds.amazonaws.com”,但指向不同的IP地址。发生了什么我们遇到了错误1290“ SQLSTATE [HY000]:一般错误:1290 MySQL服务器正在使用--read-only选项运行,因此它无法执行此语句”。当数据库引擎停止启动时,我们的初始持久连接将“消失”并失效(我们将在重新连接/重试代码中立即进行处理)。但是,上面的错误意味着将向旧节点建立新连接,但随后不会随着DNS更改的传播而进一步失效。它们持续了10/15分钟(远远超出了DNS的TTL)。我的问题有谁知道是否基于连接字符串检索了PDO上的持久连接,还是使用IP或其他签名更可靠?证据表明它是主机名,但需要确认。有谁知道在PDO中将持久连接标记为“无效”的方法,因此不再使用它吗?或者,有什么我想念的吗?旁注我们已经有适当的代码来处理重试,并且告诉他们重试以获得新的非持久连接(有效)。在这一点上,我们可以“无效” PDO连接,因此脚本的下一次运行不会一遍又一遍地重复此循环。故障转移可以随时发生,因此我们无法执行手动操作,例如重新启动php(因为我们这次必须这样做)。没有持久的连接,性能会明显降低。FastCGI,Centos 16,PHP 7.2,MySQLD 5.0.12-dev(在Centos上是正常的-请参阅https://superuser.com/questions/1433346/php-shows-outdated-mysqlnd-version)
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信