在同一台服务器上同时部署MySQL和Redis时,需综合考虑资源分配、性能优化和稳定性。以下是关键配置要求和建议:
1. 硬件配置
- CPU:
- 至少4核(推荐8核以上),MySQL和Redis均为CPU密集型应用,尤其是Redis单线程模型依赖CPU主频。
- 若高并发场景,优先选择高主频CPU(如3.0GHz+)。
- 内存:
- Redis:预留足够内存(如16GB+),避免频繁触发
maxmemory淘汰策略。建议配置为预期数据量的1.5倍。 - MySQL:根据数据量和查询复杂度分配(如8GB+),尤其关注
innodb_buffer_pool_size(通常占可用内存的50%-70%)。 - 总内存:需满足
Redis内存 + MySQL内存 + 系统预留(2GB+)。
- Redis:预留足够内存(如16GB+),避免频繁触发
- 磁盘:
- MySQL:使用SSD(推荐NVMe),保证IOPS(如5000+)。若数据量大,预留足够空间(如500GB+)。
- Redis:若启用AOF持久化,也需SSD支持。
- 网络:千兆网卡(或更高),避免本地通信成为瓶颈。
2. 软件配置
- 系统优化:
- 调整内核参数(如
vm.overcommit_memory=1防止Redis OOM,fs.file-max增加文件描述符限制)。 - 禁用Swap或限制其使用(
vm.swappiness=1)。
- 调整内核参数(如
- MySQL配置:
- 关键参数:
innodb_buffer_pool_size = 4G # 根据总内存调整 innodb_log_file_size = 1G # 提高写入性能 max_connections = 200 # 避免过多连接争抢资源 - 关闭不必要的引擎(如
MyISAM)。
- 关键参数:
- Redis配置:
- 关键参数:
maxmemory 8GB # 设为总内存的50%-60% maxmemory-policy allkeys-lru # 根据场景选择淘汰策略 appendonly yes # 如需持久化,但会增加磁盘IO - 绑定本地IP(
bind 127.0.0.1)并设置密码(requirepass)增强安全性。
- 关键参数:
3. 资源隔离与优先级
- CPU隔离:
- 通过
taskset或cgroups为MySQL和Redis分配独立CPU核心,避免争抢。 - 将Redis进程绑定到高主频核心(因其单线程特性)。
- 通过
- 内存隔离:
- 使用
cgroups限制各自的内存用量,防止OOM相互影响。
- 使用
- IO优先级:
- 通过
ionice为MySQL赋予更高IO优先级(因其持久化需求更关键)。
- 通过
4. 监控与调优
- 监控工具:
Prometheus+Grafana监控CPU、内存、磁盘IO、网络。- MySQL:
pt-mysql-summary、SHOW STATUS。 - Redis:
redis-cli --stat、INFO命令。
- 调优方向:
- 观察Redis的
evicted_keys(是否频繁淘汰)和MySQL的slow_query_log。 - 根据负载动态调整
innodb_buffer_pool_size和Redis的maxmemory。
- 观察Redis的
5. 典型场景示例
- 中等负载场景(16GB内存服务器):
- MySQL:
innodb_buffer_pool_size=8G,max_connections=150。 - Redis:
maxmemory=6G,appendfsync everysec。 - 系统预留:2G(OS + 其他进程)。
- MySQL:
6. 注意事项
- 避免资源耗尽:任一服务占用过多资源可能导致另一个服务性能骤降。
- 备份策略:确保Redis的RDB/AOF和MySQL的binlog备份不冲突。
- 版本选择:使用稳定版本(如MySQL 8.0+、Redis 6.2+)。
通过合理分配资源和持续监控,可确保两者高效协同运行。若资源紧张,建议将Redis迁移至独立服务器,尤其是高并发或大数据量场景。
云服务器