Java客户端可以';t连接到本地主机上运行的Redis Sentinel

Java客户端可以';t连接到本地主机上运行的Redis Sentinel,java,redis,jedis,redis-sentinel,redis-server,Java,Redis,Jedis,Redis Sentinel,Redis Server,我在本地主机上安装了3个Redis Server和3个Redis Sentinel实例。服务器在以下位置运行: 127.0.0.1:6379 // Master 127.0.0.1:6380 // Slave 127.0.0.1:6381 // Slave 127.0.0.1:5000 127.0.0.1:5001 127.0.0.1:5002 哨兵们的目标是: 127.0.0.1:6379 // Master 127.0.0.1:6380 // Slave 127.0.0.1:6381 /

我在本地主机上安装了3个Redis Server和3个Redis Sentinel实例。服务器在以下位置运行:

127.0.0.1:6379 // Master
127.0.0.1:6380 // Slave
127.0.0.1:6381 // Slave
127.0.0.1:5000
127.0.0.1:5001
127.0.0.1:5002
哨兵们的目标是:

127.0.0.1:6379 // Master
127.0.0.1:6380 // Slave
127.0.0.1:6381 // Slave
127.0.0.1:5000
127.0.0.1:5001
127.0.0.1:5002
我有一个(Java)客户端,它尝试连接到一个Sentinel并在redis server中设置密钥:

// import statements

public class RedisPush {

    private static final String MASTER_NAME = "mymaster";
    private static final String PASSWORD = "foobared";
    private static final Set sentinels;
    static {
        sentinels = new HashSet();
        sentinels.add("127.0.0.1:5000");
        sentinels.add("127.0.0.1:5001");
        sentinels.add("127.0.0.1:5002");
    }

    public static void pushToRedis() {

        Jedis jedis = null;

        try {
            JedisSentinelPool pool = new JedisSentinelPool(MASTER_NAME, sentinels);
            System.out.println("Fetching connection from pool.");
            jedis = pool.getResource();
            jedis.auth(PASSWORD);
            Socket socket = jedis.getClient().getSocket();

            System.out.println("Connected to " + socket.getRemoteSocketAddress());
            int i = 0;
            while (true) {
                jedis.set("sentinel_key" + i, "value" + i);
                System.out.println(i);
                i++;
                Thread.sleep(1000);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if(jedis != null)
                jedis.close();
        }

    }

    public static void main(String[] args) throws Exception {

        while(true) {

            pushToRedis();
            Thread.sleep(1000);
        }
    }
}
最初,我的sentinel配置如下(例如,在端口
5000
上运行的第一个sentinel):

如果我尝试运行我的(Java)客户端,我会得到以下错误:

Nov 23, 2018 1:52:57 AM redis.clients.jedis.JedisSentinelPool initSentinels
INFO: Trying to find master from available Sentinels...
Nov 23, 2018 1:52:57 AM redis.clients.jedis.JedisSentinelPool initSentinels
WARNING: Cannot get master address from sentinel running @ 192.168.0.102:5001. Reason: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused (Connection refused). Trying next one.
Nov 23, 2018 1:52:57 AM redis.clients.jedis.JedisSentinelPool initSentinels
WARNING: Cannot get master address from sentinel running @ 192.168.0.102:5000. Reason: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused (Connection refused). Trying next one.
Nov 23, 2018 1:52:57 AM redis.clients.jedis.JedisSentinelPool initSentinels
WARNING: Cannot get master address from sentinel running @ 192.168.0.102:5002. Reason: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused (Connection refused). Trying next one.
redis.clients.jedis.exceptions.JedisConnectionException: All sentinels down, cannot determine where is mymaster master is running...
    at redis.clients.jedis.JedisSentinelPool.initSentinels(JedisSentinelPool.java:180)
    at redis.clients.jedis.JedisSentinelPool.<init>(JedisSentinelPool.java:95)
    at redis.clients.jedis.JedisSentinelPool.<init>(JedisSentinelPool.java:82)
    at redis.clients.jedis.JedisSentinelPool.<init>(JedisSentinelPool.java:70)
    at redis.clients.jedis.JedisSentinelPool.<init>(JedisSentinelPool.java:44)
    at RedisPush.pushToRedis(RedisPush.java:29)
    at RedisPush.main(RedisPush.java:61)
客户工作得很好。我不明白为什么

另外,如果在
sentinel.conf
文件中未设置
requirepass
,并且在
sentinel.conf
文件中注释了
bind
,则只有
保护模式
将为
yes
,以避免除
localhost
之外的任何客户端连接到sentinel。在我的第一个sentinel配置中,我使用了
bind
命令,但它仍然不起作用

为什么注释掉
绑定到
并显式地将
保护模式设置为
no
有效


顺便说一句,我也试过让
绑定127.0.0.1
保护模式no
都不起作用。

我遇到了一个类似的问题,绝地武士抛出了同样的错误,这与


为了在mac上解决这个问题,我做了
sudo ifconfig lo0 alias 127.0.1.1
然后将我的sentinel.conf更改为
bind127.0.1.1
然后更新了我的yaml for spring数据以连接到该ip

sentinel.nodes: 127.0.1.1:5000, 127.0.1.1:5002, 127.0.1.1:5003

绝地武士不支持雷迪斯哨兵。用莴苣代替,它有更好的池管理。
而且在springboot上也得到了很好的支持。

sudo-ifconfig-lo0-alias 127.0.1.1-解决了我的问题hostandport.setLocalhost(“127.0.0.1”);在addin之后,这一行对我来说很好。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论-