如何在集群模式下运行 docker redis?

Don*_*mmy 3 java redis docker redis-cluster

我使用以下命令启动了我的 redis docker 容器:

docker run --privileged=true -p 6379:6379 --name TestRedis -d redis
Run Code Online (Sandbox Code Playgroud)

当我尝试在集群模式下从 Spring Redis 使用它时,出现错误:

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
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能使其以集群方式运行?

Mas*_*ise 5

当您在运行时运行 redis Docker 映像时,它会根据其 Dockerfile 和内置配置启动,该配置没有打开集群。Chris Tanner 向您指出的存储库使用相同的基本映像,但添加了用于激活集群的配置。但是,您需要克隆该存储库并构建映像,然后才能运行它。存储库在自述文件中对如何构建和运行它有很好的说明,尽管 docker run 出于某种原因遗漏了图像名称。克隆 repo,cd 到其中,然后执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

这将使集群运行,您可以在端口 7000 上将您的客户端指向它。


Ana*_*ain 5

我认为你可以在 dockerfile 中添加一个启动脚本(shell 脚本)并在 CMD 命令上调用它,这将使用一些 redis.conf 文件启动 redis。在此 redis.conf 中,您可以提及自定义配置,如下所示

端口7000

启用集群 是

集群配置文件nodes.conf

集群节点超时 5000

仅追加 是

这将使用上述配置启动您的 redis 实例