收藏 分销(赏)

企业运维之数据库原理与实践.pdf

上传人:Stan****Shan 文档编号:1240293 上传时间:2024-04-19 格式:PDF 页数:159 大小:49.19MB
下载 相关 举报
企业运维之数据库原理与实践.pdf_第1页
第1页 / 共159页
企业运维之数据库原理与实践.pdf_第2页
第2页 / 共159页
企业运维之数据库原理与实践.pdf_第3页
第3页 / 共159页
企业运维之数据库原理与实践.pdf_第4页
第4页 / 共159页
企业运维之数据库原理与实践.pdf_第5页
第5页 / 共159页
点击查看更多>>
资源描述

1、封面页(此页面将由下图全覆盖,此为编辑稿中的示意,将在终稿 PDF 版中做更新)目录 第一章 RDS 基础概念介绍.5 一、RDS 基础概念介绍.6 二、Q&A.22 第二章 AliSQL 和读写分离基本原理.24 一、AliSQL.25 二、读写分离.32 三、实例管理.37 四、Q&A.56 第三章 数据管理 DMS.57 一、企业级数据库管理痛点.58 二、数据管理 DMS 概述.59 三、DMS 解决方案.60 四、实验:如何快速连接云数据库 RDS MySQL.72 第四章 RDS 常见问题排除及 DAS 自动弹性伸缩.87 一、RDS 常见问题排除及 DAS 自动弹性伸缩.88 二

2、、实验:RDS MySQL 大促场景下的智能化弹性.111 三、Q&A.115 第五章 数据库 DAS 简介和备份上云方案.117 一、性能诊断与优化.118 二、数据上云.128 三、Q&A.141 第六章 云数据库备份与恢复.142 一、数据库备份恢复介绍.143 二、数据库备份恢复原理.145 三、云上备份恢复能力与场景.154 四、备份恢复实战.157 第一章RDS基础概念介绍分享人:张涛(敬茗)第一章 RDS 基础概念介绍 6 第一章 RDS 基础概念介绍 一、RDS 基础概念介绍 云数据库 RDS 是 Relation Database Service 的简称,它是关系型数据库,也

3、是 OLTP类的数据库,是基于阿里云飞天分布式操作系统与 SSD 盘高性能存储的数据库,支持 MySQL、PostgreSQL、SQLServer、MariaDB 引擎。其中 MySQL 与 PG 经过深度自研的内核,相比于开源有一些独有的功能,比如AliSQL上提供了sequence引擎,可以作为自增值的替代方案;又比如大表的异步删除,可以避免引起实例性能抖动或夯掉的风险。除了基础版本以外,RDS 均提供了双机热备、数据多副本冗余、自动备份、性能监控、异地容灾、备份与恢复、主备库故障切换等功能,保证了云数据库的安全性、稳定性、可靠性。相比于本地自建数据库,云上 RDS 数据库无需购买硬件、安

4、装软件,具备开箱即用、低运维的特点;也不必担心硬件规划的问题,能够根据资源需要随时动态调整资源规格。针对 MySQL、PostgreSQL、SQLServer、MariaDB 引擎,也都做到了透明兼容,可直接迁移使用。自动化运维方面,云 RDS 数据库提供了 API/SDK 功能,能够通过 API/SDK 完成自动化的管理与监控数据库的相关功能;能够通过 DAS 自动弹性伸缩来减少成本。另 第一章 RDS 基础概念介绍 7 外,也可以利用 DAS 的异常诊断,及时发现数据库运行过程中出现的异常,并可针对异常问题进行自动分析限流、自动添加索引、判断索引添加效果等。云 RDS 数据库是云上全托管数

5、据库,在容灾、备份、恢复、监控、迁移等方面提供了全套解决方案。容灾方面,购买 RDS 数据库时,可以选择多可用区部署的形态,可以提供机房级别的容灾能力。对于要求更高的场景,比如跨地域的容灾能力,可以基于 DTS 数据传输工具,搭建两个 RDS 实例之间的数据同步,提供跨地域的容灾能力。备份方面,除了 RDS 实例本身提供的自动备份功能外,也有 DBS 数据备份功能、跨地域备份功能,可以满足额外的备份需求。恢复方面,可以基于备份在控制台直接操作,恢复到某个备份集或某个时间点以应对恢复需求。监控方面,RDS 控制台提供了多个监控项目,比如性能监控指标,诸如 CPU、QPS等;也提供了日志监控能力,

