目录
springboot单redis切换到redis集群无故出错解决
如果需要配置文件详解请看我的文章
redis&&哨兵集群部署 docker单机模拟-六节点_年关的博客-CSDN博客
redis集群脚本
这个集群是三主三从的集群,不需要哨兵,因为集群模式自带了分片和故障转移,脚本不重要,重要的是脚本生成的配置文件,使用这个配置文件生成redis就可以,在最后手动建立集群就可以了
难点讲解
1、除了服务端口外,集群之间进行通信也需要一个总线端口,用来检测服务状态和故障转移,一般是服务端口+10000的端口,注意防火墙放行
2、集群模式和哨兵模式的区别,集群自己集成了状态检测和故障转移,就不用哨兵了,集群数据是分片存储的,这个还是百度吧,懒得打字了。
3、集群只有超过一半的节点在线才能继续切换主从,三个节点允许掉线一个节点,五个才允许掉线两个节点,并且只有主节点参与投票。从节点不参与,所以要允许两个同时掉线并切换至少需要五个主节点,以及各自一个从节点。
4、建立集群的语句,主节点是按照顺序来排列的,如果都是主机的话,从节点也是一一对应的,但如果从节点和某个主节点在同一台机子上,redis在建立集群的时候就不会把他们建立主从关系,而是将这个从节点作为其他节点的从节点。
#批量部署
for port in $(seq 8001 8010); \
do \
mkdir -p /root/data/redis${port}/data
mkdir -p /root/data/redis${port}/conf
touch /root/data/redis${port}/conf/redis.conf
cat << EOF >/root/data/redis${port}/conf/redis.conf
#这里面是配置文件
#如果想要指定IP访问权限请打开保护模式并指定bind
#只允许ip访问
#bind 0.0.0.0
#关闭保护模式
protected-mode no
#服务端口
port ${port}
#日志
logfile "/data/redis${port}.log"
#pid
pidfile "/data/redis${port}.pid"
#关闭集群模式才能手动加入主从
cluster-enabled yes
#节点配置文件
cluster-config-file nodes${port}.conf
#宕机主备切换时间
cluster-node-timeout 5000
#本机ip
cluster-announce-ip 192.168.5.242
#集群映射端口
cluster-announce-port ${port}
#集群通信端口
cluster-announce-bus-port 1${port}
# 开启AOF
appendonly yes
#配置本机密码
requirepass 123456
#从节点配置主节点ip端口密码
#slaveof 192.168.5.242 8001
#配置主节点数据
#replicaof 192.168.5.242 8001
#配置同步验证密码主从或者集群用
masterauth 123456
EOF
chmod 777 -f /root/data/redis${port}/*
docker run -p ${port}:${port} -p 1${port}:1${port} --name redis-${port} \
-v /root/data/redis${port}/data:/data \
-v /root/data/redis${port}/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf; \
done
echo "请手动进入节点“docker exec -it redis-8001 bash”,执行建成集群命令“redis-cli -a 123456 --cluster create 192.168.5.242:8001 192.168.5.242:8002 192.168.5.242:8003 192.168.5.242:8004 192.168.5.242:8005 192.168.5.242:8006 --cluster-replicas 1 \n
yes”"
springboot单redis切换到redis集群无故出错解决
配置文件更改
单节点
spring.redis.host=192.168.1.1 spring.redis.port=6379
多节点的话改成
spring.redis.cluster.nodes=192.168.1.1:6739,192.168.1.1:6739,192.168.1.1:6739,192.168.1.1:6739,192.168.1.1:6739,192.168.1.1:6739,192.168.1.1:6739,192.168.1.1:6739
把单节点的注释掉加上这个多节点的就可以了,其他配置超时,故障转移重定向什么的也要改,不过不写也行,记得密码别写错了
大概率是依赖问题
引入依赖,版本选择适合自己的。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>版本</version>
</dependency>
重点,如果配置正确任然无法连接到io.xxxx.xxxx [redisURI []]这个错误的话,你需要在redis启动配置中排除一个冲突的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
改成
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency>