engine_version 只写 8.4:用 Terraform 管生产 RDS for MySQL 的版本、Multi-AZ 和维护窗口
缘起
我们 prod 有 9 台 RDS for MySQL 主库,外加 1 台只读副本,全部用 Terraform 管。搭环境的时候,在”版本和维护”这件事上定了四条:
engine_version只写大版本8.4,不写小版本;- 打开小版本自动升级;
- 主库全部开 Multi-AZ;
- 每台库的维护窗口互相错开。
单看每一条都是很普通的设置,当时也没多想。直到有一天被问到一句话:”prod 的 RDS 会不会自己重启?”
为了回答这个问题,我把这四条对着文档和线上状态重新过了一遍,才发现它们是互相咬合的,而且有几处和我原先以为的不一样:写 8.4 并不保证拿到最新的小版本;开了自动升级也不等于紧跟最新版;Multi-AZ 挡不住小版本升级时的停机。
这篇把这四条各自解决什么问题、Terraform 里怎么写、哪里容易想当然,一起记下来。最后还有一段后续:这套方案后来被领导否了,prod 改成了版本锁死、手工升级。两套方案的对比也写在里面。