6、比如错误日志、洞察日志,帮助审计数据库的运行情况。比如通过 SQL 洞察功能,可快速准确地掌握 SQL 在什么时间点开始执行、由哪个用户发起等信息。迁移方面,通过 DTS 数据传输工具,可以支持同构与异构数据库之间的迁移。在实际业务场景中,经常会遇到以 RDS MySQL 作为关系型数据库满足日常业务需求,通过 DTS 数据传输工具将数据同步到比如 ADB MySQL 或 Clickhouse 等 OLAP 类的分析型数据库做报表分析操作。又比如,可以用 DTS 订阅任务订阅 RDS MySQL、RDS PG 的日志,使客户端消费相关日志完成业务解耦的需求。云上 RDS 数据库能够让我们更加聚

7、焦于业务本身的开发,减少运维管理的麻烦。第一章 RDS 基础概念介绍 8 云 RDS 数据库包括 4 个系列,分别为基础版本、高可用版本、集群版本与三节点企业版本。每个版本支持的数据库引擎类型不同,适合的业务场景也不同,需要根据业务的特点合理选型。基础版支持 MySQL、PG、SQLServer 引擎,是单节点部署、计算与存储分离的架构,使用了 SSD 云盘存储,因此,在备份方面只支持快照备份。另外,它不支持只读节点,无法提供读写分离的功能。因其为单节点的部署架构,因此当节点遇到意外宕机、执行重启或变配、升级版本操作时,会出现较长时间的不可用。因此基础版本不适用于生产环境中,一般只适用于测试环

8、境。高可用版本支持 MySQL、PG、SQLServer、MariaDB 四种引擎,采用一主一备的高可用架构,支持高可用的容灾切换。当主实例不可访问时,可以快速切换到备实例上。另外 MySQL 与 PG 也支持只读实例,可以通过添加只读实例实现读写分离,分担主实例的读请求压力。集群版目前支持 MySQL,SQLServer 2 种引擎。MySQL 引擎采用一主一备或一主二备的高可用性部署,所有备节点可以提供读访问,但是目前集群版本不支持创建只读实例,所以最多可以提供 2 个只读节点提供访问。SQLServer 采用一主一备的高可用架构。备实例可以提供只读访问,也可以创建只读实例以实现读写分离的

9、功能。第一章 RDS 基础概念介绍 9 高可用版本与集群版本的区别仅在于支持的引擎不同和备节点是否可以提供读请求访问。三节点企业版只支持 MySQL 引擎,采用一主一备一日志的三节点架构部署。当主实例不可访问时,可快速切换到备实例上,实现快速恢复。需要注意,写入相关的操作时,必须保证至少两个节点同步到日志之后才可以完成事务的提交。因此业务保障上的要求为金融级别,目前三节点企业版即将下线,后续有集群版本替换相关安全保证。无论是哪种系列,数据库引擎部署在云平台上,都是对计算资源、存储资源、网络资源创建实例,做相应的资源划分隔离。根据业务量的访问不同,可以灵活地对计算资源做弹性升降配。存储上,只有本

10、地 SSD 盘才可以支持降低存储的操作,其他存储类型只支持升级存储容量,不支持降低。如果存储空间打满,也会导致实例被锁定,变为只读的状态。因此在业务上或实际生产中,需要注意配置存储的使用率告警,避免存储空间被打满。另外,云 RDS 数据库也可以支持不同的引擎之间小版本与大版本的升级,社区版本的 bug 修复或引入新特性后,会通过内核小版本或大版本的发布做迭代。如果小版本太旧,也会主动推送相关升级提示,避免实例稳定性受到影响。第一章 RDS 基础概念介绍 10 RDS 实例规格包括共享规格、通用规格、独享规格。共享型只支持 SQLServer 引擎。每个实例独享被分配到的内存与存储资源,与同一物

11、理机上的其他共享规格实例共享 CPU 资源,因此可能存在 CPU 竞争。这适用于对成本有要求但是对稳定性要求较低,需要 SQLServer 高可用保障业务可用性的场景。通用型支持四种引擎,分为本地盘与云盘。本地盘存在 CPU 的竞争关系,云盘实例存储资源不和 CPU 及内存绑定,可以灵活选配。云盘是 On-ECS 的形态,而 ECS 本身需要开销一部分内存。在今年 6 月份之前,实例的内存使用率上没有刨除系统本身开销的内存,因此会让客户误以为内存使用率没有达到百分之百却出现 OOM 的情况。对此,我们已经对 RDS MySQL,RDS PostgreSQL 内存在监控上做了修正。通用型存在资源

12、的复用,因此也会存在争抢。如果对业务稳定性要求高,则不建议采用共享型与通用型的实例。独享型也支持四种引擎,完全独享 CPU 与内存,不会造成资源竞争。独享型适用于对性能稳定性要较求较高的场景。每一种架构对于不同版本均提供了多种规格。云盘的实例除了 IOPS 能力,还有 IO 带宽的限制。IO 带宽又与存储空间大小相关,比如会按照存储的大小计算 IO 带宽的大小。IOPS 打满或 IO 打满都会导致实例出现IO 方面的瓶颈。IOPS 方面,可以通过 IOPS 使用率进行观察。而针对 IO 带宽打满目前在前端还未有相关的监控能力,如有需要可提交工单咨询确认。第一章 RDS 基础概念介绍 11 网络

