[toc]
0. get ,set
#登录redis
./redis-cli -c -h 172.22.0.11 -p 6379
#set 值
172.22.0.11:6379> set a 1
-> Redirected to slot [15495] located at 172.22.0.13:6379
OK
172.22.0.13:6379> set b 2
-> Redirected to slot [3300] located at 172.22.0.11:6379
OK
172.22.0.11:6379> set c 3
-> Redirected to slot [7365] located at 172.22.0.12:6379
OK
#get 值
172.22.0.12:6379> get a
-> Redirected to slot [15495] located at 172.22.0.13:6379
"1"
172.22.0.13:6379> get b
-> Redirected to slot [3300] located at 172.22.0.11:6379
"2"
172.22.0.11:6379> get c
-> Redirected to slot [7365] located at 172.22.0.12:6379
"3"
172.22.0.12:6379>
?Redirected to slot
redis集群有16384个槽(slot)redis在用key进行定位的时候,使用CRC16进行校验
1、普通心跳数据包携带节点的完整配置,该配置可以用旧配置以幂等方式替换,以便更新旧配置。这意味着它们包含原始形式的节点的槽配置,16k的槽配置需要使用2k内存空间,但是使用65k槽将使用8k的内存空间。
2、同时,由于其他设计折衷,Redis集群不可能扩展到超过1000个节点。
因此,16k是比较合适的,可以确保每个主设备有足够的槽,最大为1000个。redis的node配置信息通过位图存储传输的,传输前有一个压缩过程,压缩比跟槽个数和节点数有很大关系(because when N is small the bitmap would have slots/N bits set that is a large percentage of bits set.)【槽数量/节点数】当这个N越大,压缩比就越小。
1. 主备切换
查看节点信息
CLUSTER nodes
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 slave c87c0343330eaea324e322717093a7472c7a1c61 0 1546923718000 4 connected
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 master - 0 1546923716000 2 connected 5461-10922
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 myself,master - 0 1546923717000 1 connected 0-5460
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546923718335 5 connected
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546923718000 6 connected
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546923719338 3 connected 10923-16383
14 是11 的slave节点
查看docker 容器ip
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
/redis3 - 172.22.0.13
/redis6 - 172.22.0.16
/redis1 - 172.22.0.11
/redis8 - 172.22.0.18
/redis7 - 172.22.0.17
/redis5 - 172.22.0.15
/redis2 - 172.22.0.12
/redis4 - 172.22.0.14
停掉 11 也就是redis1再次查看节点信息
./redis-cli -c -h 172.22.0.12 -p 6379
172.22.0.12:6379> CLUSTER nodes
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546923942632 6 connected
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546923943635 5 connected
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546923943000 3 connected 10923-16383
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 myself,master - 0 1546923942000 2 connected 5461-10922
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 master,fail - 1546923895028 1546923893000 1 connected
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 master - 0 1546923944636 7 connected 0-5460
14已经变成了master节点
恢复redis1
root@cluster01 /d/redis# docker start redis1
redis1
root@cluster01 /d/redis# ./redis-cli -c -h 172.22.0.12 -p 6379
172.22.0.12:6379> CLUSTER nodes
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546924063000 6 connected
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546924064888 5 connected
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546924063000 3 connected 10923-16383
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 myself,master - 0 1546924064000 2 connected 5461-10922
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546924063885 7 connected
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 master - 0 1546924065891 7 connected 0-5460
可以看到11 已经添加到集群中是14的slave节点
2. 添加slave节点
./redis-cli --cluster add-node 172.22.0.17:6379 172.22.0.14:6379 --cluster-slave
>>> Adding node 172.22.0.17:6379 to cluster 172.22.0.14:6379
>>> Performing Cluster Check (using node 172.22.0.14:6379)
M: c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379
slots: (0 slots) slave
replicates c263c43e4f4c7b77baa9cad7befcd7d95b59e604
S: ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379
slots: (0 slots) slave
replicates 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98
S: 4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379
slots: (0 slots) slave
replicates de6458c693e2e11014615f22a92b89ead28eb8c5
M: de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12: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.
Automatically selected master 172.22.0.14:6379
>>> Send CLUSTER MEET to node 172.22.0.17:6379 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 172.22.0.14:6379.
查看信息
./redis-cli -c -h 172.22.0.14 -p 6379 cluster nodes
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546924566341 7 connected
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 myself,master - 0 1546924565000 7 connected 0-5460
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546924564000 5 connected
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546924566000 6 connected
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546924565338 3 connected 10923-16383
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 master - 0 1546924566000 2 connected 5461-10922
a4b707e94fd3171139d98b5c3c0135469b31b839 172.22.0.17:6379@16379 slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546924567342 7 connected
172.22.0.14 已经有了11和17两个slave 节点
4. 删除slave 节点
root@cluster01 /d/redis# ./redis-cli --cluster del-node 172.22.0.17:6379 a4b707e94fd3171139d98b5c3c0135469b31b839
>>> Removing node a4b707e94fd3171139d98b5c3c0135469b31b839 from cluster 172.22.0.17:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
root@cluster01 /d/redis# ./redis-cli -h 172.22.0.11 -p 6379 cluster nodes
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546924757000 5 connected
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 master - 0 1546924758421 2 connected 5461-10922
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546924759423 3 connected 10923-16383
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 master - 0 1546924755000 7 connected 0-5460
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 myself,slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546924757000 1 connected
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546924758000 6 connected
3. 添加master节点
./redis-cli --cluster add-node 172.22.0.17:6379 172.22.0.11:6379
172.22.0.11:6379> CLUSTER nodes
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546925514000 5 connected
3350e6ab03c9cd677fa8e615b8e349ddecf3b84e 172.22.0.17:6379@16379 master - 0 1546925511000 0 connected
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 master - 0 1546925512000 2 connected 5461-10922
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546925515180 3 connected 10923-16383
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 master - 0 1546925514177 7 connected 0-5460
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 myself,slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546925512000 1 connected
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546925512000 6 connected
172.22.0.11:6379>
172.22.0.17:6379@16379 master - 0 1546925511000 0 connected 未分配槽位不能存储数据 ,重新分槽位
./redis-cli --cluster reshard 172.22.0.17:6379
>>> Performing Cluster Check (using node 172.22.0.17:6379)
M: 3350e6ab03c9cd677fa8e615b8e349ddecf3b84e 172.22.0.17:6379
slots: (0 slots) master
S: c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379
slots: (0 slots) slave
replicates c263c43e4f4c7b77baa9cad7befcd7d95b59e604
M: c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379
slots: (0 slots) slave
replicates 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98
M: 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379
slots: (0 slots) slave
replicates de6458c693e2e11014615f22a92b89ead28eb8c5
M: de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379
slots:[10923-16383] (5461 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.
How many slots do you want to move (from 1 to 16384)? 500
What is the receiving node ID? 3350e6ab03c9cd677fa8e615b8e349ddecf3b84e
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: c263c43e4f4c7b77baa9cad7befcd7d95b59e604
Source node #2: 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98
Source node #3: de6458c693e2e11014615f22a92b89ead28eb8c5
Source node #4: done
查看节点信息, 17 已经有了槽位
./redis-cli -h 172.22.0.17
172.22.0.17:6379> CLUSTER nodes
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546925898256 7 connected
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 master - 0 1546925898000 7 connected 166-5460
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546925897000 2 connected
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 master - 0 1546925899259 2 connected 5628-10922
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546925898000 3 connected
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546925897000 3 connected 11089-16383
3350e6ab03c9cd677fa8e615b8e349ddecf3b84e 172.22.0.17:6379@16379 myself,master - 0 1546925897000 8 connected 0-165 5461-5627 10923-11088
给新节点17 添加slave节点
./redis-cli --cluster add-node 172.22.0.18:6379 172.22.0.17:6379 --cluster-slave
查看节点信息
./redis-cli -h 172.22.0.17
172.22.0.17:6379> CLUSTER nodes
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546926012502 7 connected
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 master - 0 1546926012000 7 connected 166-5460
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546926013000 2 connected
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 master - 0 1546926013504 2 connected 5628-10922
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546926011000 3 connected
90126f31e8167a428bbe7ca1e120b82e1a5bd3fb 172.22.0.18:6379@16379 slave 3350e6ab03c9cd677fa8e615b8e349ddecf3b84e 0 1546926013000 8 connected
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546926014505 3 connected 11089-16383
3350e6ab03c9cd677fa8e615b8e349ddecf3b84e 172.22.0.17:6379@16379 myself,master - 0 1546926010000 8 connected 0-165 5461-5627 10923-11088
5. 删除master节点
删除子节点
./redis-cli --cluster del-node 172.22.0.18:6379 90126f31e8167a428bbe7ca1e120b82e1a5bd3fb
删除master节点
移动数据到别的节点
./redis-cli --cluster reshard 172.22.0.17:6379
>>> Performing Cluster Check (using node 172.22.0.17:6379)
M: 3350e6ab03c9cd677fa8e615b8e349ddecf3b84e 172.22.0.17:6379
slots:[0-165],[5461-5627],[10923-11088] (499 slots) master
S: c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379
slots: (0 slots) slave
replicates c263c43e4f4c7b77baa9cad7befcd7d95b59e604
M: c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379
slots:[166-5460] (5295 slots) master
1 additional replica(s)
S: ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379
slots: (0 slots) slave
replicates 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98
M: 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379
slots:[5628-10922] (5295 slots) master
1 additional replica(s)
S: 4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379
slots: (0 slots) slave
replicates de6458c693e2e11014615f22a92b89ead28eb8c5
M: de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379
slots:[11089-16383] (5295 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.
How many slots do you want to move (from 1 to 16384)? 500
What is the receiving node ID? c263c43e4f4c7b77baa9cad7befcd7d95b59e604
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: 3350e6ab03c9cd677fa8e615b8e349ddecf3b84e
Source node #2: done
Ready to move 500 slots.
Source nodes:
M: 3350e6ab03c9cd677fa8e615b8e349ddecf3b84e 172.22.0.17:6379
slots:[0-165],[5461-5627],[10923-11088] (499 slots) master
Destination node:
M: c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379
slots:[166-5460] (5295 slots) master
1 additional replica(s)
Resharding plan:
查看节点信息
CLUSTER nodes
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546926434000 9 connected
3350e6ab03c9cd677fa8e615b8e349ddecf3b84e 172.22.0.17:6379@16379 master - 0 1546926434000 8 connected
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 myself,master - 0 1546926432000 9 connected 0-5627 10923-11088
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546926435646 5 connected
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546926433000 6 connected
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546926434645 3 connected 11089-16383
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 master - 0 1546926433642 2 connected 5628-10922
17的槽位已空
删除节点
./redis-cli --cluster del-node 172.22.0.17:6379 3350e6ab03c9cd677fa8e615b8e349ddecf3b84e
>>> Removing node 3350e6ab03c9cd677fa8e615b8e349ddecf3b84e from cluster 172.22.0.17:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
查看节点
./redis-cli -c -h 172.22.0.14
172.22.0.14:6379> CLUSTER nodes
c87c0343330eaea324e322717093a7472c7a1c61 172.22.0.11:6379@16379 slave c263c43e4f4c7b77baa9cad7befcd7d95b59e604 0 1546926533000 9 connected
c263c43e4f4c7b77baa9cad7befcd7d95b59e604 172.22.0.14:6379@16379 myself,master - 0 1546926534000 9 connected 0-5627 10923-11088
ec06c901c1c52140856c9cb6450bb07e601a6dff 172.22.0.15:6379@16379 slave 91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 0 1546926536876 5 connected
4f9f32bcc9f26da82d04e7f110a994f9f989e390 172.22.0.16:6379@16379 slave de6458c693e2e11014615f22a92b89ead28eb8c5 0 1546926535875 6 connected
de6458c693e2e11014615f22a92b89ead28eb8c5 172.22.0.13:6379@16379 master - 0 1546926536000 3 connected 11089-16383
91870f32b9697c8176c4a9f73c2ea2b1a0b5ac98 172.22.0.12:6379@16379 master - 0 1546926534000 2 connected 5628-10922
已经被删除
网友评论