RDS 关系型数据库
Amazon Relational Database Service (RDS) 提供托管的关系型数据库服务。
核心概念
什么是托管数据库
传统自建 vs RDS 托管:
自建数据库(EC2 上)
├─ 完全控制
├─ 需要手动管理
│ ├─ 安装和配置
│ ├─ 打补丁和升级
│ ├─ 备份和恢复
│ ├─ 故障转移
│ └─ 性能优化
└─ 运维成本高
RDS 托管数据库
├─ AWS 管理基础设施
├─ 自动化运维
│ ├─ 自动备份
│ ├─ 自动打补丁
│ ├─ 自动故障转移
│ ├─ 监控和告警
│ └─ 一键扩容
└─ 专注业务逻辑
RDS 支持的数据库引擎
| 引擎 | 版本 | 特点 | 适用场景 |
|---|---|---|---|
| MySQL | 5.7, 8.0 | 开源、流行 | Web 应用、电商 |
| PostgreSQL | 12-15 | 功能强大、扩展性 | 企业应用、GIS |
| MariaDB | 10.3-10.6 | MySQL 分支 | MySQL 迁移 |
| Oracle | 12c-19c | 企业级 | 核心业务系统 |
| SQL Server | 2016-2022 | 微软生态 | .NET 应用 |
| Aurora | MySQL/PG 兼容 | AWS 自研、高性能 | 高并发、云原生 |
RDS 架构
单可用区部署
┌─────────────────────────────┐
│ Availability Zone A │
│ │
│ ┌─────────────────────┐ │
│ │ RDS Instance │ │
│ │ ┌─────────────┐ │ │
│ │ │ Primary DB │ │ │
│ │ └─────────────┘ │ │
│ │ │ │ │
│ │ ┌─────▼───────┐ │ │
│ │ │ EBS Volume │ │ │
│ │ │ (数据存储) │ │ │
│ │ └─────────────┘ │ │
│ └─────────────────────┘ │
│ │
│ ┌─────────────────────┐ │
│ │ Automated Backup │ │
│ │ (存储到 S3) │ │
│ └─────────────────────┘ │
└─────────────────────────────┘
特点:
- 成本最低
- 适合开发/测试环境
- 维护期间会停机
- 单点故障风险
多可用区部署(Multi-AZ)
┌────────────────┐ ┌────────────────┐
│ AZ A (主) │ │ AZ B (备) │
│ │ │ │
│ ┌──────────┐ │ 同步复制 │ ┌──────────┐ │
│ │ Primary │─┼──────────▶│ │ Standby │ │
│ │ Instance │ │ │ │ Instance │ │
│ └────┬─────┘ │ │ └──────────┘ │
│ │ │ │ │
│ ┌────▼─────┐│ │ ┌──────────┐ │
│ │ EBS ││ │ │ EBS │ │
│ └──────────┘│ │ └──────────┘ │
└────────────────┘ └────────────────┘
│ ▲
│ │
│ 故障时自动切换(1-2分钟)
└──────────────────────────┘
高可用机制:
- 同步复制:主库写入后立即复制到备库
- 自动故障转移:主库故障,DNS 自动指向备库
- 零数据丢失:RPO = 0(恢复点目标)
- 最小停机:RTO < 2 分钟(恢复时间目标)
计费:
- 双倍实例成本(主 + 备)
- 存储只计费一次
- 跨可用区数据传输免费
只读副本(Read Replicas)
┌────────────────┐
│ Primary DB │
│ (读写) │
└────────┬───────┘
│ 异步复制
┌────┴────┬────────┬────────┐
│ │ │ │
┌───▼───┐ ┌──▼───┐ ┌──▼───┐ ┌──▼───┐
│ Read │ │ Read │ │ Read │ │ Read │
│Replica│ │Replica│ │Replica│ │Replica│
│ (只读)│ │(只读) │ │(只读) │ │(跨区域)│
└───────┘ └──────┘ └──────┘ └──────┘
▲ ▲ ▲
│ │ │
读请求 读请求 读请求
用途:
- 读写分离:将读流量分散到副本
- 地理分布:靠近用户,降低延迟
- 灾难恢复:跨区域副本作为备份
- 分析工作负载:不影响主库性能
特点:
- 异步复制(延迟通常 < 1 秒)
- 最多 15 个副本(Aurora 更多)
- 可以提升为主库
- 独立计费
数据库实例类型
实例系列
1. 通用型(T3/T4g):
特性:
├─ 可突增 CPU
├─ 基线性能 + 积分系统
├─ 成本效益高
└─ 适合:开发、测试、轻量应用
定价示例:
db.t3.medium (2 vCPU, 4 GB)
- MySQL: ~$0.07/小时
- 可突增至 100% CPU(临时)
2. 内存优化(R5/R6i):
特性:
├─ 大内存容量
├─ 高内存/CPU 比例
├─ 稳定性能
└─ 适合:内存密集型应用、缓存
定价示例:
db.r5.large (2 vCPU, 16 GB)
- MySQL: ~$0.28/小时
- 适合大型数据集、复杂查询
3. 突发性能(T2/T3):
- 积分制性能
- 适合间歇性负载
- 成本最低
存储类型
1. 通用型 SSD (gp3/gp2):
gp3(推荐):
├─ 基准:3,000 IOPS,125 MB/s
├─ 可扩展:16,000 IOPS,1,000 MB/s
├─ 价格:$0.115/GB/月
└─ 适合:大多数工作负载
2. 预配置 IOPS (io1/io2):
io2:
├─ 高性能:64,000 IOPS
├─ 低延迟:亚毫秒级
├─ 价格:$0.125/GB + $0.10/IOPS
└─ 适合:OLTP、关键业务
3. 磁性存储(已淘汰):
- 仅用于向后兼容
- 不推荐新部署
备份和恢复
自动备份
工作原理:
每日全量快照
│
├─ 存储到 S3(跨多个可用区)
├─ 保留期:1-35 天
├─ 备份窗口:指定时间(通常凌晨)
└─ 事务日志持续归档(5 分钟间隔)
恢复流程:
1. 选择恢复时间点(PITR)
2. 恢复最近的全量快照
3. 重放事务日志到指定时间
4. 创建新实例(不覆盖原实例)
PITR(时间点恢复):
- 可恢复到任意秒
- 最多恢复到 5 分钟前
- 恢复为新实例,保留原实例
备份窗口:
- 建议:业务低峰期
- 多可用区:对性能影响小
- 单可用区:可能有短暂 I/O 暂停
手动快照
特点:
用户触发快照
├─ 永久保留(除非手动删除)
├─ 跨区域复制
├─ 共享给其他账户
└─ 重要变更前推荐
最佳实践:
- 重大升级前创建快照
- 数据迁移前备份
- 定期创建用于灾难恢复
- 跨区域复制关键快照
安全性
网络隔离
VPC 部署:
┌─────────────────────────────────┐
│ VPC │
│ │
│ ┌────────────┐ ┌────────────┐│
│ │公有子网 │ │私有子网 ││
│ │ │ │ ││
│ │ ┌──────┐ │ │ ┌──────┐ ││
│ │ │ EC2 │──┼──┼─▶│ RDS │ ││
│ │ └──────┘ │ │ └──────┘ ││
│ │ │ │ (无公网IP) ││
│ └────────────┘ └────────────┘│
│ │
│ 安全组: │
│ ├─ EC2: 允许 0.0.0.0/0:80 │
│ └─ RDS: 仅允许 EC2 SG:3306 │
└─────────────────────────────────┘
访问控制:
- 私有子网部署(无公网访问)
- 安全组限制来源 IP/端口
- 网络 ACL 额外防护
- VPN/Direct Connect 安全连接
加密
静态加密:
加密范围:
├─ 数据库数据文件
├─ 自动备份
├─ 手动快照
├─ 只读副本
└─ 日志文件
密钥管理:
├─ AWS 托管密钥(免费)
└─ 客户管理密钥(KMS)
├─ 细粒度权限
├─ 审计日志
└─ 密钥轮换
传输加密:
- SSL/TLS 连接
- 强制 SSL(参数组配置)
- 证书验证
认证和授权
IAM 数据库认证:
优势:
├─ 无需管理数据库密码
├─ 使用 IAM 临时凭证
├─ 15 分钟有效期
├─ 集中权限管理
└─ 审计友好
支持:
├─ MySQL 5.6.34+
├─ PostgreSQL 9.5+
└─ MariaDB 10.6+
性能优化
参数组(Parameter Groups)
用途:
- 调整数据库引擎参数
- 优化性能
- 批量应用配置
示例参数:
MySQL 常用参数:
├─ max_connections: 并发连接数
├─ innodb_buffer_pool_size: 缓冲池大小
├─ query_cache_size: 查询缓存
├─ slow_query_log: 慢查询日志
└─ binlog_format: 二进制日志格式
性能洞察(Performance Insights)
功能:
数据库性能监控
├─ Top SQL 查询
├─ 等待事件分析
├─ 负载可视化
├─ 历史性能对比
└─ 免费(7 天保留)
关键指标:
- DBLoad:平均活跃会话数
- 等待事件:I/O、锁、CPU
- Top SQL:资源消耗最多的查询
优化建议
1. 选择合适的实例类型:
工作负载分析:
读多写少 → 使用只读副本
内存不足 → 升级到 R 系列
CPU 瓶颈 → 升级 vCPU
2. 索引优化:
- 分析慢查询日志
- 创建合适的索引
- 避免过度索引
- 定期维护索引
3. 连接池:
应用层连接池
├─ 复用数据库连接
├─ 减少连接开销
├─ 控制最大连接数
└─ 推荐:HikariCP、PgBouncer
Aurora vs RDS
Aurora 优势
架构创新:
传统 RDS:
实例 → EBS 存储(网络附加)
Aurora:
计算层 → 存储层(分布式、共享)
├─ 6 个副本(跨 3 个 AZ)
├─ 自愈存储
├─ 快速克隆
└─ 无存储限制(最高 128 TB)
性能提升:
- MySQL 兼容:5 倍性能
- PostgreSQL 兼容:3 倍性能
- 最高 15 个只读副本
- 副本延迟 < 10ms
高可用性:
- 跨 3 个可用区
- 6 份数据副本
- 自动故障转移 < 30 秒
- 无数据丢失
成本:
- 按存储使用量计费($0.10/GB/月)
- 按 I/O 计费($0.20/百万次)
- 总成本通常高于标准 RDS
何时选择 Aurora
✅ 适合:
- 高并发、大流量应用
- 需要极高可用性
- 快速扩展需求
- 复杂的读写分离
❌ 不适合:
- 简单应用、低流量
- 成本敏感项目
- 需要特定引擎版本
- Oracle/SQL Server 用户
成本优化
预留实例
折扣:
1 年预留(部分预付):~40% 折扣
3 年预留(全额预付):~60% 折扣
示例:
db.r5.large 按需:$0.28/小时 = $2,044/年
3 年预留:$820/年(节省 60%)
适用场景:
- 生产环境
- 长期运行
- 可预测负载
Savings Plans
- 灵活的价格模型
- 跨实例类型、区域
- 1-3 年承诺
- 类似预留实例折扣
其他优化
停止实例:
- 开发/测试环境
- 下班后停止
- 仅付存储费用
自动扩展存储:
- 按需增长
- 避免过度配置
- 仅付实际使用
删除未使用快照:
- 审查保留策略
- 删除过期快照
- 使用 Lifecycle Manager
迁移到 RDS
迁移策略
1. AWS DMS(Database Migration Service):
迁移流程:
源数据库 → DMS 复制实例 → 目标 RDS
│
├─ 全量迁移
├─ 增量复制(CDC)
└─ 最小停机时间
2. 快照恢复:
- 自建数据库导出
- 上传到 S3
- 从 S3 导入到 RDS
3. 逻辑迁移:
- mysqldump / pg_dump
- 适合小型数据库
- 停机时间较长
RDS 是在 AWS 上运行关系型数据库的首选,提供了托管的便利性和企业级的可靠性!