13、方面分为经典网络与专有网络。经典网络采用三层隔离,共用的基础网络上不同用户之间的网络相通。RDS 实例只能依靠白名单与账号密码做安全防护,安全性较低。因此,我们推荐最好使用 VPC专有网络,目前 VPC 专有网络也不再支持从专有网络切换到经典网络,如果大家还有经典网络的 RDS 实例,建议大家可以考虑升级到专有网络。VPC 网络也就是虚拟专业网络,采用两层隔离。相对于经典网络,具有更高的安全性与灵活性。不同的 VPC 之间为相对隔离的环境,可以根据不同的业务类型,按产品划分到不同的 VPC 网络以保证网络的安全性。在 RDS 网络拓扑上,当一台 ECS 部署了程序发起连接时,首先会通过 DNS

14、 解析 RDS的域名,域名会解析到 RDS 前端的 SLB 上,再由 SLB 转发给后端的 RDS 主实例。如果 RDS 实例开通了读写分离功能,则会存在代理,SLB 会先转发给代理,再由代理转发给后端的 RDS 主库或从库,实现读写分离的架功能。购买多可用区实例时需要注意,ECS、SLB 与 RDS 主库可能会跨地域,比如 ECS 在可用区 y,SLB 与 RDS 主库在可用区 x,属于跨机房。该种情况下,由于物理距离的增加,会导致网络延迟增加,3ms 以内的延迟为正常范围,对网络延迟特别敏感的业务需要考虑这种跨可用区带来的影响。第一章 RDS 基础概念介绍 12 程序访问时需要使用域名地址

15、,不建议使用域名解析生成的 VIP 进行访问。比如实例变配可能会导致底层的 VIP 发生变化,如果依然使用域名访问,可能会出现访问连接不到的情况,因此在生产上建议使用域名访问,而且需要保证应用上具有自动重连的机制,比如 RDS 主库与从库发生了 HA 切换,此时 SLB 会将重新解析的请求转发给之前的从库,之前的连接会断开。如果 ECS 上部署的程序无法自动重连,会导致业务影响时长被拉长。另外,尽量不要对域名做本地解析,底层 VIP 变化之后此时访问就会出现问题。云 RDS 数据库存储经历了从本地 SSD 盘到 SSD 云盘到 ESSD 云盘的发展历程。ESSD 云盘又经历了 PL1、PL2、

16、PL3 的迭代,性能越来越好。未来,我们也在计划实现 PL-X 系列,能够做到与本地盘的 IO 延迟基本持平。今年下半年,我们已经在推动 SSD 云盘下线,建议用户将 SSD 云盘的实例主动升级到 ESC 云盘,因为 SSD 云盘不支持在线扩容。本地 SSD 盘的磁盘与数据库引擎部署在同一节点的同一台主机上。在所有存储类型中,其 IO 延迟最低,性能最好。做变配存储资源不足时,需要进行跨机迁移,迁移时间与存储大小相关。存储使用量越大,跨机迁移时间越长。而如果本地有资源,第一章 RDS 基础概念介绍 13 则变配耗时相对较短。如果不知道此次变配是本机变配还是跨机变配,可以提供工单咨询确认。SSD

17、 云盘和 ESSD 云盘均采用分布式存储架构的弹性块存储设备,实现了计算节点与存储分离的架构,但会导致 IO 延迟增加。而 ESSD 云盘 PL-X 能够支持 RDS、MySQL、PG 与 MariaDB 在线升级、秒级扩容,SQL Server 可低至分钟级,对业务无感。本地盘增加只读实例时,需要拷贝全量数据,再追加增量的 Binlog,所需时间较久。而在 ESSD 云盘上,增加一个只读节点仅需半个小时以内,相对于本地盘的时间大幅节省。备份方面,云盘只能做快照备份,无法下载快照备份文件,但可以下载物理备份文件用于本地恢复。数据库存储着一个公司的核心数据,因此数据库安全至关重要。维护数据库安全

18、可以分为事前防御与事后审计。事前防御方面,首先,我们提供了数据库账号密码的防护。RDS 数据库上的账号分为高权账号与普通账号。高权账号只能通过控制台或 API 的方式创建,它并不是普通数据库上的最高权限账号,比如,它并不等同于 MySQL 上的 rootlocalhost。第一章 RDS 基础概念介绍 14 云上数据库的高权账号可以断开其他任意非内置账号的数据库连接或可以创建其他普通账号并对其授权。但是在业务管控上建议仅将高权账号授予某一个人或某一个组管理,不应让过多人使用高权账号。比如实际业务上不建议使用高权账号,而是应创建普通账号,合理授权,按照最小化授权的方式使用。白名单安全组定义了哪些

