前言
redis5.0.0之前操作redis集群用的是ruby写的脚本redis-trib.rb,这样带来的弊端就是需要安装ruby,gems环境,官方拉取的docker镜像里是没有redis-trib.rb等ruby环境的,需要自己安装,在国内网络环境下还是比较费时复杂的,也不容易成功,而且最后制作的docker镜像也比较大。再者安装的ruby、redis扩展版本不对,也会导致操作集群时,报各种各样的错误。 最重要的硬伤是redis-trib.rb不能操作带密码的redis集群,虽然github上有人在redis-trib.rb脚本基础上已经加了密码支持。但对于move_slots的迁移卡槽相关的操作,我试了还是没加。可以查看以下的提交记录:
Redis-Cluster: Add support to auth in redis-trib.rb #4288
redis5.0.0之后的redis-cli可以直接操作redis集群,可以支持带密码操作,可以说带来了很大的方便。但是在redis4.0.7版本之前迁移卡槽本来就是不支持密码auth参数的,以下命令中的[AUTH password]是redis4.0.7版本才支持。
Options
COPY – Do not remove the key from the local instance.
REPLACE – Replace existing key on the remote instance.
KEYS – If the key argument is an empty string, the command will instead migrate all the keys that follow the KEYS option (see the above section for more info).
AUTH – Authenticate with the given password to the remote instance.
COPY and REPLACE are available only in 3.0 and above. KEYS is available starting with Redis 3.0.6. AUTH is available starting with Redis 4.0.7.
[root@liabio ~]# echo yes | redis-cli --cluster create 192.168.155.117:6379 192.168.155.91:6379 192.168.155.112:6379 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 3 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): >>> 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 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
添加slave1
[root@liabio ~]# redis-cli --cluster add-node 192.168.155.103:6379 192.168.155.117:6379 --cluster-slave --cluster-master-id f070ddf68e39896af42dc08251199cda7c8b9b92 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.155.103:6379 to cluster 192.168.155.117:6379
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.155.103:6379 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 192.168.155.117:6379.
[OK] New node added correctly.
添加slave2
[root@liabio ~]# redis-cli --cluster add-node 192.168.155.102:6379 192.168.155.117:6379 --cluster-slave --cluster-master-id c4ab027656d55b800cc54063493bca198a5e1385 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.155.102:6379 to cluster 192.168.155.117:6379
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 1121a45980f1d5964f0010b331aeb514ff9dedb8 192.168.155.103:6379
slots: (0 slots) slave
replicates f070ddf68e39896af42dc08251199cda7c8b9b92
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.155.102:6379 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 192.168.155.91:6379.
[OK] New node added correctly.
添加slave3
[root@liabio ~]# redis-cli --cluster add-node 192.168.155.78:6379 192.168.155.117:6379 --cluster-slave --cluster-master-id 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.155.78:6379 to cluster 192.168.155.117:6379
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 1121a45980f1d5964f0010b331aeb514ff9dedb8 192.168.155.103:6379
slots: (0 slots) slave
replicates f070ddf68e39896af42dc08251199cda7c8b9b92
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
S: 941108cab0121fc840f909da080d92770dbbdee1 192.168.155.102:6379
slots: (0 slots) slave
replicates c4ab027656d55b800cc54063493bca198a5e1385
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.155.78:6379 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 192.168.155.112:6379.
[OK] New node added correctly.
[root@liabio ~]#
[root@liabio ~]# redis-cli -c -h 192.168.155.112 -p 6379 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.155.112:6379>
192.168.155.112:6379> HMSET hash1 name1 "redis sasa"
-> Redirected to slot [4414] located at 192.168.155.117:6379
OK
192.168.155.117:6379> LPUSH list1 aa
-> Redirected to slot [7141] located at 192.168.155.91:6379
(integer) 1
192.168.155.91:6379> zadd zset1 1 aa
-> Redirected to slot [4341] located at 192.168.155.117:6379
(integer) 1
192.168.155.117:6379> set a b
-> Redirected to slot [15495] located at 192.168.155.112:6379
OK
192.168.155.112:6379> SADD set1 redis
-> Redirected to slot [3037] located at 192.168.155.117:6379
(integer) 1
192.168.155.117:6379>
[root@liabio ~]#
[root@liabio ~]# redis-cli -a test123 --cluster check 192.168.155.117:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.155.117:6379 (f070ddf6...) -> 3 keys | 5461 slots | 1 slaves.
192.168.155.112:6379 (8d1e7150...) -> 1 keys | 5461 slots | 1 slaves.
192.168.155.91:6379 (c4ab0276...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 5 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 1121a45980f1d5964f0010b331aeb514ff9dedb8 192.168.155.103:6379
slots: (0 slots) slave
replicates f070ddf68e39896af42dc08251199cda7c8b9b92
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 0a6188b6bf590c928a2f7b1b0de9aeb206977d72 192.168.155.78:6379
slots: (0 slots) slave
replicates 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650
S: 941108cab0121fc840f909da080d92770dbbdee1 192.168.155.102:6379
slots: (0 slots) slave
replicates c4ab027656d55b800cc54063493bca198a5e1385
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
扩容为五主五从集群 添加新的master1
[root@liabio ~]# redis-cli --cluster add-node 192.168.155.108:6379 192.168.155.117:6379 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.155.108:6379 to cluster 192.168.155.117:6379
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 1121a45980f1d5964f0010b331aeb514ff9dedb8 192.168.155.103:6379
slots: (0 slots) slave
replicates f070ddf68e39896af42dc08251199cda7c8b9b92
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 0a6188b6bf590c928a2f7b1b0de9aeb206977d72 192.168.155.78:6379
slots: (0 slots) slave
replicates 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650
S: 941108cab0121fc840f909da080d92770dbbdee1 192.168.155.102:6379
slots: (0 slots) slave
replicates c4ab027656d55b800cc54063493bca198a5e1385
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.155.108:6379 to make it join the cluster.
[OK] New node added correctly.
添加新的master2
[root@liabio ~]# redis-cli --cluster add-node 192.168.155.111:6379 192.168.155.117:6379 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.155.111:6379 to cluster 192.168.155.117:6379
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 1121a45980f1d5964f0010b331aeb514ff9dedb8 192.168.155.103:6379
slots: (0 slots) slave
replicates f070ddf68e39896af42dc08251199cda7c8b9b92
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 0a6188b6bf590c928a2f7b1b0de9aeb206977d72 192.168.155.78:6379
slots: (0 slots) slave
replicates 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650
S: 941108cab0121fc840f909da080d92770dbbdee1 192.168.155.102:6379
slots: (0 slots) slave
replicates c4ab027656d55b800cc54063493bca198a5e1385
M: 78ad24899c7a7b1c0cad99e2c1afab82e8c98ec2 192.168.155.108:6379
slots: (0 slots) master
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.155.111:6379 to make it join the cluster.
[OK] New node added correctly.
[root@liabio ~]# redis-cli -a test123 --cluster check 192.168.155.117:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.155.117:6379 (f070ddf6...) -> 3 keys | 5461 slots | 1 slaves.
192.168.155.111:6379 (1b3b59ff...) -> 0 keys | 0 slots | 0 slaves.
192.168.155.112:6379 (8d1e7150...) -> 1 keys | 5461 slots | 1 slaves.
192.168.155.108:6379 (78ad2489...) -> 0 keys | 0 slots | 0 slaves.
192.168.155.91:6379 (c4ab0276...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 5 keys in 5 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 1b3b59ff2b7ecf0ae67568104501450b94aa9ac0 192.168.155.111:6379
slots: (0 slots) master
S: 1121a45980f1d5964f0010b331aeb514ff9dedb8 192.168.155.103:6379
slots: (0 slots) slave
replicates f070ddf68e39896af42dc08251199cda7c8b9b92
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 0a6188b6bf590c928a2f7b1b0de9aeb206977d72 192.168.155.78:6379
slots: (0 slots) slave
replicates 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650
S: 941108cab0121fc840f909da080d92770dbbdee1 192.168.155.102:6379
slots: (0 slots) slave
replicates c4ab027656d55b800cc54063493bca198a5e1385
M: 78ad24899c7a7b1c0cad99e2c1afab82e8c98ec2 192.168.155.108:6379
slots: (0 slots) master
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
添加新的slave1
[root@liabio ~]# redis-cli --cluster add-node 192.168.155.114:6379 192.168.155.117:6379 --cluster-slave --cluster-master-id 78ad24899c7a7b1c0cad99e2c1afab82e8c98ec2 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.155.114:6379 to cluster 192.168.155.117:6379
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 1b3b59ff2b7ecf0ae67568104501450b94aa9ac0 192.168.155.111:6379
slots: (0 slots) master
S: 1121a45980f1d5964f0010b331aeb514ff9dedb8 192.168.155.103:6379
slots: (0 slots) slave
replicates f070ddf68e39896af42dc08251199cda7c8b9b92
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 0a6188b6bf590c928a2f7b1b0de9aeb206977d72 192.168.155.78:6379
slots: (0 slots) slave
replicates 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650
S: 941108cab0121fc840f909da080d92770dbbdee1 192.168.155.102:6379
slots: (0 slots) slave
replicates c4ab027656d55b800cc54063493bca198a5e1385
M: 78ad24899c7a7b1c0cad99e2c1afab82e8c98ec2 192.168.155.108:6379
slots: (0 slots) master
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.155.114:6379 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 192.168.155.108:6379.
[OK] New node added correctly.
添加新的slave2
[root@liabio ~]# redis-cli --cluster add-node 192.168.155.73:6379 192.168.155.117:6379 --cluster-slave --cluster-master-id 1b3b59ff2b7ecf0ae67568104501450b94aa9ac0 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.155.73:6379 to cluster 192.168.155.117:6379
>>> Performing Cluster Check (using node 192.168.155.117:6379)
M: f070ddf68e39896af42dc08251199cda7c8b9b92 192.168.155.117:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 941108cab0121fc840f909da080d92770dbbdee1 192.168.155.102:6379
slots: (0 slots) slave
replicates c4ab027656d55b800cc54063493bca198a5e1385
M: c4ab027656d55b800cc54063493bca198a5e1385 192.168.155.91:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 1121a45980f1d5964f0010b331aeb514ff9dedb8 192.168.155.103:6379
slots: (0 slots) slave
replicates f070ddf68e39896af42dc08251199cda7c8b9b92
M: 1b3b59ff2b7ecf0ae67568104501450b94aa9ac0 192.168.155.111:6379
slots: (0 slots) master
M: 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650 192.168.155.112:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 0a6188b6bf590c928a2f7b1b0de9aeb206977d72 192.168.155.78:6379
slots: (0 slots) slave
replicates 8d1e71502b9f1c29b3170eb9bf1391ae5aa50650
S: 9dc374d48b730432f726147828cde001ea5a7dc4 192.168.155.114:6379
slots: (0 slots) slave
replicates 78ad24899c7a7b1c0cad99e2c1afab82e8c98ec2
M: 78ad24899c7a7b1c0cad99e2c1afab82e8c98ec2 192.168.155.108:6379
slots: (0 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.155.73:6379 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 192.168.155.111:6379.
[OK] New node added correctly.
迁移卡槽
进行使用rebalance子命令进行卡槽分配:
[root@liabio ~]# redis-cli --cluster rebalance --cluster-use-empty-masters --cluster-pipeline 100 192.168.155.117:6379 -a test123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 192.168.155.117:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Rebalancing across 5 nodes. Total weight = 5.00
Moving 2186 slots from 192.168.155.91:6379 to 192.168.155.111:6379
##########################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
Moving 1092 slots from 192.168.155.112:6379 to 192.168.155.111:6379
####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
Moving 1093 slots from 192.168.155.112:6379 to 192.168.155.108:6379
#####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
Moving 2185 slots from 192.168.155.117:6379 to 192.168.155.108:6379
#########################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
[root@liabio ~]#