我正在尝试使用从单实例Redis服务器获取的RDB文件创建Redis群集。这是我尝试过的:
#! /usr/bin/env bash
for i in 6000 6001 6002 6003
do
redis-server --port $i --cluster-config-file "node-$i.cconf" --cluster-enabled yes --dir "$(pwd)" --dbfilename dump.rdb &
done
该脚本启动4个启用集群的Redis进程。它还使用转储文件初始化每个节点。
然后我运行redis-trib.rb
以便4个节点可以找到彼此:
redis-trib.rb create 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003
我收到以下错误:
>>> Creating cluster
[ERR] Node 127.0.0.1:6060 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
我还尝试过一种变体,其中只有第一个节点/进程使用RDB文件进行初始化,其他节点/进程为空。我可以将3个空节点加入到一个集群中,但不能预先填充数据。
将预先存在的RDB文件导入Redis群集的正确方法是什么?
如果这是“X-Y problem”,这就是我这样做的原因:
我正在从单实例Redis服务器迁移到Elasticache Redis群集(启用群集模式)。如果将其上载到S3,Elasticache可以在群集启动时轻松导入RDB文件。但是Elasticache集群启动需要很长时间。为了在测试迁移代码时减少反馈循环,我希望能够在本地启动集群。
我也尝试使用create-cluster实用程序,但似乎没有任何选项可以预先使用数据填充群集。