redis 主重复制ERR Unable to perform background save问题

在192.168.171.139:6381的redis上手动执行了slaveof 192.168.171.140 6381 后发现没有时行数据同步,查看日志发现有报错信息:

[codis@192_168_171_139 redis_conf]$ tail -f redis6381.log

[26050] 04 Nov 13:30:43.785 * Connecting to MASTER 192.168.171.140:6381

[26050] 04 Nov 13:30:43.785 * MASTER SLAVE sync started

[26050] 04 Nov 13:30:43.786 * Non blocking connect for SYNC fired the event.

[26050] 04 Nov 13:30:43.786 * Master replied to PING, replication can continue…

[26050] 04 Nov 13:30:43.786 * Partial resynchronization not possible (no cached master)

[26050] 04 Nov 13:30:43.787 * Full resync from master: 82332b04925c01b400707707ea3c765c32f69e7c:1

[26050] 04 Nov 13:30:43.787 # MASTER aborted replication with an error: ERR Unable to perform background save

master端也有ERROR日志产生

[codis@192_168_171_140 redis_conf]$ tail -f redis6381.log

[26035] 04 Nov 13:36:40.900 * Slave asks for synchronization

[26035] 04 Nov 13:36:40.900 * Full resync requested by slave.

[26035] 04 Nov 13:36:40.900 * Starting BGSAVE for SYNC

[26035] 04 Nov 13:36:40.900 # Can’t save in background: fork: Cannot allocate memory

[26035] 04 Nov 13:36:40.900 * Replication failed, can’t BGSAVE

多主查询原因是redis启动时有报一个warning

[codis@192_168_171_140 redis_conf]$ head redis6381.log  -n 100

[12680] 03 Jun 19:18:37.372 # Server started, Redis version 2.8.13

[12680] 03 Jun 19:18:37.372 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.

操作方式日志已经说得很清楚了

添加vm.overcommit_memory = 1到/etc/sysctl.conf或者sysctl vm.overcommit_memory=1临时生效.

vm.overcommit_memory = 1这个内核参数是内存分配策略

可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

修改完之后可以看到日志显示已经在同步中

[codis@192_168_171_140 redis_conf]$ tail -f redis6381.log

[26035] 04 Nov 13:47:22.879 * Slave asks for synchronization

[26035] 04 Nov 13:47:22.880 * Full resync requested by slave.

[26035] 04 Nov 13:47:22.880 * Starting BGSAVE for SYNC

[26035] 04 Nov 13:47:22.917 * Background saving started by pid 19713

点赞