昨天晚上,我们使用的阿里云 RDS SQL Server 2008 R2 实例突然出现持续 CPU 100% 问题,后来我们通过重启实例恢复了正常(详见故障公告)。但是在恢复正常后发现了新问题,这台 RDS 实例 IOPS 不够用,必须要进行升级,而且当时过了 0 点也是升级的好时间,再加上我们对升级到更高版本的 SQL Server 垂涎已久 —— 因为最新的 EF Core 3.0 不支持生成 SQL Server 2008 的分页 SQL (UseRowNumberForPaging),只是我们还没有确定新版 SQL Server 是自己搭建还是继续使用阿里云 RDS ,加上现在的 RDS 实例是包年买的,所以近期没有安排升级计划。现在迫不得已+顺水推舟,再加上阿里云 RDS 支持直接从 SQL Server 2008 R2 升级到 SQL Server 2016,于是我们临时决定进行升级操作。
升级操作本身很简单,点几下按钮,支付一下费用,整个升级过程由阿里云 RDS 自动完成,而且升级期间不影响现已实例的正常访问。我们唯一担心的是升级后新 SQL Server 实例要重新编译大量 SQL 语句,预热时间比较长,但是我们当时升级的话,有一夜时间进行预热,问题应该不大。于是,在 00:22 启动了升级,启动升级后,从阿里云那得知由于我们的数据库比较大,升级时间比较长,建议我们早上再来看升级是否成功。我们又多了一份担心,假如到明天早上也完成不了升级,到访问高峰时旧实例支撑不住怎么办,阿里云说如果到时真的完成不了升级,他们会想办法让就实例支撑住,于是就安心去睡觉了。
今天一大早上起床一看,升级已经完成了,而且比预想的快很多,只用了3个小时多一点。
这时发现有些不对劲,打开很多页面速度慢,应用日志中很多超时错误,升级后的 RDS 实例 CPU 占用居高不下。
System.Data.SqlClient.SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding
对于这个异常情况,我们当即采取了主备切换的操作,操作后发现主备切换一直停在“临时备份任务 25%”,切换无法完成,实例状态一直处于“主备库切换中”。
这时数据库超时问题变得越来越严重,博客后台保存操作多数会超时。
向阿里云反馈,阿里云排查后发现升级后备库的镜像没有搭建好,无法进行主备切换,阿里云建议我们重启实例。
根据阿里云的建议,我们尝试进行了重启实例的操作,但由于实例处于“主备库切换中”状态,根本不允许我们进行这个操作。
于是授权给阿里云重启,但重启就好了一会,接着又出现大量数据库操作超时问题。
8:49 从阿里云那得知 DBA 正在重建备库,主备切换要等备库重建完成才能进行。
这时已经别无选择,只剩下最后一招——升级 RDS 实例配置,悲剧的是,由于实例处于“主备库切换中”状态,也根本不允许变更配置操作。从阿里云得到进一步确认,升级配置是主备一起升,也必需要等到备库重建完成。
此时进入了最无奈无助的局面,眼睁睁地看着整个园子全面故障,却一点办法没有,只能没有任何耐心地“耐心”等待备库重建,更让人心碎的是这一等就等到 10:40 左右。
备库重建完成后,我们立即尝试升级配置,结果发现升级配置的计费有问题,配置没有任何变动的情况下,竟然会产生1万多的费用,似乎升级不是按我们已有的 SQL Server 2016 配置进行计算,而且按照之前 SQL Server 2008 的配置进行计算。这时,我们想到之前想尝试的主备切换还没做,于是,改为先进行主备切换。
11:05 进行了主备切换,11:10 主备切换完成后,全部恢复了正常,飞快的速度终于又回来了。
主备切换后,想眼看一下备库的 CPU 占用情况,结果发现 RDS 控制台针对备库的监控数据一片空白,阿里云的监控功能偏偏在这个时候出问题了。虽然恢复了正常,看不到监控数据,我们还是有些忐忑不安。
下午 13:30 之后开始进入下午的访问高峰时,访问速度又开始变慢了,问题又开始出现了。看来是当前的 RDS 实例配置不堪重负,必须要升级配置,虽然现在升级计费有问题,先升级再说,但是接下来出现的问题让我们傻眼了,在升级购买时却提示“询价失败,请联系客服同学”,屋漏偏逢连夜雨,升级配置也无法进行,只能提交工单,干等阿里云解决。
14:40 左右,阿里云解决了监控问题,备库的 CPU 也是居高不下,的确是升级后的 RDS 实例配置不够,唯有升级配置,但是升级配置的功能也出了问题。
现在唯有等阿里云解决无法升级 RDS 实例配置的问题。
非常非常抱歉,没想到这次数据库升级也是我们搬上阿里云到目前唯一一次数据库升级,竟然引发如此大的故障,给大家带来这么大的麻烦,非常愧疚。
【更新】
16:30 阿里云解决了升级 RDS 配置的问题,我们完成了购买,RDS 实例已经开始升级操作。
17:02 升级全部完成,16:52 开始 CPU 占用大幅下降。
17:10 确认升级后全面恢复正常。