PolarDB MySQL数据库升级策略

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 背景数据库的可用性对于客户是至关重要的,根据CAP理论,分布式和一致性、可用性只能二选一,所以在云原生数据库(依赖多副本)或者分布式TP系统中,大多都选择牺牲一些一致性来保证分布式和可用性,足以看出可用性的地位是及其重要的,所以任何数据库内核都会针对可用性做很多特性改进,比如热备、双活多活、异地灾备、增强一致性协议和主从复制能力、甚至增强备份恢复能力等等。我们了解,影响可用性的无外乎几种场景,如严

背景

数据库的可用性对于客户是至关重要的,根据CAP理论,分布式和一致性、可用性只能二选一,所以在云原生数据库(依赖多副本)或者分布式TP系统中,大多都选择牺牲一些一致性来保证分布式和可用性,足以看出可用性的地位是及其重要的,所以任何数据库内核都会针对可用性做很多特性改进,比如热备、双活多活、异地灾备、增强一致性协议和主从复制能力、甚至增强备份恢复能力等等。

我们了解,影响可用性的无外乎几种场景,如严重的HANG、CRASH和功能的BUGs导致的不可用,数据库的运维升级、数据库相关依赖的基础组件BUGs或者升级,硬件故障或者硬件升级,灾难恢复时间长,主备切换时间长,备份恢复时间长等等。本文重点要说的是针对升级造成的不可用的原因、背后的原理以及采取的策略。升级之所以重要的原因是因为,客户通常由于碰到严重BUGs问题不可用后,不得不升级数据库版本导致的二次不可用。虽然可以在主动运维时间去升级,但是他们仍旧希望降低该时间或者能够了解升级黑盒背后的故事。因此,解决缩短升级时间也是数据库内核非常重要的技术方向。

商业数据库DB2架构和Rolling Update升级策略

说到升级技术和方案,那不得不依赖于各个数据库内核的原理和技术架构。比如这里先来说下DB2的purescale和PolarDB MySQL的架构来更好的理解他们之间的差异。这两个数据库都是共享存储,DB2 purescale目前支持行级多写架构。

在DB2 purescale的架构下,如何升级的呢。假如两个member节点的rolling update如何做?两个Member从GA生成到FP1上。

可以看到DB2的计算节点是可以支持两个版本同时存在,顺利在不影响客户应用的情况下,达到逐步升级的过程。

AWS RDS升级策略

RDS通常是MySQL的托管服务,通常提供备节点和只读节点来进行服务。我们先来通过AWS的RDS for MySQL了解RDS的升级过程。

 

该过程展示了如何利用只读实例来做滚动升级。

PolarDB架构和升级策略

PolarDB也是共享存储模式,支持一写15读,多租户多写、热备已经上线,行级多写在开发中,所以这里架构和升级策略暂时还是基于一写多读的架构。

由于PolarDB MySQL 100%兼容官方MySQL,并且增加了物理复制能力,日志的物理复制技术+PolarDB中三种角色PRIMARY、REPLICA和STANDBY,那么为集群升级带来的很大的不同。下面我们就介绍下PolarDB MySQL中的热升级、冷升级和大版本升级。

我们知道对于单机MySQL或者主备MySQL模式下,采用binlog同步机制的方式进行复制,天然可以支持跨版本和跨数据源类型,因此采用AWS RDS的升级策略,只要做到管控无缝切换,客户在升级小版本和大版本时基本上可以达到闪断而降低对业务的影响。闪断这个名字也是云数据库的发明的名字,即客户端重连既可以恢复正常业务,而非一直等待实例启动才能恢复业务。

然而对于PolarDB MySQL的架构而言,采用了物理复制+共享存储和一写多读的架构,那就意味着升级过程变得比较复杂。这里有几个痛点和传统MySQL单机有不同:

  • 升级中必须考虑物理复制+一写多读架构造成的升级影响,物理复制无法进行双向复制,只能由PRIMARY节点来进行写入。
  • 升级策略根据MySQL的版本中是否影响元数据(DD) 、Information Schema表(IS)、Performance Schema表(PS)和Server层系统表(Server System Table)来决定是否采用闪断或者中断模式。

热升级策略

热升级策略解决同版本中的小版本升级,也就是升级过程用户应用程序只需要闪断。整个顺序是按照STANDBY-REPLICA-PRIMARY的顺序。为什么按照这个顺序?其实也很好理解,由于元数据等信息并没有改变,升级过程并不需要修改Page信息而导致必须先升级PRIMARY。

Standby:

RO:

RW: 

搭建复制关系

冷升级策略

冷升级策略是由于大版本修改元数据信息、IS、PS等无法通过升级版本后,通过执行SQL的方式来同步,通过热升级会破坏物理复制机制而采取的升级策略,由于升级顺序是按照PRIMARY-REPLICA-STANDBY的顺序,因此会中断业务。冷升级由于很好理解,这里就列出步骤:

  • 检查 REPLICA和STANDBY同步延迟正常
  • 对于 REPLICA和STANDBY节点,停止物理复制线程
  • 对于 PRIMARY节点,停止服务,替换二进制,启动后,进行系统升级,升级完成后启动检查版本和角色
  • 升级所有REPLICA节点,替换二进制,启动后,查看版本和角色
  • 升级STANDBY节点,替换二进制,启动后,查看版本和角色,追加物理复制

