redis集群搭建过程遇到的坑

在上一篇博文中搭建好了redis集群,但是仍然存在很多问题

上一篇:k8s下搭建redis集群

1、springboot服务连接

集群配置好了,spring服务应该怎么连接呢?单点和集群的连接配置写法是不一样的

单点

spring:
  redis:
    host: ${BTC_REDIS_HOST}
    port: ${BTC_REDIS_PORT}
    password: ${BTC_REDIS_PASSWORD}
    timeout: 0
    database: 2
    jedis:
      pool:
        max-idle: 100
        max-wait: 30000

集群

spring:
  redis:
    password: foobared
    cluster:
      nodes:
        redis-cluster-0.redis-cluster-service.tool-beta:6379,
        redis-cluster-1.redis-cluster-service.tool-beta:6379,
        redis-cluster-2.redis-cluster-service.tool-beta:6379,
        redis-cluster-3.redis-cluster-service.tool-beta:6379,
        redis-cluster-4.redis-cluster-service.tool-beta:6379,
        redis-cluster-5.redis-cluster-service.tool-beta:6379

2、集群节点重建后,spring服务连接异常

集群节点重建,在服务器上观察cluster nodes,发现节点ip已经变化,且集群已经更新了节点ip信息,看上去没啥问题,也能够通过命令行方式读写

但是spring服务疯狂报错,检查配置无问题

jedis报错:could not get a resource from the pool

redisson直接报连接ip超时,奇怪的是redisson里面报错的ip不是任何一个redis节点的ip

进入redis-cluster-0的持久卷,查看node.conf,发现其它节点的ip正确,而标记myself的节点ip是重建前的ip !

经过反复实验,确认了:

redis集群在k8上部署时存在bug,redis某个节点重建时,唯独不会更新它自己的node.conf的ip地址!

查阅github的issue,找到了答案:

Redis cluster returns IP address of master which not exist #4289

在这里插入图片描述
这个issue中提到,在redis的启动参数中显式指定ip地址可以解决这个问题

在这里插入图片描述
尝试按照这个配置,重新建立redis集群,再查看node.conf文件,发现能够正确更新自己的ip了,spring服务也能够正常连接了。

3、spring服务只能写入,无法读(真正问题:redis集群主从节点复制异常)

随后出现的问题是,从redis中读取的内容均为null

在命令行里操作依然完全正常,且发现redis中已经有服务写入的信息

使用远程调试尝试定位,在docker的启动参数中添加

          env:
            - name: JAVA_TOOL_OPTIONS
              value: >-
                -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

注:这是jdk8的写法,jdk9以上需要使用另一种写法

然后开通对应service的5005端口,映射到宿主机

调试结果:redisTemplate能够写入,但无法获取任何key!

我直接问号,这是什么毛病

看看redis节点有没有什么信息,突然发现节点在不停的报错

MASTER aborted replication with an error: NOAUTH Authentication required

似乎是主从节点的复制过程中,认证出现了问题

查阅资料确认:主从节点在设置了密码的情况下,需要配置masterauth

修改完成后重建集群,这次服务可以获取key了!

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值