【Redis集群学习】Windows10部署Redis集群
搭建 Redis 集群
需要准备 redis5 及以上版本,否则报错 Unrecognized option or bad number of args for: '--cluster'
下载链接:https://github.com/tporadowski/redis/releases/download/v5.0.14.1/Redis-x64-5.0.14.1.zip
其他版本:Releases · tporadowski/redis
准备配置文件
| 文件名 | port | appendonly | cluster-enabled | cluster-config-file | cluster-node-timeout |
|---|---|---|---|---|---|
redis-6380.windows.conf |
6380 | yes | yes | nodes-6380.conf | 15000 |
redis-6381.windows.conf |
6381 | yes | yes | nodes-6381.conf | 15000 |
redis-6382.windows.conf |
6382 | yes | yes | nodes-6382.conf | 15000 |
启动redis
redis-server.exe redis-6380.windows.conf
redis-server.exe redis-6381.windows.conf
redis-server.exe redis-6382.windows.conf
redis-6380

redis-6381

redis-6382

创建redis集群
redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 --cluster-replicas 0

集群连接
随意选一个节点连接便可进入集群
redis-cli.exe -c -p 6380
查看集群节点状态
cluster nodes

集群测试
读写测试
set测试

如上图所示,执行 set 命令前在 6380节点 ,执行 set 命令时转到了 6382 节点, get 获取 value 时在 6382节点 获取

再次测试如上图所示。
get测试
现已知 mykey 在 6382节点 , mykey1 在 6380节点 , 测试从 6380节点 获取 mykey

测试结果如上图所示。
可知在通过key获取value时,集群会计算出key所在的实例,并从该实例下获取数据。
key应在的槽位计算测试
计算槽位
cluster keyslot <key>
测试用例:
key:test
value:1
计算test将放置的槽位
#计算槽位
127.0.0.1:6382> cluster keyslot test
(integer) 6918
#集群中无test
127.0.0.1:6382> get test
-> Redirected to slot [6918] located at 127.0.0.1:6381
(nil)
#插入数据
127.0.0.1:6381> set test 1
OK
127.0.0.1:6381> get test
"1"
127.0.0.1:6381>
上述测试可以看出:固定的key的落位是确定的,且在get不存在的key时,也会先计算,再去固定槽位查找
从节点测试
重新搭建集群
| 文件名 | port | appendonly | cluster-enabled | cluster-config-file | cluster-node-timeout |
|---|---|---|---|---|---|
redis-6380.windows.conf |
6380 | yes | yes | nodes-6380.conf | 15000 |
redis-6381.windows.conf |
6381 | yes | yes | nodes-6381.conf | 15000 |
redis-6382.windows.conf |
6382 | yes | yes | nodes-6382.conf | 15000 |
redis-6383.windows.conf |
6383 | yes | yes | nodes-6383.conf | 15000 |
redis-6384.windows.conf |
6384 | yes | yes | nodes-6384.conf | 15000 |
redis-6385.windows.conf |
6385 | yes | yes | nodes-6385.conf | 15000 |
创建集群,每个master分配一个slave
redis-cli --cluster create --replicas 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1


set测试

get测试

6381也正常

故障迁移测试
将有数据的6381节点挂掉,再次测试能否get到数据
D:\environment\Redis-Cluster\Redis-x64-5.0.14.1>redis-cli.exe -c -p 6381
127.0.0.1:6381> shutdown
not connected>

由图可知:6384代替6381成为了主节点
get数据测试

测试正常。在6381上的数据没有因为6381挂掉而无法访问。
重新启动6381并查看集群信息

可以看到6384依旧是主节点,且数据依旧在6384上。而重新启动后的6381成为了6384的从节点
此时挂掉6384

会发现关闭失败。那直接杀掉进程呢

可以看到6381又成为了主节点
但此时如果把6381也杀掉,就会只剩下两主两从,而且数据也不在了:0 keys


浙公网安备 33010602011771号