19、 IP 或安全组内的 ECS 可以访问 RDS,即定义了访问源。注意,需要避免白名单与安全组开放过大,导致变相地将 RDS 暴露在过多的客户端面前,造成安全隐患。比如在生产上,不建议将白名单设置为 0.0.0.0/0,会造成访问没有限制。在一些场景中比如 ECS 被黑,可能通过抓包分析程序所用的连接数据库的账号,分析数据库相关的 SQL,通过这些特征提取导致数据库账号被暴力破解,或通过 SQL注入的方式危害数据库的安全。通过 SSL 加密连接,可以保证程序到 RDS 之间的链路安全。但是需要注意开通 SSL 加密会造成 RDS CPU 资源开销的增加,而且需要定期更新证书。在存储加密上,对云盘

20、的实例可以使用 SSD 云盘存储加密,本地盘的实例可以开启TDE 实现表级别的加密。存储加密可以保证即使数据备份泄露,他人也无法解密,保护了数据安全。阿里云账号分为主账号与子账号,在管理云上数据库资源或其他资源时,主账号拥有全部账号的权限。保护好主账号后,可以在子账号上利用 RAM 授权,使特定的人管理特定的资源。比如 DBA 团队可以创建子账号,授予其管理 RDS 的权限等。事后审计方面,云 RDS 数据库提供了 SQL 洞察日志的审计、云监控告警、控制台操作审计与日志管理的功能。SQL 洞察可以审计所有 SQL 操作记录,适用于需要追溯SQL 执行情况的场景,执行成功和失败的 SQL 都会

21、被记录。但是需要注意当 RDS 实例本身出现了 OOM 或踩到 bug 发生 crash,导致 MySQL 进程或 PG 进程异常退出,此时 SQL 还未来得及写入审计日志,因此该类 SQL 很可能不会被记录。第一章 RDS 基础概念介绍 15 通过云监控告警,可以在 CPU 打满或发生 HA 时收到相关告警信息,及时介入。控制台操作审计主要审计控制台上的操作记录,针对主账号和子账号在控制台的操作信息。开通子账号时,如果为其分配了 AK,则需要合理管控子账号。有些客户可能会将 AK 用于自动化的管理工作,将相关的代码上传到比如 Git hub 上,可能会被别有用心的人扫描到代码里使用的 AK,

22、导致 AK 泄露之后出现比如实例被删的情况。在日志管理方面,云 RDS 数据库提供了比如错误日志、慢日志、SQL 洞察日志、主备切换日志等能够了解实例运行情况的日志,帮助管理数据库。云 RDS 数据库整体架构主要分为两条线。其一,应用程序通过域名进行访问。其二,通过 WEB 控制台或 API 接口发送指令给 RDS 完成相关操作。请求发送给后端消息中心,再发送给对应模块,对应模块获取到相关信息之后返回给客户端调用方。比如要通过控制台或 API 查看慢日志,将 API 请求发送给消息中心之后,消息中心会从日志系统里捞取相关时间段的日志信息,返回给客户端。HA 探测系统会定期探测后端部署在节点上实

23、例的可用性。发现不可用或网络不可达且连续多次探测均如此时,就会下发相应的任务完成 HA 切换。在 MySQL 库下面 第一章 RDS 基础概念介绍 16 的 HA HealthCheck 表会定期(一般为 15s)往表里写入一条数据,探测数据库是否可写,如果不可写,则进行切换。如果个某节点的物理主机宕机或提交了大事务导致 HA 探测的语句无法完成 binlog 落盘,也会导致 HA 切换。因此,一般在生产业务中要避免大事务的操作。在线迁移系统会定期检测,比如有一主一备两个实例,当备节点不可用时,会发起在线迁移,始终保证系统有一主一备两个实例能够提供高可用的能力。变配也是通过在线迁移系统完成。备

24、份系统会按照每个实例设置的备份频率,定期备份实例的数据。无论是快照备份还是物理备份,一般首先会选择备节点做备份。如果备节点主从延迟很大,则会选择主节点完成备份。进行 RDS MySQL 备份往往在业务低峰期,而此时可能会同时进行运维操作,例如执行 DDL 变更操作可能会导致备份失败。因此,如果发现备份失败,可以主动尝试发起临时备份任务,以保证当天的备份成功。后续如果需要做快速恢复时,可以寻找最近时间点的备份文件。通过以上一整套系统,可以保证 RDS 数据库的稳定性与安全性。第一章 RDS 基础概念介绍 17 云数据库 RDS 的概览页面如上图所示,包含了该账号下 RDS 实例个数、即将过期个数

