我目前有一个live redis服务器运行在一个云实例,我想迁移这个redis服务器到一个新的云实例,并使用该实例作为我的新的redis服务器。如果它是MySQL,我将从旧服务器导出DB并将其导入到新服务器。我该如何用redis做到这一点?
附注:我不指望设置复制。我想完全迁移redis服务器到一个新的实例。
我目前有一个live redis服务器运行在一个云实例,我想迁移这个redis服务器到一个新的云实例,并使用该实例作为我的新的redis服务器。如果它是MySQL,我将从旧服务器导出DB并将其导入到新服务器。我该如何用redis做到这一点?
附注:我不指望设置复制。我想完全迁移redis服务器到一个新的实例。
当前回答
零停机迁移的关键要素是:
复制(http://redis.io/commands/SLAVEOF) 在应用程序切换过程中写入从机的可能性(CONFIG slave-read-only no)
简而言之:
设置一个目标redis(空)作为源redis的从属(与你的数据) 等待复制完成 允许写入目标redis(当前为slave) 将应用程序切换到目标redis 等待数据流从主端转移到从端 将目标redis从主变为从
此外,redis还有一些选项,允许在分离目标后禁用源redis来接受写:
min-slaves-to-write min-slaves-max-lag
本主题由
http://redis.io/topics/admin#upgrading-or-restarting-a-redis-instance-without-downtime
reddislabs团队非常好的解释https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration(使用web.archive.org)
甚至还有他们的交互式迁移工具:https://github.com/RedisLabs/redis-migrate
其他回答
我还想做同样的事情:将一个db从一个独立的redis实例迁移到另一个redis实例(redis哨兵)。
因为数据不是关键(会话数据),我将尝试https://github.com/yaauie/redis-copy。
我发现导出/备份Redis数据(创建转储文件)的简单方法是通过命令行启动一个服务器,并创建一个动态副本,如下所示(假设源Redis在端口6379上是1.2.3.4):
/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379
您也可以使用RDD
它可以转储和恢复一个运行的redis服务器,并允许过滤/匹配/重命名转储键
零停机迁移的关键要素是:
复制(http://redis.io/commands/SLAVEOF) 在应用程序切换过程中写入从机的可能性(CONFIG slave-read-only no)
简而言之:
设置一个目标redis(空)作为源redis的从属(与你的数据) 等待复制完成 允许写入目标redis(当前为slave) 将应用程序切换到目标redis 等待数据流从主端转移到从端 将目标redis从主变为从
此外,redis还有一些选项,允许在分离目标后禁用源redis来接受写:
min-slaves-to-write min-slaves-max-lag
本主题由
http://redis.io/topics/admin#upgrading-or-restarting-a-redis-instance-without-downtime
reddislabs团队非常好的解释https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration(使用web.archive.org)
甚至还有他们的交互式迁移工具:https://github.com/RedisLabs/redis-migrate
Redis-dump终于为我工作了。它的文档提供了一个如何转储Redis数据库并将数据插入到另一个数据库的示例。