为什么要用Redis的集群模式
- 主从模式master容量有限
- 主从模式数据同步延迟
Redis集群模式特点
- 每个节点知道彼此之间的关系,也会知道自己的角色,当然他们也会知道自己存在与一个集群环境中,他们彼此之间可以交互和通信,ping pong。那么这些关系都会保存到某个配置文件中,每个节点都有,这个我们在搭建的时候会做配置的。
- 客户端要和集群建立连接的话,只需要和其中一个建立关系就行。
- 某个节点挂了,也是通过超过半数的节点来进行的检测,客观下线后主从切换,和我们之前在哨兵模式中提到的是一个道理。
- Redis中存在很多的插槽,又可以称之为槽节点,用于存储数据
Redis的槽介绍
- slot槽一共有16384个
- hash(key)%16384 进入不同的槽节点
实践出真知
创建6台机器
主机名 | ip |
---|---|
RC1 | 192.168.31.249 |
RC2 | 192.168.31.23 |
RC3 | 192.168.31.16 |
RC4 | 192.168.31.73 |
RC5 | 192.168.31.22 |
RC6 | 192.168.31.169 |
配置文件修改
# 开启集群模式
cluster-enabled yes
# 每一个节点需要有一个配置文件,需要6份。
# 每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集
cluster-config-file nodes-6379.conf
# 超时时间,超时则认为master宕机,随后主备切换
cluster-node-timeout 5000
# 开启AOF
appendonly yes
创建集群
redis-cli -a `密码` --cluster create 192.168.31.249:6379 192.168.31.23:6379 192.168.31.16:6379 192.168.31.73:6379 192.168.31.22:6379 192.168.31.169:6379 --cluster-replicas 1
会出现下面的提示
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.31.22:6379 to 192.168.31.249:6379
Adding replica 192.168.31.169:6379 to 192.168.31.23:6379
Adding replica 192.168.31.73:6379 to 192.168.31.16:6379
M: a19497f734405bdf486814e764872ac16b5c9503 192.168.31.249:6379
slots:[0-5460] (5461 slots) master
M: c5cf40380bf424572005aa4bfe859cb6d89e0ef0 192.168.31.23:6379
slots:[5461-10922] (5462 slots) master
M: edcd876ae5be1fd5639ebcbf2803887c375ef0dd 192.168.31.16:6379
slots:[10923-16383] (5461 slots) master
S: 78eb393fde92f2332b2b5879ae43fa0a5a8965e3 192.168.31.73:6379
replicates edcd876ae5be1fd5639ebcbf2803887c375ef0dd
S: 9d3b8d4ea4cd6d50ed2d4d49a72be9aef0947826 192.168.31.22:6379
replicates a19497f734405bdf486814e764872ac16b5c9503
S: e940cbfe11311937b77526dd18510ad89b81f5e2 192.168.31.169:6379
replicates c5cf40380bf424572005aa4bfe859cb6d89e0ef0
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
..................................................................................................................................................................^C
解决办法开启16379 端口
firewall-cmd --zone=public --add-port=16379/tcp --permanent
firewall-cmd --reload
检查集群状态
redis-cli --cluster check 192.168.31.249:6379
SpringBoot配置Redis集群
redis:
password: 密码
cluster:
nodes: 192.168.31.249:6379,192.168.31.23:6379,192.168.31.16:6379,192.168.31.73:6379,192.168.31.22:6379,192.168.31.169:6379