25、以及已过期个数、每个地域上有哪些实例。页面上方为消息通知,右侧展示了繁忙实例、空闲实例以及近期重大功能发布。上图为实例列表页面。如果遇到问题,可以将实例 ID 复制粘贴,提交相关工单反馈进行问题排查。点击实例名称可进入实例详情页面。上图为实例详情页面。第一章 RDS 基础概念介绍 18 备份管理可以将本地的备份文件通过导入备份的方式实现上云。跨地域备份可以将相应 A 地域的 RDS 实例备份到 B 地域,实现跨地域的备份能力。已删除实例备份可提供备份恢复的能力。云数据库 RDS 提供了丰富的参数模板,后续也将对参数模板做优化,增加更多参数,让客户更方便地制定相关的参数能力。我们会为每个参数定义

26、一个建议的使用阈值,大家需要注意参数设置不合理可能会引发一些问题。内置参数模板的详情可在官方文档进行查看。第一章 RDS 基础概念介绍 19 数据安全中心主要负责对实例做安全方面的评估。性能中心会定期对实例如做巡检评分,包括 CPU、IOPS 等能力项,可以从巡检评分里重点关注评分低的能力项。第一章 RDS 基础概念介绍 20 事件中心是需要重点关注的模块。比如节点所在主机过保后,需要将实例从 a 主机切换到 b 主机,系统会下发主动运维事件,通过事件中心告知用户系统准在在哪个时间点进行切换。切换可能会断开之前 a 节点上的所有连接,会对业务产生影响。而用户可以自定义切换时间或取消此次运维,减

27、少或避免对业务的影响。如果错过了取消的时间范围,则只能提交相应的工单反馈,由我们进行取消。第一章 RDS 基础概念介绍 21 实例过期之后,会将实例锁定在回收站。如果在 7 天内续费则会自动解锁,恢复正常使用。7 天以后,会将实例删除,对应的备份文件继续保留 7 天,以用于恢复。总计超过 16 天后,回收站里的备份也会被清理,无法再实现恢复数据的请求。全球多活数据库集群是 RDS 通过 DTS 的方式构建双向同步的架构,实现全球就近访问的架构。控制台出现问题时,会有相应的 request ID,提示请求的是哪个接口、哪个实例不成功。如果要排查确认问题,可以复制 request ID 找售后人员

28、进行查询。第一章 RDS 基础概念介绍 22 二、Q&A Q:TDE 是表级别加密吗?A:开启 TDE 加密可以细化到表级别,但过程不可逆,开启后无法关闭。另外,TDE加密仅支持本地 SSD 盘。Q:大事务导致 HA 探测无法落盘会有什么影响?A:Binlog 无法落盘会导致认为实例此时无法响应 HA 的探测请求。如果连续多次探测都无法写入,则会主动发起一次 HA 切换,业务会出现连接闪断。如果业务上没有自动重连机制,会导致出现较长时间的不可用。因此,在生产上一定要保证业务具有自动重连机制。Q:备份失败会有通知吗?A:目前没有通知机制,后续将逐步完善。Q:内核版本升级会停止服务吗?A:高可用版

29、本的实例,内核小版本是滚动升级,会先升级备实例,再做 HA 切换,影响时长约为 30 秒内,切换完之后再对新的备节点做升级。仅在 HA 切换步骤会对业务产生影响。Q:HA 时会主动向客户端发送 TCP 报文吗?A:HA 动作本身并不会给客户端发送消息。HA 的过程首先要保证主备没有延迟。备节点出现延迟时,即使主节点不可用,如果探测到主备有延迟,也不会做 HA。而HA 也只是将 a 节点切换到 b 节点,断开 a 节点的连接,并不会主动给客户端发送请求。客户端的感知通常需要通过连接异常之后的重试机制来实现。Q:节点故障迁移是无感的吗?A:目前为有感。节点夯掉后,可能会进行 HA 探测,如果无法响

30、应请求,则会进行节点切换,会断开已有连接,导致业务报错。第一章 RDS 基础概念介绍 23 Q:主节点挂掉,备节点是否会被 HA 选为主节点?A:如果做了大事务导致备库延迟,则无法进行 HA,只能将主节点进行修复、启动。Q:RDS 有 CDC 功能吗?A:SQLServer 的某些版本有 CDC 功能,可以查看相关文档获知。也有客户使用 DTS数据订阅的功能进行日志消费。Q:什么时候会进行可用区迁移?A:变配时,如果当前实例所在的物理主机或可用区上已经没有足够的资源,一般会先提交工单,由资源同学进行评估是否有扩展资源的能力。如果不可行,则会发起可用区迁移。部分版本的 RDS 实例本身的规格类型

