Como executar docker redis em Modo de aglomerado?

comecei o meu contentor redis docker com:

docker run --privileged=true -p 6379:6379 --name TestRedis -d redis

quando tento usá-lo do Spring Redis no modo de agrupamento, recebo o erro:

Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR This instance has cluster support disabled
at redis.clients.jedis.Protocol.processError(Protocol.java:127)
at redis.clients.jedis.Protocol.process(Protocol.java:161)
at redis.clients.jedis.Protocol.read(Protocol.java:215)
at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
at redis.clients.jedis.Connection.getRawObjectMultiBulkReply(Connection.java:285)
at redis.clients.jedis.Connection.getObjectMultiBulkReply(Connection.java:291)
at redis.clients.jedis.Jedis.clusterSlots(Jedis.java:3376)
at redis.clients.jedis.JedisClusterInfoCache.discoverClusterNodesAndSlots(JedisClusterInfoCache.java:54)
at redis.clients.jedis.JedisClusterConnectionHandler.initializeSlotsCache(JedisClusterConnectionHandler.java:39)
at redis.clients.jedis.JedisClusterConnectionHandler.<init>(JedisClusterConnectionHandler.java:17)
at redis.clients.jedis.JedisSlotBasedConnectionHandler.<init>(JedisSlotBasedConnectionHandler.java:20)
at redis.clients.jedis.JedisSlotBasedConnectionHandler.<init>(JedisSlotBasedConnectionHandler.java:15)
at redis.clients.jedis.BinaryJedisCluster.<init>(BinaryJedisCluster.java:41)
at redis.clients.jedis.JedisCluster.<init>(JedisCluster.java:83)
at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createCluster(JedisConnectionFactory.java:306)
at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createCluster(JedisConnectionFactory.java:280)
at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.afterPropertiesSet(JedisConnectionFactory.java:241)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 110 common frames omitted
O que preciso de fazer para que funcione tão bem?

Author: Don Rhummy, 2018-03-31

2 answers

Quando você apenas executa a imagem do Docker redis como você está fazendo, ela começa de acordo com o seu Dockerfile e a configuração embutida, que não tem clustering ligado. O repositório para o qual o Chris Tanner o indicou usa a mesma imagem de base, mas adiciona a configuração para activar o agrupamento. No entanto, você vai precisar clonar esse repositório e construir a imagem, então você pode executá-lo. O repositório tem boas instruções no readme para como construí-lo e executá-lo, embora o docker run deixa de fora o nome da imagem por alguma razão. Clone o repo, cd nele, e faça isso:

docker build -t testredis/redis-cluster .
docker run -i -t -p 7000:7000 -p 7001:7001 -p 7002:7002 -p 7003:7003 -p 7004:7004 -p 7005:7005 -p 7006:7006 -p 7007:7007 testredis/redis-cluster
Que terá o conjunto a funcionar, e pode indicar ao seu cliente a porta 7000.
 3
Author: Masonoise, 2018-03-31 03:08:12

Acho que você pode adicionar um programa de inicialização ('script' de consola) no ficheiro do 'dockerfile' e chamá-lo no comando CMD, que irá começar a refazer com algum 'redis'.ficheiro conf. Neste redis.conf pode mencionar a configuração personalizada como se segue

Porto 7000

Cluster-enabled yes

Nós de Ficheiros Cluster-config.conf

Cluster-node-timeout 5000

Apendonly SIM

Isto irá iniciar a sua instância redis com a configuração mencionada

 2
Author: Anand Jain, 2018-06-05 10:37:44