目前PolarDB MySQL的小版本为了能够让客户平滑的使用,已经不采用冷升级的方式,而从设计新功能角度已经考虑了热升级的方式。而目前的8.0.1版本(基于MySQL 8.0.13)升级到8.0.2版本(基于MySQL 8.0.18)版本,由于官方元数据等信息变化必须采取冷升级的方式。另外还有一些GDN集群的场景,升级过程也会遇到冷升级的情况。

大版本升级策略

PolarDB MySQL由于目前支持5.6版本(基于MySQL 5.6)、5.7版本(基于MySQL 5.7)和8.0.x版本(基于MySQL 8.0.x),很多新的功能在8.0.x,因此需要从5.6和5.7版本升级到最新的8.0.x版本,因此提供了一键式升级的方式。虽然是大版本升级,但是仍然能提供用户应用程序闪断的机制,通过内部的管控流程来减少用户升级带来的影响。

升级支持方式

  • PolarDB MySQL引擎5.6升级至PolarDB MySQL引擎5.7。
  • PolarDB MySQL引擎5.6升级至PolarDB MySQL引擎8.0。
  • PolarDB MySQL引擎5.7升级至PolarDB MySQL引擎8.0。

升级优势

  • 可保留数据库原来的连接地址,无需修改应用程序的任何连接配置即可切换至目标版本。
  • 升级完全免费。
  • 升级过程数据0丢失。
  • 支持增量迁移,停机时间小于10分钟。
  • 支持在线热升级,升级过程仅闪断一次。
  • 支持回滚操作,升级失败可以在10分钟内恢复。

和上面原地升级的方式不同,PolarDB MySQL引擎集群之间升级是免费,但需要收取新建计算节点的费用。而PolarDB MySQL引擎集群之间的升级支持带地址切换,系统会自动交换源PolarDB MySQL引擎集群和目标PolarDB MySQL引擎集群上的连接地址。

 

一键式大版本升级主要依赖于DTS服务和Binlog同步机制,因此可以支持更大更灵活的方式。

结论  

总之,不管何种升级策略,数据库内核的目标都是要做到无论由于故障实例crash、主动运维和升级,都能够做到最小限度的影响应用,甚至通过更多的技术如热备、多写、共享内存池、高可用集群、事务保留、SCC、Voting disk等技术做到真正的云Zero Downtime。

参考链接

Performing rolling updates in a Db2 high availability disaster recovery (HADR) environment》

《PolarDB · 新品介绍 · 深入了解阿里云新一代产品 PolarDB》

《PolarDB 自研数据库的数据安全保障和容灾体系建设》

《PolarDB 容灾体系建设之一:集群实例内HA切换》

《Voting Disk:PolarDB的高可用容灾方案》

《Rds MySQL内核版本管理》

以最短的停机时间对 Amazon Aurora MySQL 执行主要版本升级

升级 Amazon RDS for MySQL 和 Amazon RDS for MariaDB 的最佳实践

《PolarDB for MySQL引擎大版本一键升级》

一键升级RDS MySQL至PolarDB MySQL引擎

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
189 66
|
1天前
|
关系型数据库 MySQL Linux
MySQL版本升级(8.0.31->8.0.37)
本次升级将MySQL从8.0.31升级到8.0.37,采用就地升级方式。具体步骤包括:停止MySQL服务、备份数据目录、下载并解压新版本的RPM包,使用`yum update`命令更新已安装的MySQL组件,最后启动MySQL服务并验证版本。整个过程需确保所有相关RPM包一同升级,避免部分包遗漏导致的问题。官方文档提供了详细指导,确保升级顺利进行。
30 16
|
2天前
|
NoSQL 关系型数据库 分布式数据库
基于PolarDB的图分析:通过DTS将其它数据库的数据表同步到PolarDB的图
本文介绍了使用DTS任务将数据从MySQL等数据源实时同步到PolarDB-PG的图数据库中的步骤.
|
6天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
24 3
|
6天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
29 3
|
5天前
|
SQL 关系型数据库 分布式数据库
夺冠在即 | PolarDB数据库创新设计赛(天池杯)决赛答辩通知
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)于8月21日启动,吸引了200多所高校近千支队伍参赛。经过激烈角逐,60支队伍晋级决赛第一阶段,36支队伍脱颖而出进入现场答辩,将于12月29日在武汉大学争夺最终奖项。决赛要求选手基于PolarDB-PG开源代码部署集群并优化TPCH查询性能。完赛率超90%,成绩表现出明显梯度,前20名均在500秒内完成。评委来自学术界和工业界,确保评选公正。预祝选手们取得优异成绩!
|
6天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
33 2
|
12天前
|
关系型数据库 MySQL Linux
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
当MySQL 8.4启动时报错“io_setup() failed with EAGAIN”时,通常是由于系统AIO资源不足所致。通过增加AIO上下文数量、调整MySQL配置、优化系统资源或升级内核版本,可以有效解决这一问题。上述解决方案详细且实用,能够帮助管理员快速定位并处理此类问题,确保数据库系统的正常运行。
52 9
|
19天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
139 15
|
13天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。