31、支持直接在控制台上进行可用区迁移;而对于不支持可用区迁移的版本,可以通过在需要的可用区下购买新的实例,用 DTS 工具将数据迁移到新实例上。该方案较为复杂,涉及到配置 DTS 任务,可能需要手动创建账号,因为目前 DTS 不迁移账号信息。第二章AliSQL和读写分离基本原理分享人:晋毓泽(魁星)第二章 AliSQL 和读写分离基本原理 25 第二章 AliSQL 和读写分离基本原理 一、AliSQL AliSQL是阿里云深度定制的MYSQL独立分支,在社区版功能上又额外提供了MySQL企业版的功能,提供了更加强大的性能,比如备份恢复、线程池、并行查询等,且能够兼容 Oracle。AliSQL

32、基于 X-Engine 存储架构引擎。X-Engine 是阿里云数据库产品事业部研发联机事务处理数据库引擎,目前已经应用到阿里集团诸多业务系统中,大幅缩减了业务成本。全新的 X-Engine 存储引擎不仅能够无缝对接 MySQL,同时它使用了分层存储架构的思想,面向大规模海量数据存储提供了高并发的事务处理能力,降低了存储成本。在大部分大数据场景下,数据被访问的机会是不均等的,访问频繁的热数据占比很少。X-Engine 能够根据数据的访问频度不同,将数据划分为多个层次。第二章 AliSQL 和读写分离基本原理 26 AliSQL 的常用功能如下:1)Native Flashback 在数据库运维

33、过程中可能会出现误操作,比如误删了某些表或表中数据。常见恢复手段是通过 Binlog 恢复。但 Binlog 操作比较复杂,容易出错且耗时较长。而通过备份集恢复则需要额外系统资源,因此在数据量较大时,恢复时间不可控。针对以上痛点,AliSQL 提供了 Native Flashback 能力。无需在客户侧进行复杂的恢复操作,经过简单的 SQL 语句,即可查询与恢复误操作前的历史数据,节省了大量时间,保证了业务平稳运行。2)Thread Pool 数据库团队为了发挥 RDS 的最佳性能,提供了 Thread Pool 功能,将线程与会话分离。在拥有大量会话的同时,只需少量线程即可完成会话任务。My

34、SQL 默认线程使用会话独占模式,因此每个会话都会创建独立线程。大量会话存在会导致大量资源争抢,导致大量系统线程调度与缓存失效,进而导致数据库性能急剧下降。第二章 AliSQL 和读写分离基本原理 27 阿里云 RDS 线程池实现了不同 SQL 的操作优先级与并发控制机制,将连接池始终控制在最佳连接数附近,保持在高性能状态。线程池具有几个优势:在大量线程并发工作时,线程池会自动调节线程数量在合理范围之内,不会过高。大量事务并发执行时,线程池会将语句与事务分为不同优先级。线程池可以给予管理类 SQL 更高优先级,保证此类语句优先执行。3)Statement Outline 在生产环境中,SQL语

35、句执行计划可能经常发生改变,而利用optimizer hint与index hint 可以使 MySQL 稳定执行,计划保持不变,以最优方法持续执行。4)Sequence Engine 在 RDS 数据库系统中,不论是单节点业务组件还是分布式系统的全局唯一值,或更多系统的幂等控制,单调递增唯一值是用户的常见需求。不同数据库系统有不同的实现方法,MySQL 中提供了 AUTO_INCREMENT。在 MySQL 数据库中,如果业务希望封装唯一值,使用 AUTO_INCREMENT 方法会有很多不便。在实际应用中也存在不同的折中方法,比如序列值由应用端或 proxy 生成,弊端在于会将状态带到应用

36、端,增加扩容与缩容复杂度。因此 AliSQL 提供了sequence engine 功能,实现了 MySQL 存储引擎的设计接口,但底层数据仍然使用现在的存储引擎,以达到效果。5)Returning MySQL 语句执行结果的报文通常分为三类,分别为 Resultset、OK 和 ERR。针对 DML语句,返回 OK 或 ERR 报文会影响记录或扫描记录等属性。因此,在很多业务场景下,执行 insert、update、delete 等 DML 语句,都会跟随 select 查询当前内容,以方便后续的业务处理,减少客户端与服务器的交互。第二章 AliSQL 和读写分离基本原理 28 6)Liza

37、rd 事务系统 Lizard 事务系统能够更好地提升 MySQL 数据库的吞吐能力,支持分布式事务与全局一致性。使用 Native Flashback 功能时,可以通过 select.from as of timestamp。具体示例如上图,第一个示例表示将数据恢复到 2020-11-11 0 点,也支持表达式的方式。第二章 AliSQL 和读写分离基本原理 29 AliSQL 在性能方面提供了四大能力:1)Fast Query Cache 该能力主要针对原生 MySQL Query Cache 的不足进行了重新设计与全新实现,解决了原生 MySQL query 存在的的问题:并发控制方面进行

