将MySQL和Redis部署在同一台云服务器时,需综合考虑两者的资源需求、性能瓶颈及扩展性。以下为详细配置建议:
1. 基础配置推荐
场景:中小型应用(日均10万~50万PV)
- CPU:4~8核(建议选择高频型或计算优化型实例)
- MySQL:CPU密集型(索引构建、复杂查询)
- Redis:单线程但需要高主频(建议≥3.0GHz)
- 内存:8~16GB(关键因素)
- MySQL:建议预留
(数据总量 × 20%) + 2GB的缓冲池(innodb_buffer_pool_size)。 - Redis:根据数据集大小分配,建议预留
(数据集大小 × 1.5) + 2GB(防止RDB/AOF fork阻塞)。
- MySQL:建议预留
- 存储:
- MySQL:SSD云盘(≥200GB,IOPS≥3000),若数据增长快可挂载独立云盘。
- Redis:若启用持久化(AOF/RDB),需与MySQL分盘部署(避免IO争抢)。
- 带宽:5~10Mbps(突发流量场景可启用按量付费带宽)。
2. 关键优化项
避免资源冲突
- 隔离CPU核心:通过
taskset或cgroups绑定MySQL和Redis到不同核心。 - 分盘存储:
- MySQL数据目录与Redis持久化文件分属不同磁盘(如MySQL用
/dev/vdb,Redis用/dev/vdc)。
- MySQL数据目录与Redis持久化文件分属不同磁盘(如MySQL用
- 内存分配:
- 确保
vm.overcommit_memory=1(防止Redis fork失败)。 - 设置Redis的
maxmemory为总内存的60%(留足MySQL缓冲池)。
- 确保
参数调优示例
# MySQL (my.cnf)
innodb_buffer_pool_size = 6G # 假设总内存12G
innodb_io_capacity = 2000 # SSD优化
# Redis (redis.conf)
maxmemory 8GB
maxmemory-policy allkeys-lru
appendonly yes # 若需持久化,建议用AOF
3. 高可用与扩展建议
- 风险点:单点故障(数据库与缓存同机)。
- 解决方案:
- Redis:启用哨兵模式(Sentinel)或集群(Cluster)。
- MySQL:配置主从复制(Slave延迟需监控)。
- 云服务商方案:
- 阿里云:可用区部署+SLB(或直接选用RDS/Redis版)。
- AWS:使用ElastiCache + RDS Multi-AZ。
4. 云厂商选型参考
| 厂商 | 推荐实例类型 | 适用场景 |
|---|---|---|
| 阿里云 | ecs.g7ne.4xlarge | 高频交易型应用 |
| AWS | m6i.xlarge | 通用型均衡负载 |
| 腾讯云 | S5.4XLARGE32 | 高性价比内存优化 |
5. 监控与告警
- 必监控指标:
- MySQL:
Queries/s,InnoDB Buffer Pool Hit Rate,Slow Queries。 - Redis:
Used Memory,Ops/sec,Latency。
- MySQL:
- 工具推荐:
- Prometheus + Grafana(自定义看板)。
- 云厂商内置监控(如阿里云CloudMonitor)。
总结
- 最低配置:4核8GB + SSD(测试环境或极低负载)。
- 生产推荐:8核16GB + 高性能SSD,并分离磁盘IO。
- 长期建议:当QPS超过5k时,优先考虑将MySQL与Redis分机部署。
云服务器