我有两个redis实例都在win64上的同一台机器上运行。版本是来自https://github.com/MSOpenTech/redis的版本,没有修改,二进制文件正在按照github(即版本2.6.12)的下载运行。
我想创建一个slave并将其同步到master。我在同一台机器上执行此操作以确保它在WAN机器上创建从机之前工作,这将花费大约一个小时来传输主机中存在的数据。
但是,我收到以下错误:
[4100] 15 May 18:54:04.620 * Connecting to MASTER...
[4100] 15 May 18:54:04.620 * MASTER <-> SLAVE sync started
[4100] 15 May 18:54:04.620 * Non blocking connect for SYNC fired the event.
[4100] 15 May 18:54:04.620 * Master replied to PING, replication can continue...
[4100] 15 May 18:54:28.364 * MASTER <-> SLAVE sync: receiving 2147483647 bytes from master
[4100] 15 May 18:55:05.772 * MASTER <-> SLAVE sync: Loading DB in memory
[4100] 15 May 18:55:14.508 # Short read or OOM loading DB. Unrecoverable error, aborting now.
我可以同步的唯一方法是使用迷你脚本:
import orm.model
if __name__ == "__main__":
src = orm.model.caching.Redis(**{"host":"source_host","port":6379})
dest = orm.model.caching.Redis(**{"host":"source_host","port":7777})
ks = src.handle.keys()
for i,k in enumerate(ks):
if i % 1000 == 0:
print i, "%2.1f %%" % ( (i * 100.0) / len(ks))
dest.handle.set(k,src.handle.get(k))
其中orm.model.caching。*是我的中间件缓存实现位(redis只是创建一个self.handle实例变量)。
首先,我非常怀疑接收字节中的数字,因为它是2 ^ 32-1 ..这是一个非常奇怪的巧合。其次,OOM可能意味着内存不足,但我可以启动第二个进程并通过脚本同步,但是通过redis --slaveof执行此操作会因内存不足而失败。当然这不对吗?
redis-check-dump没有运行,因为这是Windows实现。
不幸的是,我正在同步的密钥中存在敏感数据,所以我无法向任何人提供调查。对不起。
我肯定在运行64位版本,因为它在标题启动时声明了这一点。
我不介意通过我的迷你脚本进行同步,然后只启用从属模式,但我不认为这是可能的,因为执行奴隶的时刻,它会从头开始丢弃所有已知数据和重新同步(然后失败了。)
任何想法??
答案 0 :(得分:0)
我之前也看到过这个错误,但2.8.4的最新部分似乎已经解决了它https://github.com/MSOpenTech/redis/tree/2.8.4_msopen