RDS (Relational Database Service) 介绍
RDS (Relational Database Service) 总结
I. 什么是 RDS?
定义: AWS RDS 是一种托管式关系型数据库服务,它让用户可以更轻松地在云中设置、操作和扩展关系型数据库。
核心优势:
管理型服务: AWS 负责数据库管理(如补丁、备份、故障检测、恢复、硬件配置、OS 安装)。用户无需管理底层服务器。
易于部署和扩展: 几分钟内即可启动,并可按需进行计算和存储的伸缩。
高可用性与持久性: 内置了多种机制确保数据的高可用性和持久性。
安全性: 提供多层安全控制。
成本效益: 按需付费,避免前期投资。
II. RDS 支持的数据库引擎
RDS 支持多种主流关系型数据库引擎,SAA 考试中需要了解其主要特点:
Amazon Aurora:
AWS 专为云设计的关系型数据库,与 MySQL 和 PostgreSQL 兼容。
性能远超传统数据库(MySQL 5 倍,PostgreSQL 3 倍)。
高可用、高持久性、自我修复、自动伸缩。
后面会详细讲解其独特架构。
PostgreSQL
MySQL
MariaDB
Oracle
Microsoft SQL Server
III. RDS 核心特性与概念 (SAA 重点)
1. 高可用性 (High Availability) - Multi-AZ (多可用区)
目的: 提供数据库的高可用性和灾难恢复能力。
工作原理:
在主数据库实例发生故障时,自动将数据库切换到不同可用区 (AZ) 中的同步备用副本 (Synchronous Standby Replica)。
数据通过同步复制 (Synchronous Replication) 方式从主实例写入备用实例。这意味着在主实例上的任何事务完成前,必须在备用实例上也完成,以确保数据一致性。
自动故障转移 (Automatic Failover): 当主实例出现故障(如硬件故障、网络中断、AZ 故障)时,RDS 会自动将 CName 记录指向备用实例,故障转移时间通常在 1-2 分钟。
特点:
不用于读扩展: Multi-AZ 副本不是为了分担读负载,因为它是一个同步的、不可访问的备用实例。
增加写入延迟: 由于同步复制,写入操作需要等待备用实例的确认,可能会略微增加写入延迟。
单 Endpoint: 应用程序通过一个单一的数据库端点连接,故障转移时端点不变。
2. 读副本 (Read Replicas)
目的: 提供数据库的读伸缩能力 (Read Scaling),分担主数据库的读负载。
工作原理:
通过异步复制 (Asynchronous Replication) 方式从主实例同步数据到读副本。这意味着读副本可能会有轻微的滞后。
独立端点: 每个读副本都有自己的独立端点,应用程序可以将读请求发送到这些副本。
特点:
用于读扩展: 最多可创建 15 个读副本(Aurora 更多)。
跨区域: 读副本可以部署在同一区域的不同可用区,也可以部署在不同区域,以提高全球应用的性能。
可提升: 读副本可以被提升为独立数据库实例(提升后将不再与原主实例同步)。
不提供自动故障转移: 如果主实例故障,读副本不会自动升级为主实例。你需要手动将其提升。
可同时是 Multi-AZ: 一个读副本本身也可以配置为 Multi-AZ,以提高其自身的可用性。
【SAA 重点区分】:Multi-AZ vs. Read Replicas
3. 备份与恢复 (Backup & Recovery)
自动化备份 (Automated Backups):
点对点恢复 (Point-in-Time Recovery): RDS 会定期拍摄完整的存储卷快照,并保留事务日志(WAL)。这允许你将数据库恢复到指定的时间点(过去指定天数内的任意 5 分钟粒度时间点)。
备份窗口: 在配置的备份窗口内进行。
保留期: 默认 7 天,最长可配置 35 天。
恢复: 恢复操作会创建一个全新的 RDS 实例。
数据库快照 (DB Snapshots):
手动备份: 用户手动触发创建的完整存储卷快照。
保留: 快照会一直保留,直到你手动删除它。
用途: 长期归档、创建新的开发/测试环境、在进行重大更改前做备份。
恢复: 同样会创建一个全新的 RDS 实例。
4. 安全性 (Security)
网络隔离:
VPC (Virtual Private Cloud): RDS 实例通常部署在私有子网中,不直接暴露在互联网上。
安全组 (Security Groups): 充当数据库的防火墙,控制哪些 IP 地址/安全组可以访问数据库的指定端口。这是控制网络访问的最重要手段。
IAM (Identity and Access Management):
对 RDS 服务本身的访问: 谁可以创建、修改、删除 RDS 实例。
数据库认证: 部分引擎支持 IAM 数据库认证(例如 Aurora、MySQL、PostgreSQL),通过 IAM 凭证而不是传统密码进行连接。
数据加密:
静止数据加密 (Encryption at Rest):
使用 AWS KMS (Key Management Service) 管理的加密密钥。
注意: 只能在创建实例时启用加密。对于未加密的实例,你需要创建一个加密的快照,然后从该加密快照恢复一个新的加密实例。
所有与该实例关联的备份、快照、读副本都将自动被加密。
传输中数据加密 (Encryption in Transit):
使用 SSL/TLS 连接加密客户端和 RDS 实例之间的数据。
5. 可伸缩性 (Scalability)
计算伸缩 (Compute Scaling):
通过修改 DB 实例类(DB Instance Class)来进行垂直伸缩 (Vertical Scaling)。
影响: 导致短暂的停机时间。
存储伸缩 (Storage Scaling):
对于大多数引擎,存储可以动态扩展,无需停机。
你可以设置存储的自动扩展阈值和最大值。
读伸缩 (Read Scaling):
通过创建读副本 (Read Replicas) 实现水平伸缩 (Horizontal Scaling)。
6. 维护 (Maintenance)
维护窗口: RDS 会为每个实例定义一个每周的维护窗口,用于执行必要的系统维护(如打补丁、小版本升级)。
用户可以自定义这个窗口,以最小化对业务的影响。
主要版本升级需要手动触发,且通常会导致更长的停机。
7. 监控 (Monitoring)
Amazon CloudWatch: 默认集成,提供 CPU 利用率、IOPS、网络吞吐量、空闲存储空间等关键指标。
Enhanced Monitoring (增强监控): 提供更细粒度的 OS 级别指标(例如 CPU 负载、内存使用率、进程列表),每 1-60 秒收集一次。
Performance Insights (性能详情): 提供 SQL 级别的性能监控,帮助你找出数据库瓶颈的根源(例如,哪些 SQL 语句占用 CPU 最多)。
IV. AWS Aurora - RDS 的旗舰产品 (SAA 难点与重点)
Aurora 是 RDS 家族中的明星产品,其架构和特性与传统 RDS 引擎有显著不同。
云原生架构: 为云而生,存储和计算分离。
存储层 (Aurora Storage):
分布式、共享存储卷: 所有 Aurora 实例(主实例和读副本)共享一个逻辑上单一的、自动伸缩的存储卷,最大可达 128TB。
高持久性与高可用性: 数据被复制到 6 个副本,分布在 3 个可用区中。即使丢失 2 个数据副本,或者一个可用区完全故障,数据仍然可用。
自我修复: 存储层能自动检测和修复磁盘故障。
无需预留 IOPS: 存储 IOPS 按需付费。
计算层 (Aurora Instances):
Primary Instance (主实例): 负责读写操作。
Aurora Replicas (读副本):
可多达 15 个,通常滞后时间小于 20 毫秒。
与主实例共享底层存储。
特别之处: Aurora Replicas 不仅用于读扩展,它们也可以作为高可用性目标。当主实例故障时,其中一个 Aurora Replica 可以被提升为新的主实例,通常在 30 秒内完成故障转移(比 Multi-AZ 更快的恢复时间)。
Serverless Aurora (无服务器 Aurora):
按需启动、停止和扩展数据库。
根据工作负载自动调整计算容量。
Aurora Serverless v1: 适用于不可预测、间歇性工作负载。
Aurora Serverless v2: 旨在支持更广泛的工作负载,包括生产工作负载,支持亚秒级扩展,更细粒度的容量单位。这是当前更推荐使用的版本。
Aurora Global Database (全球数据库):
允许一个 Aurora 数据库跨多个 AWS 区域部署。
实现灾难恢复(跨区域的 RPO/RTO 通常在几秒/分钟级别)和低延迟的全球读访问。
一个主区域和最多 5 个辅助区域,每个辅助区域可以有自己的读副本。
V. 重点、难点与易错点
Multi-AZ vs. Read Replicas (最常考,最易混淆):
易错: 认为 Multi-AZ 用于读扩展,或读副本提供自动故障转移。
正确: Multi-AZ 是 HA/DR,读副本是读扩展。牢记其复制方式(同步 vs. 异步)和用途。
RDS 的加密:
易错: 认为可以在创建后对未加密的 RDS 实例启用静止数据加密。
正确: 只能在创建时启用加密。 后期需通过“快照-加密快照-恢复新实例”的流程。加密的快照和读副本会自动保持加密。
RDS 是托管服务,没有 SSH 访问权限:
易错: 尝试通过 SSH 连接到 RDS 实例的底层 OS。
正确: AWS 管理操作系统和底层基础设施,用户只有数据库层面的管理权限。
RDS 存储已满问题:
易错: 认为存储会自动无限扩展。
正确: 即使支持自动扩展,也有最大限制。当存储接近满载时,可能会导致数据库进入不可用状态。需监控
FreeStorageSpace
指标。Aurora 的独特架构:
易错: 将 Aurora 视为只是 RDS 的一个普通引擎,或混淆其存储与传统 RDS 存储。
正确: 强调其共享存储卷、6 个数据副本、快速故障转移、低延迟读副本以及 Serverless/Global Database 特性。
主版本升级与小版本升级:
易错: 认为所有升级都在维护窗口自动完成。
正确: 小版本升级通常在维护窗口进行(可配置),但主版本升级需要手动操作,且通常会带来更长的停机。
数据库连接池 (Connection Pooling):
虽然不是 RDS 本身的功能,但 RDS 经常与 RDS Proxy 结合考察。RDS Proxy 是一个全托管的、高可用的数据库代理,可以帮助管理大量连接,减少数据库的连接负担,提高应用程序弹性。SAA 中可能会问到如何解决大量并发连接导致 DB 性能下降的问题,RDS Proxy 是答案之一。
VPC 和安全组配置:
易错: 将 RDS 实例放在公共子网或配置错误的安全组。
正确: RDS 实例应放在私有子网中。安全组只允许来自特定应用服务器或 Jump Box 的流量进入 RDS 端口。
版权声明: 本文为 InfoQ 作者【Geek_0d4cde】的原创文章。
原文链接:【http://xie.infoq.cn/article/48f4d5dd7b8923fe584bd73d3】。文章转载请联系作者。
评论