不吐不快,一次意外宕机事故,让我对阿里云 polardb 充满了疑惑

2022-05-30 23:07:34 +08:00
 rekulas

描述下上周本小组经历的一次 polardb 数据库宕机事故,为了尽可能公正已经尽量屏蔽个人主观思想。

polardb是阿里云目前主推的商业数据库之一,完全兼容 mysql 且具有极好的性能,官方宣传比 mysql 快几倍(我们使用中也感觉是要快些至于倍率没测试过),在市场上知名度很高。

背景: 我们从 2020 年开始使用 polardb ,一直以来表现良好。

团队有内网业务+外网业务,因此内外网均有数据库部署,内网是自建 mysql8 ,外网是 polardb 基础版本 2 核 8G*2 节点,基础年费大约 6k 再加一些额外费用大概 7-9k/年。

事故描述

24 日 11 点突然收到 polardb 数据库异常告警邮件,随后同事告诉我进行了数据库导出导致数据库似乎无法访问了,我立即开始处理。 ps: 其实在 16 号我们也经历过一次事故,同事在早上执行了一个 alter table 命令,随后发现所有数据库均无法访问,我发工单联系后才找到重启按钮进行重启随后恢复,也理解这次事故毕竟高峰期执行 DDL 类操作本身就有一定风险,但我心中仍然埋下了一些不满:我们内网数据库即使高峰期执行 alter 操作也最多影响关联的几张表,不至于影响整个服务器(所以当时我怀疑数据库隔离没做好)。问题解决之后提醒过同事尽量避免白天执行表结构操作。

而这次同事通过 navicat 拉取几张表时,突然中断异常并导致数据库卡死,很多服务访问极其缓慢,查看 cpu 发现一直 100%不降,我立即登录 navicat 查询 processlist ,但是没有发现任何异常,这时候我心里还比较轻松,毕竟 polardb 重启一次还是比较快的,所以果断点了重启以为马上就恢复了。

然而随后发生的事情让我陷入了迷茫,重启之后只正常了 10 秒左右 2 个节点瞬间又拉到 100%,我再次检查 processlist 和事务表,仍然没有发现异常进程或 sql ,就有点慌了,立即电话阿里云客服以为这样可以快速得到技术支持,然而浪费了几分钟时间客服让我提工单会有专人处理,虽然我已经严重声明发生了重大事故。。。

没办法我只能发起工单,过程并不愉快,因为我描述了发生重大问题请立即协助,阿里云仍然半小时后才发来一个:已收到您的问题,我当时就有点发火了,言辞激烈请对方立即安排专人帮忙协助查询异常原因,但对方仍然不紧不慢的回复,一会说慢日志导致一会说 io 访问量太大导致。

我这时也对阿里云协助失去了信心,只能采用最后一个办法-临时升级配置,为什么一开始不升级,因为我不敢赌:阿里云升级和开通新服务时间不稳定,有时候几分钟完成有时候要半个小时,在部分服务还能勉强使用的情况下贸然升级有可能导致更严重的问题。

幸运的是这次事故运气比较好,10 分钟左右就完成了,随后我也发现 cpu 开始回复正常,所有数据库也恢复正常。

后续: 我本想让阿里云下来再继续协助调查为什么 cpu 异常,但是工单客服一直像机器人一般回复,我也失去了兴趣,只是今年打算 polar 到期之后迁移倒 ecs 上,毕竟 ecs 还是比较稳定,之前看重 polardb 主要就是看中稳定性,但是如果稳定性得不到保障那还不如放到自建,我们自建数据库也连续 4 年未发生过重大异常,还是挺稳定的,唯一要担心的就是热备份问题。

