自建数据库迁移入云

场景一:Redis离线RDB迁移:

用户可以使用redis-port工具将自建redis的RDB文件迁移到网易云Redis。

前提条件

  1. 考虑到安全等因素,网易云redis默认不提供公网ip,所以需要用户在同一个vpc内部临时创建绑定公网ip的云主机,迁移完成后即可释放资源。
  2. 源RDB由redis 2.8版本生成。
  3. redis-port工具当前支持Redis基础版和主从版两种实例类型的迁移,暂不支持集群版。

下载地址

redis-port

使用命令

  1. 登录云主机;
  2. 下载redis-port工具,下载地址:https://redis-tools.nos-eastchina3.126.net/redis-port
  3. 运行命令
./redis-port restore --input dump.rdb --target 192.168.3.51:6379 --auth 123456

参数说明:

redis-port restore  [--ncpu=N]  [--parallel=M]  [--input=INPUT]  [--faketime=FAKETIME] [--filterdb=DB] --target=TARGET [--auth=AUTH] [--replace]
  • ncpu和parallel配置cpu占用和并发度,保持默认。
  • input:要导入的rdb文件。
  • filterdb:只迁移特定db。
  • target:目标redis节点地址,ip:port。
  • auth:目标redis节点密码。
  • replace:restore命令参数,支持目标数据replace,不需要指定,保持默认。
  • 其余参数保持默认。

同步状态

日志输出:

2018/10/29 15:24:45 main.go:204: [INFO] set ncpu = 1, parallel = 1
2018/10/29 15:24:45 restore.go:53: [INFO] restore from 'dump.rdb' to '192.168.3.51:6379'
2018/10/29 15:24:46 restore.go:129: [INFO] total = 18852599 -       469758 [  2%]  entry=15094
2018/10/29 15:24:47 restore.go:129: [INFO] total = 18852599 -       975715 [  5%]  entry=31385
2018/10/29 15:24:48 restore.go:129: [INFO] total = 18852599 -      1489791 [  7%]  entry=47944
2018/10/29 15:24:49 restore.go:129: [INFO] total = 18852599 -      1975691 [ 10%]  entry=63588
2018/10/29 15:24:50 restore.go:129: [INFO] total = 18852599 -      2459758 [ 13%]  entry=79181
2018/10/29 15:24:51 restore.go:129: [INFO] total = 18852599 -      2958658 [ 15%]  entry=95249
......
2018/10/29 15:25:23 restore.go:129: [INFO] total = 18852599 -     17535213 [ 93%]  entry=564676
2018/10/29 15:25:24 restore.go:129: [INFO] total = 18852599 -     18014838 [ 95%]  entry=580126
2018/10/29 15:25:25 restore.go:129: [INFO] total = 18852599 -     18480212 [ 98%]  entry=595116
2018/10/29 15:25:25 restore.go:129: [INFO] total = 18852599 -     18852599 [100%]  entry=607140
2018/10/29 15:25:25 restore.go:131: [INFO] restore: rdb done

当出现restore rdb done时全量同步完成,同步自动退出。

异常处理

迁移过程中如遇到网络或者节点故障,工具会自动退出,打印异常日志,定位问题后需要先清理目标端的数据,然后开始重新执行同步命令。

场景二:Redis在线迁移:

用户可以使用redis-port工具将自建redis在线迁移到网易云Redis。

前提条件

  1. 考虑到安全等因素,网易云redis默认不提供公网ip,所以需要用户在同一个vpc内部临时创建绑定公网ip的云主机,迁移完成后即可释放资源。
  2. 源实例有公网ip,版本为2.8版本。
  3. redis-port工具当前支持Redis基础版和主从版两种实例类型的迁移,暂不支持集群版。

下载地址

redis-port

使用命令

  1. 登录云主机;
  2. 下载redis-port工具,下载地址:https://redis-tools.nos-eastchina3.126.net/redis-port
  3. 运行命令
./redis-port sync -f 45.250.40.216:6379 -P 123456 -t 192.168.3.51:6379 -A 123456

参数说明:

redis-port sync     [--ncpu=N]  [--parallel=M]   --from=MASTER   [--password=PASSWORD] [--filterdb=DB] --target=TARGET [--auth=AUTH] [--sockfile=FILE [--filesize=SIZE]] [--log=filename] [--pid=filename] [--replace]
  • ncpu和parallel配置cpu占用和并发度,保持默认。
  • from:源redis节点地址,ip:port。
  • password:源redis节点密码。
  • filterdb:只迁移特定db。
  • target:目标redis节点地址,ip:port。
  • auth:目标redis节点密码。
  • replace:restore命令参数,支持目标数据replace,不需要指定,保持默认。
  • 其余参数保持默认。

同步状态

日志输出:

2018/10/29 11:51:55 main.go:204: [INFO] set ncpu = 1, parallel = 1
2018/10/29 11:51:55 sync.go:68: [INFO] sync from '45.250.40.216:6379' to '192.168.3.51:6379'
2018/10/29 11:51:55 sync.go:132: [INFO] psync runid = 001d20e32c767ed0b3715602b402ba03af2b00ad offset = 1708, fullsync
2018/10/29 11:51:55 sync.go:89: [INFO] rdb file = 18852599
2018/10/29 11:51:57 sync.go:251: [INFO] total=18852599 -       426056 [  2%]  entry=13686
2018/10/29 11:51:58 sync.go:251: [INFO] total=18852599 -       844997 [  4%]  entry=27177
2018/10/29 11:51:59 sync.go:251: [INFO] total=18852599 -      1290935 [  6%]  entry=41538
2018/10/29 11:52:00 sync.go:251: [INFO] total=18852599 -      1762113 [  9%]  entry=56710
....

2018/10/29 11:52:33 sync.go:251: [INFO] total=18852599 -     17394917 [ 92%]  entry=560157
2018/10/29 11:52:34 sync.go:251: [INFO] total=18852599 -     17820225 [ 94%]  entry=573856
2018/10/29 11:52:35 sync.go:251: [INFO] total=18852599 -     18121552 [ 96%]  entry=583562
2018/10/29 11:52:36 sync.go:251: [INFO] total=18852599 -     18432232 [ 97%]  entry=593570
2018/10/29 11:52:37 sync.go:251: [INFO] total=18852599 -     18754317 [ 99%]  entry=603943
2018/10/29 11:52:37 sync.go:251: [INFO] total=18852599 -     18852599 [100%]  entry=607140
2018/10/29 11:52:37 sync.go:253: [INFO] sync rdb done
2018/10/29 11:52:38 sync.go:307: [INFO] sync:  +forward=5      +nbypass=0      +nbytes=70
2018/10/29 11:52:39 sync.go:307: [INFO] sync:  +forward=0      +nbypass=0      +nbytes=0
2018/10/29 11:52:40 sync.go:307: [INFO] sync:  +forward=0      +nbypass=0      +nbytes=0
2018/10/29 11:52:41 sync.go:307: [INFO] sync:  +forward=0      +nbypass=0      +nbytes=14

当出现sync rdb done时全量同步完成,开始增量同步,后续源节点的数据写入会实时同步到目标节点。

用户可以对源集群进行短暂停写,看到日志输出打印+nbytes=0日志说明已经没有写入流量,用户可以将业务安全的切到云上的目标节点。+nbytes=14输出是由于主从同步会发送PING命令保活,非用户写入数据。

异常处理

迁移过程中如遇到网络或者节点故障,工具会自动退出,打印异常日志,定位问题后需要先清理目标端的数据,然后开始重新执行同步命令。