大部分应用在使用Redis的时候可能前期只使用一个实例,随着数据量和访问量增大,单实例逐渐捉襟见肘,就需要考虑上Cluster方案了,本文提供了一个方案,就是把单实例的数据完整的迁移到Cluster上。
方案步骤
1)获取原单实例节点D的持久化AOF文件
2)新准备三个节点A,B,C,建立集群,目前集群为空
3)把节点B,C上的slots,全部分配给A
4)把1)中获取的AOF文件SCP到A上
5)重启A节点,把数据全部加载到内存
6)把A节点上的slots再均匀分配给B,C
7)新准备A1,B1,C1,分别作为A,B,C的slave加入到集群
8)验证数据的完整性和集群状态
方案实战
目前我们的实战是这样的,单节点为 10.10.10.118:6379 ,数据量为 500多万
Cluster准备了3主3从,前期A,B,C构成一个空的集群,A1,B1,C1待数据分配好后,再加入集群
A 10.10.10.126:7000 -> A1 10.10.10.126:7003
B 10.10.10.126:7001 -> B1 10.10.10.126:7004
C 10.10.10.126:7002 -> C1 10.10.10.126:7005
管理集群,我们仍然使用官方提供的工具redis-trib.rb,具体redis-trib.rb如何使用,请参考Cluster实战的那篇文章。
1)持久化文件
在单实例中假如同时开启了RDB和AOF,还是只要AOF文件就可以了,因为当AOF和RDB同时存在的时候,Redis还是会先加载AOF文件的。
进入 10.10.10.118:6379 我们执行命令
[root@TEST01 bin]# ./redis-cli
127.0.0.1:6379>
127.0.0.1:6379> dbsize
(integer) 5160702
127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started
然后到配置AOF所在的目录,这样就会获取了最新的AOF文件。注意红色数字是key的数量,等数据全部倒入集群后,要验证这个数量是否正确。
127.0.0.1:9004> BGSAVE
操作注意
1,此时查看key数量
# Keyspace
db0:keys=400594,expires=102024,avg_ttl=1579970001,
2,查看所有连接情况,确保没有连接,
127.0.0.1:9004> client list
2)创建集群
2.1)启动A,B,C节点
/data/apps/redis-cluster/7000/bin/redis-server /data/apps/redis-cluster/7000/redis.conf
/data/apps/redis-cluster/7001/bin/redis-server /data/apps/redis-cluster/7001/redis.conf
/data/apps/redis-cluster/7002/bin/redis-server /data/apps/redis-cluster/7002/redis.conf
2.2)3个Master节点构成集群
[root@test1 bin]# ./redis-trib.rb create 10.10.10.126:7000 10.10.10.126:7001 10.10.10.126:7002
>>> Creating cluster
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
10.10.10.126:7000
10.10.10.126:7001
10.10.10.126:7002
M: 6a85d385b2720fd463eccaf720dc12f495a1baa3 10.10.10.126:7000
slots:0-5460 (5461 slots) master
M: bbb2b1b060b440a56d07a16ee7f87f9379767d61 10.10.10.126:7001
slots:5461-10922 (5462 slots) master
M: e7005711bc55315caaecbac2774f3c7d87a13c7a 10.10.10.126:7002
slots:10923-16383 (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.
>>> Performing Cluster Check (using node 10.10.10.126:7000)
M: 6a85d385b2720fd463eccaf720dc12f495a1baa3 10.10.10.126:7000
slots:0-5460 (5461 slots) master
M: bbb2b1b060b440a56d07a16ee7f87f9379767d61 10.10.10.126:7001
slots:5461-10922 (5462 slots) ma