vipshop/redis-migrate-tool,是唯品会开发的一个工具,用于在 redis 之间迁移数据。
/*
最大的坑:
Mac 上不能迁移,redis_check、redis_testinsert 命令没反应。redis 需要 auth 密码的话,也通不过(费了我不是一点点的时间...)
配置本地多个 redis 测试
切换本地多个低版本 redis 进行测试
... 都没用 ...
这里再记录一个命令:
brew switch redis 3.2.3/4.0.11 // brew 切换 redis 不同版本
*/
依赖:
automake
libtool
autoconf
bzip2
安装:
git clone [email protected]:vipshop/redis-migrate-tool.git
cd redis-migrate-tool
autoreconf -fvi
./configure
make
查看是否安装成功,帮助命令:
src/redis-migrate-tool -h
运行:
src/redis-migrate-tool -c rmt.conf -o log -d
警告:
在运行工具前,确保 'source' redis 服务器,有足够的内存,允许至少一个 redis 生成 rdb 文件。
如果 'source' redis 服务器,有足够大的内存,允许所有 redis 同时生成 rdb 文件,可以设置 rmt.conf 中 'source_safe: false'
不被支持的 redis 命令:
不支持以下命令,传播到 'target' redis 服务器,因为这些命令中的键,可能跨越不同的 'target' redis 服务器节点:
RENAME,RENAMENX,RPOPLPUSH,BRPOPLPUSH,FLUSHALL,FLUSHDB,BITOP,MOVE,GEORADIUS,GEORADIUSBYMEMBER,EVAL,EVALSHA,SCRIPT,PFMERGE
配置:
配置文件由3部分组成:
source
target
common
source 和 target 可用配置项
type - redis 类型,可选值如下:
single
twemproxy
redis cluster
rdb file
aof file
servers - 组内的 redis 服务器列表。如果 type 是 'twemproxy',则与 twemproxy 配置文件相同。如果 type 是 rdb 文件,这里填写 rdb 文件名。
redis_auth - 连接 redis 服务器时进行身份验证
timeout - redis 服务器 读/写 的超时时间(以毫秒为单位),默认为 120000。(注意:目前只有 'source' 配置部分可用)
hash - hash 函数类型。(注意:只可用于 type 为 'twemproxy'),可选值有:
one_at_a_time
md5
crc16
crc32(crc32的实现与 libmemcached 兼容)
crc32a(根据规范纠正crc32实现)
fnv1_64
fnv1a_64
fnv1_32
fnv1a_32
hsieh
murmur
jenkins
hash_tag - 双字符串,指定用于 hash 的秘钥部分。例如:{} 或 $$。只要标签中的键相同, hash_tag 就可以将不同的键映射到同一服务器。(注意:只可用于 type 为 'twemproxy')
distribution - 秘钥分发模式。(注意:只可用于 type 为 'twemproxy')
ketama
modula
random
common 可用配置项
listen - 监听地址和端口(name:port 或 ip:port)。默认是:127.0.0.1:8888(redis-migrate-tool,而非 redis-cli)
max_clients - 监听端口可连接的最大客户端个数。默认是:100
threads - redis-migrate-tool 可使用的最大线程数。默认是:CPU核心数
step - 解析请求的步骤。数字越大,迁移越快,但是使用的内存也越多。默认是:1
mbuf_size - 请求的 Mbuf 大小。默认是:512
noreply - 布尔类型,是否检查 'target' redis 组回复。默认是:false
source_safe - 布尔类型,用于保护 'source' redis 组服务器的内存安全。设置为 true,会保证每次、在组内的同一台服务器上,只有一个 redis 来生成 rdb 文件。此外,'source_safe: true' 可能会使用比你设置的线程数,更少的线程。默认是:true
dir - 工作目录,用来存储文件(例如:rdb 文件)。默认是:当前目录
filter - 过滤不匹配的 'key'。支持 'Glob' 风格。默认是:NULL
?
*
[ae]
[^e]
[a-b]
\ - 转义特殊字符
状态:
可以使用 redis-cli 来连接 redis-migrate-tool。监听地址和端口,可以在 'common' 配置块中设置
连接 'redis-migrate-tool':(注意:该命令同 redis-cli 的命令一样,只是端口不同,得非常注意!!)
redis-cli -h 127.0.0.1 -p 8888
info - 显示 Server、Clients、Memory、Group、Stats 状态
shutdown [seconds|asap]
作用:
停止从 'source' redis 的复制
尝试将 redis-migrate-tool 的缓存数据,发送给 'target' redis
redis-migrate-tool 停止并退出
参数:
seconds - redis-migrate-tool 在退出前,可用于给 'target' redis 发送缓存数据的最大秒数。默认是:10s
asap - 忽略缓存数据,立即退出
检查数据:
迁移完成后,可以使用 'redis_check' 命令,来检查 'source' 组 和 'target' 组的数据是否一致。默认只检查 1000 个key
src/redis-migrate-tool -c rmt.conf -o log -C redis_check
如果想检查更多的 key,使用
src/redis-migrate-tool -c rmt.conf -o log -C "redis_check 200000"
插入一些 key,用于测试:
使用 'redis_testinsert' 命令。默认只插入 1000 个key
src/redis-migrate-tool -c rmt.conf -o log -C "redis_testinsert"
如果想插入更多的 key,使用
src/redis-migrate-tool -c rmt.conf -o log -C "redis_testinsert 30000"
如果只想插入'string' 类型的 key,使用:
src/redis-migrate-tool -c rmt.conf -o log -C "redis_testinsert tring"
如果想插入某些指定类型的 key,使用:
src/redis-migrate-tool -c rmt.conf -o log -C "redis_testinsert string|set|list 10000"
唯品会 redis-migrate-tool redis 迁移工具翻译
猜你喜欢
转载自blog.csdn.net/beyond__devil/article/details/82420926
今日推荐
周排行