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 上运行关系型数据库的首选,提供了托管的便利性和企业级的可靠性!