38、了优化,取消了全局锁的同步机制,采用无锁机制,重新设计了并发场景下的同步问题,能够充分利用多核处理能力,保证高并发下的数据库性能。优化了内存管理,取消了内存预分配机制,采用了更加灵活的动态内存分配机制。优化了缓存机制,动态检测缓存利用率,实时调整缓存策略,解决命中率偏低或读写混合场景下性能下降问题。因此,Fast Query Cache 是对原生 MySQL Query Cache 的极大提升。2)Binlog in Redo 事务提交时,Binlog 内容同步写到 Redolog 里,减少了对数据库磁盘的操作,提高了数据库性能。3)Statement Queue 针对排队机制将语句进行分桶排

39、队,尽量将相同冲突的语句放到一个桶内。MySQL服务层与引擎层在语句并发执行过程中有很多串行点容易导致冲突,系统吞吐量会随着客户业务端的并发增加而递减。因此 AliSQL 提供了 Statement Queue 机制,通过分桶排队方法,减少了冲突开销,提高了实例性能。4)Inventory Hint 该功能主要用于帮助快速提交与回滚事务,能够有效提高业务吞吐能力。第二章 AliSQL 和读写分离基本原理 30 Inventory Hint 使用示例如上图所示。AliSQL 在稳定方面提供了以下 5 种能力:1)Faster DDL 该功能能够优化 DDL 操作过程中的 Buffer Pool

40、管理机制,降低 DDL 操作带来的性能影响,提升在线 DDL 操作的并发数。使得客户实例在平常的业务压力下安心执行DDL,不会发生问题。第二章 AliSQL 和读写分离基本原理 31 2)Statement Concurrency Control 该能力主要为应对数据库请求流量资源消耗过高的语句与 SQL 访问模型的变化,保证 MySQL 实例持续稳定运行。3)Performance Agent AliSQL 提供了更加便捷的性能数据统计方案,通过 MySQL 插件的方式实现 MySQL内部各种性能数据的采集与统计。将最近一段时间的性能数据汇总入一张内存表,客户可以直接查询该表获取最近一段时间

41、的性能统计数据。4)Purge Large File Asynchronously 可以用异步的方式删除大文件。在原生 MySQL InnoDB 下,直接删除大文件可能会导致严重的稳定性问题。而 AliSQL 下,会启动后台线程异步清理数据文件。删除单个表空间时,会将对应数据文件先命名为临时文件,用于异步线程删除,保证系统的稳定性。5)Performance Insight 该能力主要专注于实例负载监控、关联分析以及性能调优。第二章 AliSQL 和读写分离基本原理 32 异步删除大文件时,需要先设置参数,比如 InnoDB、data 等,删除时通过查询系统表查看整体进度。二、读写分离 如果数

42、据库没有设置读写分离,在少写多读的应用场景下,大量读操作会对主实例造成巨大的读取压力,进而影响业务。因此,启用读写分离功能,可以使查询请求自动转发到只读实例上,写请求转发到主实例上,各司其职,实现了读写分离、自动分流,减轻主实例的压力,能够为数据库带来非常大的优势。读写分离提供了统一的读写分离地址,便于维护。如果不开通读写分离,配置读与写操作时需要在应用程序里分别配置主实例与每个只读实例的连接地址,维护地址的工作非常繁杂,容易出错。RDS 读写分离功能能够提供代理地址,连接代理地址以后,可对主实例与只读实例进行读写操作。请求自动转发,写请求转发到主实例,读请求转发到只读实例,降低了维护成本。原

43、生链路支持可以提高数据库性能,减少维护成本。可以设置只读实例的权重与阈值,可在多场景下使用。可以进行实例健康检查,提升数据库性能的可用性。在设置读写分离为主实例创建只读实例时,建议客户至少创建两个只读实例,可以避免只读实例单点故障。第二章 AliSQL 和读写分离基本原理 33 高可用实例有主实例与备实例,在同一可用区、同一 region 下。当主实例意外宕机或卡住时会进行 HA 切换,备实例会立即切换为主实例继续为客户提供业务。只读实例可以与主实例在同一地域,可以在不同可用区。只读实例主要承担只读请求,只读实例也有高可用架构,也可以有只读实例的备实例。灾备实例一般用于要求高可靠或高可用性的客

44、户场景。比如客户希望在极端情况下,主 region 所有数据库都无法提供服务时,备 region 可以继续提供服务,灾备实例往往建在备 region。第二章 AliSQL 和读写分离基本原理 34 RDS 里的数据库代理分为独享代理与共享代理,它是位于数据库服务端与应用服务端之间的网络代理服务,用于代理应用服务端访问数据时的所有请求,具有高可用、高性能、可运维、简单易用等特点。独享代理还提供了自动读写分离、事务拆分、连接池等高级功能。数据库代理适用于以下几类场景:事务内有大量请求导致主实例负载过高。此时可能需要将只读请求进行拆分。接数过多导致主实例负载过高。短连接为主的业务。纯只读或有隔离需求

45、的业务。数据库代理支持事务拆分,默认情况下,RDS 数据库独享代理会将事务内所有请求发送到主实例,保证事务的正确性,但是某些框架会导致主实例负载过大。此时可以使用事务拆分功能,将事务里的只读请求发送到只读实例上,提升性能。需要注意,显示事务当前不支持拆分,对于全局一致性有要求的事务也不支持拆分。第二章 AliSQL 和读写分离基本原理 35 客户在业务端可以通过设置连接池进行读写分离。当前 RDS 支持事务级连接池(默认)和会话级连接池。事务级连接池主要用于减少直接连接到数据库业务的连接,减少短连接的频繁建立连接带来的负担。开启事务级连接池以后,客户端与独享代理之间可能会存在上千个连接,但是代

46、理与数据库后端可能仅存在几十、几百个连接。独享代理本身并没有最大连接数的限制,主要由后端数据库节点的规格决定。没有开启事务级连接池时,每条由客户端发起的连接都会在后端主节点与所有只读节点创建对应连接。开启了事务级连接后,客户端发送请求时,会先与独享代理建立连接判断是否存在可用连接,如果不存在,代理会与数据库创建新连接;如果存在,则直接从连接池里取出并使用,能够减少频繁建立连接的过程。第二章 AliSQL 和读写分离基本原理 36 会话级接池主要用于减少短连接业务频繁建立新连接带来的实例负载。某个客户端断开时,系统会判断当前连接是否为闲置连接。如果是,系统会将其保留一段时间。重新建立连接时,如果

47、连接池中有可用连接,则直接使用;如果没有,则通过正常流程再次建立连接。会话级连接池并没有减少数据库的并发连接数,而是通过降低应用与数据库建立连接的速率来减少 MySQL 开销,从而更好地处理业务请求。但是闲置连接会短暂地占用客户端连接数,而且会话级连接池无法解决由于大量慢 SQL 导致的堆积问题。如何选择事务级连接池与会话级连接池?如果业务连接数较多(比如有上万)或使用 Serverless 服务导致连接数随着业务端服务器的扩容而线性增加,则建议使用事务级连接池。如果短连接占比较大,则建议使用会话级连接池。如果业务使用多维长连接且连接数比较少,或业务本身已经具备较好的连接池,则不建议再使用 R

48、DS 连接池。第二章 AliSQL 和读写分离基本原理 37 阿里云 RDS 支持使用 SQL hint 语法,执行 SQL 时可以在前面加上 hint 操作,将SQL 语句发往不同的数据库节点。具体例子如上图。三、实例管理 实例管理分为创建实例、变更配置、升级大小版本、迁移可用区、备份恢复、调整参数、主备切换与监控告警。1.创建实例 登录阿里云控制台,搜索 RDS 进入云数据库控制台。第二章 AliSQL 和读写分离基本原理 38 上图为实例列表页面。点击左上角“创建实例”按钮,可跳转到创建实例页面。如上图所示,创建实例时,需要选择计费方式、地域、类型、系列、存储类型、主节点可用区(每个 r

49、egion 有不同的可用区)等。其中,系列分为基础版、高可用版、三节点企业版。基础版只有主节点对外提供服务,不保证高可用,存在单点故障的风险。若主实例因为某种意外原因无法对外提供服务,业务也将停止。因此,基础版主要针对测试或个人学习以及一些简单的业务场景,商用或业务有高可用需求的场景不建议选择基础版。高可用版具有最高 4 个 9 的可用性,对外提供主节点和备节点,平时备节点不对外提供服务,只有主节点出现意外情况时才会进行主备切换,备节点上升为主节点对外提供服务,保证业务连贯性。三节点企业版除了主节点与备节点,还提供日志节点进行高可用保障。第二章 AliSQL 和读写分离基本原理 39 实例规格

50、有不同的规格码,代表了不同 CPU、内存、最大连接数、最大 IOPS 等资源,价格也有所不同。选择存储空间时,需要对初期业务数据量进行必要评估,选择不同的存储空间作为基础存储。如果后续数据量不断增大,也可以进行扩容。完成后,点击下一步。网络类型支持经典网络与专有网络,主流选择多为专有网络。默认存储引擎上,MySQL 8.0 版本可以选择 X-Engine,8.0 以下版本需要先进行大版本升级。完成上图所有选项配置后点击下一步。第二章 AliSQL 和读写分离基本原理 40 在上述页面确认信息,选择购买量、购买时长以及是否自动续费,完成支付即可完成实例创建。2.变更配置 原先创建的实例无法满足性

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 研究报告 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服