2017-10-11 7 views
0

Je tente de configurer Redis en mode cluster et lorsque j'essaie de me connecter à Redis à l'aide de l'API Jedis, je vois ci-dessous l'exception.Problème avec le mode de cluster d'installation Redis dans le docker (Windows 7)

Exception in thread "main" redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException: No reachable node in cluster 
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnection(JedisSlotBasedConnectionHandler.java:57) 
    at redis.clients.jedis.JedisSlotBasedConnectionHandler.getConnectionFromSlot(JedisSlotBasedConnectionHandler.java:74) 
    at redis.clients.jedis.JedisClusterCommand.runWithRetries(JedisClusterCommand.java:116) 
    at redis.clients.jedis.JedisClusterCommand.run(JedisClusterCommand.java:31) 
    at redis.clients.jedis.JedisCluster.set(JedisCluster.java:103) 
    at com.redis.main.Main.main(Main.java:18) 

J'utilise ci-dessous commande pour démarrer la Redis

$ docker run -v /d/redis.conf:/usr/bin/redis.conf --name myredis redis redis-server /usr/bin/redis.conf 

Et mon simple, redis.conf ressemble ci-dessous.

port 6379 
cluster-enabled yes 
cluster-config-file nodes.conf 
cluster-node-timeout 5000 
appendonly yes 

Ci-dessous sont les journaux de démarrage redis.

$ docker run -v /d/redis.conf:/usr/bin/redis.conf --name myredis redis redis-se 
rver /usr/bin/redis.conf 
1:C 11 Oct 18:06:01.657 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 
1:C 11 Oct 18:06:01.663 # Redis version=4.0.2, bits=64, commit=00000000, modifi 
d=0, pid=1, just started 
1:C 11 Oct 18:06:01.664 # Configuration loaded 
1:M 11 Oct 18:06:01.685 * Running mode=standalone, port=6379. 
1:M 11 Oct 18:06:01.690 # WARNING: The TCP backlog setting of 511 cannot be enf 
rced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 
1:M 11 Oct 18:06:01.692 # Server initialized 
1:M 11 Oct 18:06:01.696 # WARNING overcommit_memory is set to 0! Background sav 
may fail under low memory condition. To fix this issue add 'vm.overcommit_memo 
y = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overco 
mit_memory=1' for this to take effect. 
1:M 11 Oct 18:06:01.697 # WARNING you have Transparent Huge Pages (THP) support 
enabled in your kernel. This will create latency and memory usage issues with R 
dis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent 
hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain 
he setting after a reboot. Redis must be restarted after THP is disabled. 
1:M 11 Oct 18:06:01.700 * Ready to accept connections 

Et ci-dessous est le programme java simple.

public class Main { 
    public static void main(String[] args) { 
     Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); 
     jedisClusterNodes.add(new HostAndPort("127.0.0.1", 6379)); 
     JedisCluster jc = new JedisCluster(jedisClusterNodes); 

     //Jedis jc = new Jedis("192.168.99.100"); 

     jc.set("prime", "1 is prime"); 
     String keyVal = jc.get("prime"); 
     System.out.println(keyVal); 
    } 
} 

Pas vraiment sûr de ce qui ne va pas ici et apprécierons toute aide à ce sujet.

Répondre

1

Vous devez exposer le port lors du démarrage du conteneur Redis

docker run -v /d/redis.conf:/usr/bin/redis.conf -p 6379:6379 --name myredis redis redis-server /usr/bin/redis.conf 
+0

Maintenant, je vois cette exception « Exception dans le thread "principal" redis.clients.jedis.exceptions.JedisDataException: ERR Cette instance a le soutien du cluster désactivé " – leo11