InfoQ|一次近乎完美的PostgreSQL版本大升级实践( 四 )
使用 Chef 同步更改 , 以保持配置管理的完整性
验证集群的完整性和状态
执行 GCP 快照
(可能的)回滚过程
playbook 以交互方式逐个运行所有任务 , 让程序员得以在任意给定执行点跳过或暂停程序 。 参与 staging 测试和迭代的所有团队成员都要过目升级过程中的所有步骤 , staging 环境让我们通过演习提前找到升级过程中潜在的漏洞 。 而执行和迭代 staging 中自动化过程则让我们实现了 PostgreSQL 9.6 版本至 11 版本的基本无缺陷升级 。
为完成本次的版本升级 , GitLab 的 QA 团队将部分测试中发现的问题反馈给我们 , 这一部分的工作可以在这条 issue 中找到 。
PostgreSQL 预升级的步骤
升级工作的第一步是“预升级” , 这里涉及到预留给回滚的示例 。 我们做了相应分析 , 以确保新的集群可以不丢失吞吐量的情况下 , 以 8 个示例为起点 , 保留 4 个通过标准 Patroni 集群同步的 9.6 版本示例 , 为后续可能需要的回滚情况准备(共计 12 个实例) 。
在这个阶段 , 我们还需要停止依赖 PostgreSQL 的服务 , 诸如 PgBouncer、Chef 客户端 , 以及 Patroni 服务 。
在正式开始更新前 , 必须要告知 Patroni , 避免任何虚假 leader 选举 , 通过 GCP 快照(通过对应 低级备份 API 获得)进行一致的备份 , 并通过运行 Chef 应用新的设置 。
PostgreSQL 升级阶段
首先 , 停止所有节点 。
然后 , 运行以下检查:
pg_upgrade 版本检查
验证所有节点都已同步 , 并且不再接受任何流量
一旦主节点数据升级完毕 , 就会触发 rsync 进程以同步所有副本数据 。 在升级完成后 , 启动 Patroni 服务 , 这样所有副本都能轻松更新至新集群的配置 。
通过 Chef 安装二进制文件 , 新集群在版本方面的设置是在同一个 MR 中定义的 , MR 源自 GitLab.com , 可以安装用于数据库中的拓展项 。
最后一个阶段则包括恢复流量、运行初始的真空期 , 以及最后的启动 PgBouncer 和 Chef 客户端服务 。
迁移日
到了最后 , 我们为运行生产线上升级做好了万全准备 , 团队在周日一早 8:45 UTC 开始会议(对有的人来说是晚上) 。 服务将最多下线两小时 , 当最终的通知下达后 , 工程团队终于可以开始进行 。
升级过程由停止所有流量及相关服务开始 , 这是为了避免用户在更新中途访问网站 。
下面图表显示在服务更新之前 , 维护期间(图标中的空白部分)、以及维护结束、流量恢复后的流量和 HTTP 数据统计 。
本文插图
GitLab.com 上的数据统计图 , 从维护开始到结束
整个流程共花费四个小时 , 其中仅包括 两小时断线时间 。
此外 , 我们录下了 PostgreSQL 更新的全过程并发布在 GitLab Unfiltered 上 。
【InfoQ|一次近乎完美的PostgreSQL版本大升级实践】https://about.gitlab.com/blog/2020/09/11/gitlab-pg-upgrade/
点个在看少个 bug
推荐阅读
- 玩懂手机|一加OnePlus Nord N10、N100将获得一次重大安卓更新
- 风口|新能源车下一个“风口”?换电模式或将迎来一次逆袭
- 无人科技|2017 年发布的 iPhone X,第一次出现竟是在 2013 年?
- 南木子|为啥有人宁愿每年买一部千元机,也不愿一次买部高端机用好几年?
- 群众网|为啥有人宁愿每年买一部千元机,也不愿一次买部高端机用好几年?
- 太平洋电脑网|【回顾】苹果发布会:献上第一次的M1芯片!全新Mac产品还有彩蛋!
- OPPO手机|一次解决三大痛点!双11入手Reno4 SE,还享真香福利
- 斑马消费|罗永浩变了:热衷于圈粉、赚快钱,一次进账有望超过2.5亿元
- 创科数字|绿厂OPPO又玩跨界联名,这一次是士力架
- 私人|身为土鳖的我第一次听见 VERTU/纬图 的时候——满脸震惊
