Docker部署Redis异常:重启后可用但一段时间失效,同步报错
Redis主从同步握手失败导致容器停止的修复方案
排查与修复步骤
检查主从网络连通性
进入Redis从容器,执行ping 主节点IP确认网络可达,再用telnet 主节点IP 6379测试端口是否开放。若为跨Docker主机部署,需确认防火墙、安全组未阻断6379端口;若为同主机容器,确保二者在同一Docker网络内。验证主节点同步配置
主节点需确保:- 若设置了
requirepass,从节点必须配置masterauth(已设置可跳过); - 执行
redis-cli info replication查看主节点的连接状态,确认从节点未被拒绝; - 检查主节点日志,排查是否存在同步时内存不足、连接数耗尽的错误。
- 若设置了
调整从节点同步超时与重试参数
在从节点的启动配置中增加超时与重试设置,避免网络延迟导致握手失败:
若使用Docker命令启动,可添加参数:docker run -d --name redis-slave \ -v /your/local/redis.conf:/usr/local/etc/redis/redis.conf \ redis redis-server /usr/local/etc/redis/redis.conf \ --replicaof 主节点IP 6379 \ --masterauth 主节点密码 \ --repl-timeout 60 \ --repl-retry-delay 5若使用配置文件,在
redis.conf中添加:repl-timeout 60 repl-retry-delay 5检查主节点连接数限制
在主节点执行redis-cli config get maxclients,若返回值过小,会导致从节点连接被拒绝。可通过config set maxclients 10000临时调整,或在主节点配置文件中永久修改后重启。排查主节点内存与持久化问题
- 执行
redis-cli info memory查看used_memory_peak是否接近maxmemory,若内存不足,调整maxmemory值或配置内存淘汰策略(如maxmemory-policy allkeys-lru); - 检查主节点日志,确认RDB/AOF持久化无错误——同步时主节点需生成RDB文件,持久化失败会直接中断同步。
- 执行
解除Docker容器资源限制
执行docker stats redis-slave查看容器CPU、内存占用,若存在资源不足导致进程被系统终止的情况,调整容器资源分配,例如:docker run -d --name redis-slave \ --memory 2g --cpus 1 \ # 其余配置参数...
内容的提问来源于stack exchange,提问作者Masson
相关产品推荐
相关产品推荐

