我的问题有两个部分:
- 启动用于测试目的的RDS故障转移的最佳方法是什么?
- 如何监视故障转移期间的连接,以观察AWS将用户重新连接到待机实例所需的时间?
关于第(1)部分:如果我正确理解,所有实例修改都是在备用上进行的,然后AWS通过将CNAME翻转到备用时将其失败,因为主每组更新,因此,如果我要进行任何操作一种实例修改,然后选择"立即应用",它应导致故障转移,正确?
关于第(2)部分:我正在专门寻找一种监视Oracle RDS实例故障转移的方法,无论是通过lambda函数,bash脚本还是其他一些方式。据我所知,即使我允许通过安全组允许所有ICMP流量,也无法将PING与RDS一起使用。我可以使用telnet或SQL客户端连接无麻烦。我想要的是某种方法的某种方式在故障转移过程中定期ping数据库,以查看与连接字符串切换的IP何时关联的何时进行多长时间。有任何建议吗?
- 正确,RD会在故障转移实例上进行修改,然后对此进行故障转移。根据他们的文档:
多AZ部署的可用性益处也扩展到 计划的维护和备份。在系统升级的情况下 OS修补或DB实例缩放,这些操作首先应用 在备用上,在自动故障转移之前。结果,你的 同样,可用性影响仅是自动的时间 故障转移要完成。
要模拟故障转移,重新启动时只需重新启动故障转移,而不是重新启动两者。从链接的文档中:
当您想模拟故障时,使用故障转移重新启动是有益的 用于测试或将操作还原到原始AZ的DB实例 发生故障转移后。
- 编写一个脚本,该脚本在常规间隔内与SQL客户端连接,并在您的喜好表上进行快速选择。您可以使用它来测量故障转移期间的真实停机时间;在将测试RD的修改估算到生产RDS之前,我们有一个与此相似的工具。我们的工具只需写入时间戳即可安装,以及它是否每隔几秒钟失败/成功。该工具将在重新启动,在剪裁完成后再次重新启动,失败和成功之前写成功。
附加资源:
- 修改Amazon RDS DB实例并使用Apply立即参数
- 修改运行Oracle数据库引擎的DB实例
更新以下内容:
我最终使用了一个简单的bash脚本:
date; while true; date; do nc -vz DBNAME.REGION.rds.amazonaws.com PORT; sleep 1; done
注意:以上是用于netcat-openbsd
。如果使用netcat-traditional
,则需要对此进行修改。
这将每秒轮询数据库,以查看是否仍然可以连接。通常,当我运行此操作然后通过故障转移开始重新启动时,该连接将在故障转移期间仅悬挂,然后在故障转移完成并恢复连接时显示超时错误,大概是因为故障转移通常比重启动时间更长。但是,如果重新启动恰好比故障转移需要更长的时间,则可能会有一段时间在重新启动完成后拒绝连接。无论如何,使用此方法,我能够获得一致的故障转移时间为2:08。
但是,与我最初认为的不同,大多数实例修改根本不涉及故障转移。我已经测试了调整实例大小的大小,并更改选项组和参数组,并且没有任何停机时间。
更改数据库引擎的确会导致故障转移。