附件截图: 阿里的回复
https://wx2.sinaimg.cn/mw2000/786620bcly1h2qtesa7akj21e01jkdog.jpg
cpu 、innodb 缓冲请求、IO 吞吐量
https://wx4.sinaimg.cn/mw2000/786620bcly1h2qtes0jrlj20xc0xctby.jpg
iops 、扫描行数、tps
https://wx1.sinaimg.cn/mw2000/786620bcly1h2qtes4zdij20xc0xcn0w.jpg

事故分析: 事故结束后我仔细查看了日志报表,首先确认了客服说的 io 和慢日志都不是事故主因,从报表中可以看到 io 和 iops 都不高,不可能卡死整个实例(也检查过带宽也很低),异常的数据有 innodb 缓冲请求和扫描行数,因为同事导出的总数据量才大概 2-3 百万级别,这个扫描量显得极其可疑,我在事故后也重新复制了一台新实例模拟事故场景,都没有发现 cpu 、io 、scan 有不正常波动,因此我有点怀疑 polardb 本身 bug 导致或者实例所在机器有缺陷导致。

其实整个事故我最不爽的并非事故本身,而是阿里云的处理态度,在发生严重事故了没有协助客户积极处理,第一个回复花了半个小时,之后的回复也在水,我感受不到对方有一丝急迫的心情,事故完成后也不愿去调查事故原因只会顾左言他,这才是我决定放弃 polardb 的主因。如果他们愿意认真调查下,在事故持续的大半个小时里进入实例服务器检查异常,我也绝对会积极配合跟他们一起找出问题来,然而并没有。

疑惑点 其实第一次的 alter 事故我还是有些疑惑的,因为一个访问量并不大的表更新卡住了整个实例的所有数据库,这正常吗?我们有几台自建数据库也只有 2-4 核但是执行 ddl 操作也最多卡住部分表而已。

第二个疑惑点就是 navicat 导出怎么可能导致 cpu 资源耗尽,我们事后认真检查了确认 navicat 导出只有 select 和 show 命令,正常来说这是比较安全的,而且我们随后测试对 cpu 和 io 的影响都非常小,不大可能是导出本身导致的问题

1666 次点击
所在节点    数据库
31 条回复
rekulas
2022-05-30 23:13:26 +08:00
smallparking
2022-05-31 00:19:57 +08:00
说这个没有用 ,你那出查询计划出来 直接就一锤定音了
IDAEngine
2022-05-31 09:21:58 +08:00
polardb 本来就是舍弃了很多 mysql 的功能特性换性能,有得必有失
sss495088732
2022-05-31 09:47:48 +08:00
不知道为什么产品这么多问题还能继续卖.他们的 analyticDB,不能创建一个 GP 原生支持的 index 类型.
折腾了两个星期,然后说没办法了,然后跟我们说没有排期修改这个 bug.
腾讯云也是.容器镜像的服务上次在 V2 还回复我说改好了..真的在 V2 回帖还是跟同事确认清楚吧.
捆绑使用 coding,结果一堆 bug.创建完镜像触发构建的时候还能触发到别的容器上.拉取仓库代码还能拉到非指定仓库(一看就是前端 bug)真是绝了这些厂商
华为云更牛逼.那个客服工单跟没有一样.想起来了回复你一下.真实便宜没好货.
上云这些年并没有节省运维的成本.
rekulas
2022-05-31 10:07:01 +08:00
@sss495088732 有一些同感,多年的云服务经验告诉我,不出问题的时候确实比较省心,但一旦出了问题比自己维护更恼火,所以云服务到底节约了多少成本呢?这是一个量子力学问题 🤣
TJT
2022-05-31 12:46:25 +08:00
曾经从 MySQL 迁移 PolarDb ,后来又换回来了,记得当时的原因是一次升级实例规格后出现了故障,而且长时间没办法恢复,连最基础的在线迁移升级都没做好,就不敢继续用下去了。
encro
2022-05-31 13:59:30 +08:00
@sss495088732

