redis的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台redis服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了cluster模式,实现的redis的分布式存储,也就是说每台redis节点上存储不同的内容。
作者:飞鱼240 链接:https://www.jianshu.com/p/ca071e57c887 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
算法结果就是槽的取值范围
动态增加节点的时候涉及到hash槽的分配
判断一个是集群中的节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点就是挂掉了,所以搭建redis集群时建议节点数最好为奇数,搭建集群至少需要三个主节点,三个从节点,至少需要6个节点。
rub环境在redis 6的版本中不需要单独安装
#基本修改配置
port
pidfile
dbfilename
daemonize yes (守护进程,yes则不会占窗口)
# 在配置文件开启集群的配置
appendonly yes #aof持久化
appendfilename "appendonly-6379.aof"
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
redis-cli --cluster create --cluster-replicas 1 192.168.37.129:6379 192.168.37.129:6380 192.168.37.129:6381 192.168.37.129:6389 192.168.37.129:6390 192.168.37.129:6391
其中1代表主机有一个从机
无中心化
redis-cli -c -p 6379
./src/redis-cli --cluster check 192.168.37.129:6379
./src/redis-cli --cluster add-node 192.168.37.129:6400 192.168.37.129:6379
./src/redis-cli --cluster reshard 192.168.37.129:6379
## 第一个问题分配多少个
## 第二个问题分配给谁(唯一id号)
## 第三个问题分配hash槽来自于哪
spring
redis:
cluster:
nodes: 192.168.37.129:6379,192.168.37.129:6380,192.168.37.129:6381,192.168.37.129:6389,192.168.37.129:6390,192.168.37.129:6391
主节点
从节点
#增加配置文件
@Configuration
@EnableRedisHttpSession
public class RedisSessionManager {
}
#增加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>