在单台云服务器上同时部署 MySQL 和 Redis 是常见的轻量级架构选择,但需兼顾性能、资源隔离与运维安全。以下是经过验证的最佳实践:
✅ 一、核心原则
- 资源隔离:避免两者争抢 CPU/内存导致相互干扰
- 安全加固:最小化攻击面,防止横向渗透
- 可观测性:独立监控指标,快速定位瓶颈
- 备份与容灾:确保数据可恢复,降低单点故障风险
🛠️ 二、具体实践建议
1. 资源配置与调优
| 组件 | 推荐配置策略 |
|---|---|
| MySQL | • 限制 innodb_buffer_pool_size ≤ 总内存的 50%• 设置 max_connections 合理值(如 100~200),避免连接风暴• 启用 slow_query_log + general_log(仅调试时开启) |
| Redis | • maxmemory 设为剩余内存的 60%~70%(留余量给 OS & MySQL)• 使用 allkeys-lru 或 volatile-lru 淘汰策略• 禁用 appendonly yes 若对持久化要求不高(减少 I/O 压力) |
| 操作系统 | • 关闭 transparent_hugepages(THP)提升 Redis 性能• 调整 vm.overcommit_memory=1 避免 OOM Killer 误杀进程• 使用 cgroups v2 限制各进程 CPU/内存上限(关键!) |
# 示例:Cgroups 限制(systemd 方式)
[Service]
MemoryMax=4G
CPUQuota=80%
2. 网络与安全
-
绑定监听地址:
# MySQL (my.cnf) bind-address = 127.0.0.1 # 默认只允许本地访问 # Redis (redis.conf) bind 127.0.0.1 protected-mode yes requirepass <强密码> # 必须设置密码 - 防火墙规则:
# 仅开放必要端口(如应用服务器 IP) ufw allow from <app-server-ip> to any port 3306,6379 ufw default deny incoming - 禁止 root 登录:创建专用用户(如
mysql,redis),最小权限运行服务。
3. 目录与文件隔离
- 数据目录分离:
/data/mysql/ # MySQL 数据 /data/redis/ # Redis RDB/AOF /var/log/mysql/ /var/log/redis/ - 设置严格权限:
chown -R mysql:mysql /data/mysql chmod 700 /data/mysql chown -R redis:redis /data/redis chmod 700 /data/redis
4. 监控与告警
- 使用统一监控栈(如 Prometheus + Grafana):
- MySQL:
mysqld_exporter→ 监控 QPS、慢查询、连接数、缓冲池命中率 - Redis:
redis_exporter→ 监控内存使用率、命中比、命令延迟、客户端数量
- MySQL:
- 设置阈值告警:
- Redis 内存 > 80% → 触发扩容或清理缓存
- MySQL 连接数 > 90% max → 限流或扩容实例
5. 备份策略
| 组件 | 方案 |
|---|---|
| MySQL | • 每日全量备份(mysqldump --single-transaction 或 xtrabackup)• Binlog 实时归档(保留 7 天) • 备份文件加密 + 异地存储(如 OSS/S3) |
| Redis | • AOF 开启 everysec 策略• 每小时快照(RDB)+ 自动清理旧文件 • 重要数据手动导出至对象存储 |
💡 提示:避免在业务高峰期执行备份操作,可安排在凌晨低峰期。
6. 高可用替代方案(进阶)
若未来需更高可用性,建议逐步迁移至:
- MySQL:主从复制 + MHA/Orchestrator 自动故障转移
- Redis:哨兵模式(Sentinel)或 Cluster 分片集群
- 中间层:引入 HAProxy/Keepalived 做负载均衡入口
⚠️ 三、常见误区规避
| 误区 | 正确做法 |
|---|---|
将 MySQL 和 Redis 都设为 0.0.0.0 监听 |
仅绑定内网 IP 或 127.0.0.1,通过反向X_X暴露 |
| 不限制 Redis 最大内存 | 必设 maxmemory + 淘汰策略,防止 OOM 拖垮整机 |
| 共用同一用户运行服务 | 严格区分系统用户(mysql, redis),禁止 sudo 提权 |
| 忽略日志轮转 | 配置 logrotate 防止磁盘被日志占满 |
📊 四、适用场景判断
✅ 适合单服务器部署:
- 开发/测试环境
- 中小规模生产系统(QPS < 5k,日活 < 10 万)
- 预算有限且可接受一定风险
❌ 不建议单服务器:
- 核心交易系统(需 99.99% SLA)
- 高并发读写场景(如秒杀、实时计数)
- 合规要求严格(等保三级以上通常要求物理/逻辑隔离)
如需进一步提供:
- 自动化部署脚本(Ansible/Terraform)
- Docker Compose 编排模板(含健康检查)
- 性能压测方案(Sysbench + Redis-benchmark)
欢迎告知您的具体技术栈与业务规模,我可定制优化方案。
轻量云Cloud