Java客户端可以';t连接到本地主机上运行的Redis Sentinel
我在本地主机上安装了3个Redis Server和3个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 /
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之后,这一行对我来说很好。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论-