速卖通素材
奋斗

单台云服务器上同时部署MySQL和Redis的最佳实践是什么?

服务器

在单台云服务器上同时部署 MySQL 和 Redis 是常见的轻量级架构选择,但需兼顾性能、资源隔离与运维安全。以下是经过验证的最佳实践:


✅ 一、核心原则

  1. 资源隔离:避免两者争抢 CPU/内存导致相互干扰
  2. 安全加固:最小化攻击面,防止横向渗透
  3. 可观测性:独立监控指标,快速定位瓶颈
  4. 备份与容灾:确保数据可恢复,降低单点故障风险

🛠️ 二、具体实践建议

1. 资源配置与调优

组件 推荐配置策略
MySQL • 限制 innodb_buffer_pool_size ≤ 总内存的 50%
• 设置 max_connections 合理值(如 100~200),避免连接风暴
• 启用 slow_query_log + general_log(仅调试时开启)
Redis maxmemory 设为剩余内存的 60%~70%(留余量给 OS & MySQL)
• 使用 allkeys-lruvolatile-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 → 监控内存使用率、命中比、命令延迟、客户端数量
  • 设置阈值告警:
    • Redis 内存 > 80% → 触发扩容或清理缓存
    • MySQL 连接数 > 90% max → 限流或扩容实例

5. 备份策略

组件 方案
MySQL • 每日全量备份(mysqldump --single-transactionxtrabackup
• 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 » 单台云服务器上同时部署MySQL和Redis的最佳实践是什么?