使用redis-migrate-tool进行redis数据搬迁

原文链接: https://my.oschina.net/momomo/blog/3022077

 

工具的git地址:https://github.com/vipshop/redis-migrate-tool

linux环境需要安装资源:autoconf automake libtool bzip2 (使用yum install指令)

编译:

$ cd redis-migrate-tool
$ autoreconf -fvi
$ ./configure
$ make
$ src/redis-migrate-tool -h

执行:

src/redis-migrate-tool -c rmt.conf -o log -d

日志:

tail log

 查看迁移信息:

# rmt.conf配置中的listen的端口(8888),地址(127.0.0.1)
redis-cli -h 127.0.0.1 -p 8888
127.0.0.1:8888> info

抽取/校验数据:

#默认抽取1000个数据比对
src/redis-migrate-tool -c rmt.conf -o log -C "redis_check 2000"

插入测试:

#默认1000,rmt.conf中若有filter,效果不佳
src/redis-migrate-tool -c rmt.conf -o log -C "redis_testinsert 2000"

整合两个单点数据的配置(rmt.conf):

[source]
type: single
servers:
 - 127.0.0.1:6380
 - 127.0.0.1:6381

[target]
type: single
servers:
 - 127.0.0.1:6382

[common]
listen: 0.0.0.0:8888

    两个单点转一个单点,需要确保不存在键值相同的,不然数据可能会被脏数据覆盖。

[common]下属性解释:

    filter:用于过滤不符合要求的键值 ,需满足Glob-Style模式,目前发现只能使用*,?,[],^,没有{},这将导致以某两个字符串开头的需求需要双开工具才能实现。(有人知道其他方式吗?)

双开注意:

    重新创建一个conf文件,修改listen的端口,修改source和target。启动指令中的rmt.conf改为新建配置文件。

场景不可用:

    A库搬迁到B库,B库修改某个key的值后,重启rmt,会发现B库数据修改的数据被还原。这是由于,rmt启动时会将A库的所有数据生成oplog(写操作),发送给B库执行,故数据被覆盖。

转载于:https://my.oschina.net/momomo/blog/3022077

你可能感兴趣的:(使用redis-migrate-tool进行redis数据搬迁)