集群维护之导入现有Redis数据
实战案例:
公司将redis cluster部署完成之后,需要将之前的数据导入之Redis cluster集群,但是由于Redis cluster使用的分
片保存key的机制,因此使用传统的AOF文件或RDB快照无法满足需求,因此需要使用集群数据导入命令完成。
导入数据需要redis cluster不能与被导入的数据有重复的key名称,否则导入不成功或中断。
基础环境准备
导入数据之前需要关闭各redis 服务器的密码,包括集群中的各node和源Redis server,避免认证带来的环境不一
致从而无法导入,可以加参数--cluster-replace 强制替换Redis cluster已有的key。
#在所有节点上关闭各Redis密码认证 [root@redis-s1 ~]# redis-cli -h 10.0.0.18 -p 6379 -a 123456 CONFIG SET requirepass "" Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. OK
1 2 3 4 5 | #在所有节点上关闭各Redis密码认证 [ root @ redis - s1 ~ ] # redis-cli -h 10.0.0.18 -p 6379 -a 123456 CONFIG SET requirepass "" Warning : Using a password with '-a' or '-u' option on the command line interface may not be safe . OK |
执行数据导入
将源Redis server的数据直接导入之redis cluster。
Redis 3/4:
[root@redis ~]# redis-trib.rb import --from 外部Redis node-IP:PORT --replace 集群服务器IP:PORT
1 2 | [ root @ redis ~ ] # redis-trib.rb import --from 外部Redis node-IP:PORT --replace 集群服务器 IP : PORT |
Redis 5:
redis-cli --cluster import 集群服务器IP:PORT --cluster-from 外部Redis node-IP:PORT -- cluster-copy --cluster-replace
1 2 | redis - cli -- cluster import 集群服务器 IP : PORT -- cluster - from 外部 Redis node - IP : PORT -- cluster - copy -- cluster - replace |
范例:
[root@redis-node1 ~]#cat redis_test.sh #!/bin/bash # NUM=1000 #PASS=123456 for i in `seq $NUM`;do redis-cli -h 127.0.0.1 -a "$PASS" set key${i} v${i} echo "key${i}:v${i} 写入完成" done echo "$NUM个key写入到Redis完成" [root@redis-node1 ~]#bash redis_test.sh [root@redis-node2 ~]#redis-cli --cluster import 10.0.0.18:6379 --cluster-from 10.0.0.8:6379 --cluster-replace [root@redis-node5 ~]#redis-cli GET key1 "v1" [root@redis-node5 ~]#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [ root @ redis - node1 ~ ] #cat redis_test.sh #!/bin/bash # NUM = 1000 #PASS=123456 for i in ` seq $ NUM ` ; do redis - cli - h 127.0.0.1 - a "$PASS" set key $ { i } v $ { i } echo "key${i}:v${i} 写入完成" done echo "$NUM个key写入到Redis完成" [ root @ redis - node1 ~ ] #bash redis_test.sh [ root @ redis - node2 ~ ] #redis-cli --cluster import 10.0.0.18:6379 --cluster-from 10.0.0.8:6379 --cluster-replace [ root @ redis - node5 ~ ] #redis-cli GET key1 "v1" [ root @ redis - node5 ~ ] # |