如何无缝迁移redis server

最近需要把一个redis服务从一台服务器上迁移到另外一台上,所以找了一下迁移的方案,有说在第一台 把数据Dump完然后复制数据文件过去,之后在新机器上起来redis实例,但是这样redis将会有一段无法 使用的时间。

后来发现使用redis的 replication 可以极其简单的实现redis从一个地方到另外一个地方的迁移。

1. 在新服务器上启动一个redis实例

首先我们先在需要迁移到的服务器上启动一个新的redis实例,配置没有什么特别的地方,值得注意的是, 从redis2.6以后,redis的slave默认变得不再接受写操作,所以我们需要修改conf中的

#slave-read-only yes
slave-read-only no

这样slave才能正常的接受写操作,不然之后写的时候会报错。

2. 使新的redis服务成为slave

当新的redis起来后,我们使用redis-cli连进去,然后使用 slaveof 命令使这个redis成为我们的旧 redis的slave:

redis 127.0.0.1:6379> SLAVEOF 192.168.1.100 6379
OK

在这之后,这两个redis会自动开始同步,如果需要查看同步的状态,可以使用info命令。

3. 完成迁移

等master和slave之间的同步完成后,我们就可以修改我们的应用,让它们使用新的redis server地址了。 把地址全部修改完以后,在新的redis上执行

redis 127.0.0.1:6379> SLAVEOF no one

让它重新变成老大,这样整个迁移就完成了。之后关闭调旧的redis旧ok了