什么 analyticDB ,polardb 都是基于上游的,
上游有的 Bug ,没有的特性,当然他们也不能解决。
encro
2022-05-31 14:04:59 +08:00
polardb 一年不到 1 万能买什么配置?
你那个一秒读取 2000K 已经超出了。
sss495088732
2022-05-31 14:06:06 +08:00
@encro analyticDB postgresql 基于 greenplum,我要使用 GP 的特性(同个 version,选型的时候就是想使用这个特性),他没有,那使用上就跟上游的体验不一样了.
而且到现在他们还没找到那个特性为什么会导致数据库宕掉所以禁用掉了
最主要是他们并不准备解决...
encro
2022-05-31 14:06:47 +08:00
数据量大,用户多的情况,新增字段必须用 online ddl 语法,修改字段必须等没人时候。
sss495088732
2022-05-31 14:12:11 +08:00
@rekulas 没有节省成本 0.0,呆过的公司使用云服务几年后都开始自建.尤其是云 GPU 服务器实在是太贵了.而且出问题没有正常服务器的支持工单售后
encro
2022-05-31 14:12:57 +08:00
@sss495088732

analyticDB 应该 更多基于 pg ,有一些 gp 没有的特性。

目前只有等 pg 16 出来,如果增量物化视图稳定。那么分析特性就会强大很多。
encro
2022-05-31 14:15:36 +08:00
@rekulas

@sss495088732

我现在一直用云吧。

当你不需要一个运维,不需要一台完整服务器性能的时候,用云还是可以省事很多的。
gt15207
2022-05-31 15:07:38 +08:00
个人感觉:

一条 SQL 干躺一个大库(干掉 DBA 半年奖金)的例子见了太多了。

下次你可以在发生问题时收集 perf top (比如 perf top -s comm,pid,symbol )输出,
看看消耗 CPU 的都是什么 OS,DB 函数,
你就知道是啥引起的问题了。
rekulas
2022-05-31 15:21:51 +08:00
@encro 问题是总获取行数也才不到 300w 。。。,其实这个 db 的性能还是挺强的了,我们做活动并发几千还是能勉强抗住
encro
2022-05-31 15:29:41 +08:00
@rekulas

所以是 SQL 写得有问题?变成了 n * m 了。

show full processlist 和 慢查询日志能解决绝大部分问题。

看你内容,大家都有权限,所以你永远不知道一些数据库小白们用了什么神操作。

我曾经在一个大公司,发现勿删记录、线上改大表、慢查询飞起,
所以最靠谱的是数据库表设计和查询要交由专业人士来审核和上线。
encro
2022-05-31 15:34:43 +08:00
@rekulas

“其实这个 db 的性能还是挺强的了,我们做活动并发几千还是能勉强抗住”

不要强调这点,没有银弹,
当 Mysql 和 Pg 的工程师都是 SB ,没有阿里厉害,随便就能 N 倍性能?
通常是某些地方耍小聪明投机取巧,如果具备普适性,那么会被社区合并到下个版本去,没有合并,那么可能不具备普适性。
sss495088732
2022-05-31 15:37:37 +08:00
@encro 诶.最离谱的是我照着他文档写的测试特性..现在那个文档还挂在上面呢...
rekulas
2022-05-31 15:37:57 +08:00
@encro 正常导出而已,sql 都是固定的不会有问题 process 和慢日志都检查过了,结合异常报表,几乎可以肯定是服务的问题,只是不确定是硬件还是软件导致
encro
2022-05-31 15:45:41 +08:00
@sss495088732

估计遇到了问题没解决所以下掉? 主要负责工程师已经离职或者换岗,甚至项目线被砍掉都有可能。

不要太期待云计算公司开发的边缘项目会好过专业的数据库公司。
数据库设计的门槛还是挺高的,日志,自动化测试等都需要大量人力和物力支持。
如果这个他们内部在用,那么可能还好点,如果内部没用,那么估计就偶尔支持一下了,几个人走了一个就没法持续了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/856320

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX