fork 操作
- 同步操作
- 与内存量息息相关:内存越大,耗时越长
- info:latest_fork_usec 上一次fork操作的耗时微妙数
改善fork
- 优先使用物理机或者高效支持fork操作的虚拟机化技术
- 控制redis实例最大可用内存
- 合理配置系统内存分配策略
- 降低fork频率
子进程外开销
- CPU 开销:RDB和AOF文件生成,属于CPU密集型任务
- 优化: 不做CPU绑定,不和CPU密集型服务部署在一起
- 内存开销: fork内存开销,copy-on-write.
- 优化:echo never > /sys/kernel/mm/transparent_hugepage/enabled
- 硬盘开销: AOF和RDB文件写入,可以结合
- 优化:不和硬盘高负载服务部署在一起:存储服务,消息队列等
- no-appendfsync-on-rewrite=yes
- 根据写入量决定磁盘类型:ssd
AOF追加阻塞
- redis 日志: disk is busy?
- info Persistence
读写分离
- 读写分离:读流量分摊到从节点
- 可能遇到的问题: 1. 复制数据延迟 2. 读到过期数据 3. 从节点故障
配置不一致
- maxmemory不一致: 丢失数据
- 数据结构优化参数
规避全量复制
- 第一次全量复制:第一次不可避免, 小主节点,低峰时间处理
- 节点运行id不匹配: 主节点发生重启(运行id变化) 故障转移: 例如哨兵模式
- 复制积压缓冲区不足: 网络中断,部分复制无法满足 ,增大复制缓冲区配置rel_back_size , 网络"增强"
规避复制风暴
- 单节点复制风暴:
- 问题: 主节点重启, 多节点复制 解决: 更换复制拓扑
- 单机器复制风暴: 重启机器,所有节点都发生全量复制
- 主节点分散多机器