【问题标题】:Jedis cannot find master using sentinel when sentinel required password当哨兵需要密码时,Jedis 找不到使用哨兵的大师
【发布时间】:2022-01-04 04:32:06
【问题描述】:

最近我使用 redis 并使用 jedis。在 redis 版本 6 中,我们可以为哨兵设置所需的密码模式。我有 3 个工作哨兵,可以通过 redis-cli 连接和验证。但是使用 jedis,我无法连接到哨兵并出现此警告:

无法从运行@127.0.0.1:26379 的哨兵获取主地址。 原因:redis.clients.jedis.exceptions.JedisDataException: NOAUTH 需要身份验证.. 尝试下一个。

无法从运行@127.0.0.1:36379 的哨兵获取主地址。 原因:redis.clients.jedis.exceptions.JedisDataException: NOAUTH 需要身份验证.. 尝试下一个。

无法从运行@127.0.0.1:16379 的哨兵获取主地址。 原因:redis.clients.jedis.exceptions.JedisDataException: NOAUTH 需要身份验证.. 尝试下一个。

还有这个错误:

所有哨兵下线,无法确定 mymaster 主人在哪里 正在运行...

这是我的代码:

        GenericObjectPoolConfig pc = new GenericObjectPoolConfig();
        pc.setMinIdle(2);
        pc.setMaxIdle(5);
        pc.setMaxTotal(5);
        JedisSentinelPool pool = new JedisSentinelPool(MASTER_NAME, sentinels, pc, 1000*10, PASSWORD);
        Jedis jedis = null;
        try {
            printer("Fetching connection from pool");
            jedis = pool.getResource();
            printer("Authenticating...");
            jedis.auth(PASSWORD);
            printer("auth complete...");
            Socket socket = jedis.getClient().getSocket();
            printer("Connected to " + socket.getRemoteSocketAddress());
            printer("Writing...");
            jedis.set("java-key-999", "java-value-999");
            printer("Reading...");
            printer(jedis.get("java-key-999"));
        } catch (JedisException e) {
            printer("Connection error of some sort!");
            printer(e.getMessage());
            Thread.sleep(2 * 1000);
        } finally {
            if (jedis != null) {
                jedis.close();
            }
        }

请帮忙,感谢您的阅读支持

【问题讨论】:

    标签: redis jedis redis-sentinel


    【解决方案1】:

    您的哨兵节点受密码保护。您必须提供 AUTH 参数才能连接到哨兵节点。

    更新:

    您提供的密码作为主节点的密码。为避免哨兵节点出现 NOAUTH 错误,您必须提供哨兵节点的密码。寻找任何接受哨兵节点密码的构造函数。该参数通常命名为sentinelPassword。有几个这样的构造函数,其中最简单的是

    JedisSentinelPool(String masterName, Set<String> sentinels, String password, String sentinelPassword)
    

    欢迎您寻找其他最适合您的构造函数。

    【讨论】:

    • 如您所见,我已经在初始化池连接函数中提供了密码。我不知道为什么它确实有效。请提供代码。
    • @AlanNguyen 详细解答
    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多