AWS Aurora MySQL 读写分离:配置 Reader 实例权重实现 SQL 流量按比例分发

在 Aurora MySQL 中,通过设置 Reader 实例权重可实现读请求的按比例分发。权重值决定各 Reader 实例接收读流量的相对比例(例如权重 70 和 30 表示 7:3 的流量分配)。以下是完整配置流程:

一、核心原理
  1. 读写分离架构
    • Writer 实例处理写请求
    • Reader 实例处理读请求
    • 通过 Reader Endpoint 自动分发读流量
  2. 权重算法
    • 设第 $i$ 个 Reader 实例权重为 $w_i$
    • 该实例接收流量比例为: $$ \text{流量比例} = \frac{w_i}{\sum_{k=1}^{n} w_k} $$
    • 例如:权重 60 和 40 时,流量分配为 60% 和 40%
二、配置步骤(AWS 控制台)
  1. 进入 RDS 控制台
    • 导航到 Aurora 集群 > 选择目标 Reader 实例
  2. 修改实例配置
    • 点击 "修改" 按钮
    • "连接处理" 部分找到 "权重" 参数
    • 输入整数权重值(0-100):
      • 0:不接收流量(维护模式)
      • 100:最高权重
    • 示例:为两个 Reader 设置权重
      实例名权重值流量占比
      reader-inst-17070%
      reader-inst-23030%
  3. 保存并应用
    • 选择 "立即应用"
    • 变更在 30 秒内生效(无需重启)
三、AWS CLI 配置
# 修改实例权重
aws rds modify-db-instance \
  --db-instance-identifier reader-inst-1 \
  --weight 70

# 验证配置
aws rds describe-db-instances \
  --db-instance-identifier reader-inst-1 \
  --query "DBInstances[0].{Weight:Weight}"

输出示例:

{
  "Weight": 70
}

四、应用层连接方式

在应用程序中,使用 Reader Endpoint 连接数据库:

# Python 示例
import mysql.connector

config = {
  "host": "your-cluster.cluster-ro-xxxxxx.rds.amazonaws.com",  # Reader Endpoint
  "user": "app_user",
  "password": "your_password",
  "database": "your_db"
}

# 所有读请求自动按权重分发
conn = mysql.connector.connect(**config)

五、注意事项
  1. 权重动态调整
    • 修改权重实时生效
    • 新增 Reader 实例时自动加入负载均衡
  2. 故障转移
    • 权重为 0 的实例不参与流量分发
    • 若活动实例故障,流量自动转移至其他实例
  3. 监控指标
    • 通过 CloudWatch 监控:
      • ReaderDBConnections:各实例连接数
      • NetworkThroughput:流量验证
  4. 版本要求
    • 需 Aurora MySQL 2.09.1 或更高版本
    • 检查引擎版本:
      SHOW AURORA VERSION;
      

实践建议
首次配置时按 1:1 设置权重,通过 CloudWatch 观察负载后逐步调整。对于计算密集型查询,可分配更高权重到高性能实例。

更多推荐