集群节点的槽分配信息
槽(slots)数据结构实际上是一个二进制数组,数组长度为2048个字节,16384个二进制位。Redis集群通过分片的方式来保存数据库中的键值对。集群的整个数据库被分为16384个槽,即数据库中的所有键都属于这16384个槽中的一个。集群中每个节点可以处理0~16384个槽。
Redis将每个键键名的有效部分使用CRC16算法计算出散列值,然后对16384取余,保证每个值都可以分配到16384个槽中,进而分配到指定的节点中处理。槽分配(即迁移),使用redis-cli进行操作。操作过程中会用到槽的索引(槽1~16384对应索引分别为0~16383)。
查看集群的槽信息
电脑重装系统,不得不使用另一台服务器上的伪集群演示,端口还是7001~7006。
主从信息如下:
[root@*** cluster]# ./redis-5.0.4/src/redis-cli -p 7001
127.0.0.1:7001> cluster nodes
17c67f03e8354f492fbd4a6be1f79a53c23e8507 192.168.0.111:7006@17006 slave d2a31afbd940004162e94c681cff06862a5af72c 0 1564320601278 6 connected
d2a31afbd940004162e94c681cff06862a5af72c 192.168.0.111:7005@17005 master - 0 1564320602280 3 connected 10923-16383
85d9276e71faf2a3bfe7c9041d920678c4082623 192.168.0.111:7004@17004 slave e4fee6a90d5b071ad514cd30f8d5d9a1c13947b3 0 1564320600000 5 connected
e4fee6a90d5b071ad514cd30f8d5d9a1c13947b3 192.168.0.111:7003@17003 master - 0 1564320600276 2 connected 5461-10922
38206edb37cf100e20085da0affaeced4ae42029 192.168.0.111:7001@17001 myself,master - 0 1564320597000 1 connected 0-5460
da006b8e1615f7d338d25bedfb7899eab79e42d2 192.168.0.111:7002@17002 slave 38206edb37cf100e20085da0affaeced4ae42029 0 1564320601000 4 connected
槽信息:
127.0.0.1:7001> cluster slots
1) 1) (integer) 10923
2) (integer) 16383
3) 1) "192.168.0.111"
2) (integer) 7005
3) "d2a31afbd940004162e94c681cff06862a5af72c"
4) 1) "192.168.0.111"
2) (integer) 7006
3) "17c67f03e8354f492fbd4a6be1f79a53c23e8507"
2) 1) (integer) 5461
2) (integer) 10922
3) 1) "192.168.0.111"
2) (integer) 7003
3) "e4fee6a90d5b071ad514cd30f8d5d9a1c13947b3"
4) 1) "192.168.0.111"
2) (integer) 7004
3) "85d9276e71faf2a3bfe7c9041d920678c4082623"
3) 1) (integer) 0
2) (integer) 5460
3) 1) "192.168.0.111"
2) (integer) 7001
3) "38206edb37cf100e20085da0affaeced4ae4