redis集群数据迁移
redis集群数据备份迁移方案
n 迁移环境描述及分析
当前我们面临的数据迁移环境是:集群->集群。
源集群:
源集群为6节点,3主3备
主 |
备 |
192.168.112.33:8001 |
192.168.112.33:8004-8006 |
192.168.112.33:8002 |
无 |
192.168.112.33:8003 |
无 |
值得注意的是:所有的槽位都分配在192.168.112.33:8001节点上,这样更方便我们迁移。
目标集群:
也是6节点,3主3备
主 |
备 |
192.168.112.33:6001 |
192.168.112.34:6002 |
192.168.112.33:6005 |
192.168.112.33:6000 |
192.168.112.33:6004 |
192.168.112.34:6003 |
n 选择合适的迁移方法
1. 使用shell脚本+redis命令
2. 使用dump.rdb或appendonly.aof文件
第一种适用于数据量少,只迁移部分数据的情况。第二种适用于我们当下的情况。
n 迁移步骤
前期准备:
1) 停掉所有节点(先备后主),然后删除所有节点下的appendonly.aof和dump.rdb文件,再动所有主节点,停掉所有节点(有密码的话,最好先不要用密码)
2) 确定目标库所有节点appendonly为yes,将所有槽位分配到一个主节点
3) 停掉拥有所有槽位的那个节点,等待appendonly.aof文件
停业务迁移:
4) 停业务,此时可以同步对所有应用修改redis配置(钉钉,管理门户,搜索引擎)
5) 源库手动触发bgrewriteaof 源端(2分钟)
6) 复制发送备份appendonly.aof 源端,目标端(5分钟)
7) 启动目标节点 目标端(5分钟)
8) reshared槽位,启动备节点,设置密码 目标端(5分钟)
恢复应用:
9) 启动所有应用,并验证
n 迁移测试实施
以下是迁移步骤的整个实施过程:
目标端停集群(先备后主):
清除appendonly.aof和dump.rdb
启动所有主节点
转移槽位到192.168.112.36:6004节点
./redis-trib.rb reshard --from bdd63e1f522d78eb1bb2574b2461a7302e14944a --to 1d204c88a14a76dc30abb05025135f7e850f2a5d --slots 5461 --yes 192.168.112.36:6004
./redis-trib.rb reshard --from be5b41880afac9c41b09e0d4e3be1ce1eb00959a --to 1d204c88a14a76dc30abb05025135f7e850f2a5d --slots 5462 --yes 192.168.112.36:6004
改配置文件,并停掉节点
原端集群,停业务备份数据
copy文件appendonly.aof到目标库分配了所有槽位的那个节点指定的appendonly.aof路径下,并启动节点。
再重新分配槽位,使槽位平均分配到各主节点。
然后启动所有的备节点,并设置密码,
redis-cli -c -h 192.168.112.33 -p 6000 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.33 -p 6000 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.33 -p 6000 config rewrite
redis-cli -c -h 192.168.112.33 -p 6001 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.33 -p 6001 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.33 -p 6001 config rewrite
redis-cli -c -h 192.168.112.34 -p 6002 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.34 -p 6002 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.34 -p 6002 config rewrite
redis-cli -c -h 192.168.112.34 -p 6003 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.34 -p 6003 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.34 -p 6003 config rewrite
redis-cli -c -h 192.168.112.36 -p 6004 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.36 -p 6004 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.36 -p 6004 config rewrite
redis-cli -c -h 192.168.112.36 -p 6005 config set masterauth Woread#2018
redis-cli -c -h 192.168.112.36 -p 6005 config set requirepass Woread#2018
redis-cli -c -h 192.168.112.36 -p 6005 config rewrite
redis集群迁移就到此完成了。