redis 集群 踩坑

场景: redis集群三主三从, jedis接入,  只配置三个主节点

问题: 服务更新部署,发现连不上redis集群.包connection refused.

排查:

  1. 首先确定redis节点是否存在问题, redis-cli在当前服务器没有安装,使用telnet ip port进行测试, 发现三个节点中部分节点存在问题, 不能连接.
  2. 找运维确认节点状态,表示之前节点故障, 主从自动替换.
  3. 服务重启前运行正常, 重启出现问题,无法回滚.

发现:

  1. redis集群自动主从替换,服务无感知, 和下线节点之间的连接会自动和新节点建立连接
  2. 服务重新启动,服务会重新和配置中的ip建立连接,此步骤出错

解决方案:

jedis集群在添加节点时, 并不验证节点的可用性,需要我们在初始化的时候,自行进行校验,于是在cluster添加节点前,使用redis包自带的Connection进行校验.

import redis.clients.jedis.Connection;

private boolean validateConnection(String host, int port) {
        Connection connection = new Connection(host, port);
        try {
            connection.connect();
        } catch (Exception e) {
            log.error("failed get connection with ip {}, port {}", host, port);
            return false;
        } finally {
            connection.close();
        }
        return true;
}

可建立连接的节点,添加到集群中.

发布了20 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u011248560/article/details/105069126
今日推荐