无法从本地计算机上的Java应用程序连接到哨兵

时间:2020-07-27 14:54:57

标签: docker redis docker-compose sentinel redis-sentinel

尝试为本地开发准备docker-compose文件,这将尽可能类似于prod设置。

这是我的docker-compose.yml

version: '3'

services:
  redis-master:
    image: redis:6.0.5
  redis-slave:
    image: redis:6.0.5
    depends_on:
      - redis-master
    command: redis-server --slaveof redis-master 6379
  redis-sentinel:
    build: redis-sentinel
    ports:
      - "26379:26379"
    environment:
      - SENTINEL_DOWN_AFTER=5000
      - SENTINEL_FAILOVER=5000
    depends_on:
      - redis-master
      - redis-slave

用于构建redis前哨的文件:

Dockerfile

FROM redis:6.0.5

ADD sentinel.conf /etc/redis/sentinel.conf
RUN chown redis:redis /etc/redis/sentinel.conf
ENV SENTINEL_QUORUM 2
ENV SENTINEL_DOWN_AFTER 5000
ENV SENTINEL_FAILOVER 10000
ENV SENTINEL_PORT 26379
ADD entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 26379

entrypoint.sh

#!/bin/sh

sed -i "s/\$SENTINEL_PORT/$SENTINEL_PORT/g" /etc/redis/sentinel.conf
sed -i "s/\$SENTINEL_QUORUM/$SENTINEL_QUORUM/g" /etc/redis/sentinel.conf
sed -i "s/\$SENTINEL_DOWN_AFTER/$SENTINEL_DOWN_AFTER/g" /etc/redis/sentinel.conf
sed -i "s/\$SENTINEL_FAILOVER/$SENTINEL_FAILOVER/g" /etc/redis/sentinel.conf

exec docker-entrypoint.sh redis-server /etc/redis/sentinel.conf --sentinel

sentinel.conf

protected-mode no
port 26379
dir /tmp
sentinel monitor mymaster redis-master 6379 $SENTINEL_QUORUM
sentinel down-after-milliseconds mymaster $SENTINEL_DOWN_AFTER
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster $SENTINEL_FAILOVER

调用docker-compose up后,我试图启动无法连接到localhost:26379的应用程序

堆栈跟踪:

Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to RedisURI [sentinels=[RedisURI [host='localhost', port=26379]], sentinelMasterId=mymaster]
    at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78)
    at io.lettuce.core.masterslave.MasterSlave.getConnection(MasterSlave.java:266)
    at io.lettuce.core.masterslave.MasterSlave.connect(MasterSlave.java:120)
    at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.masterReplicaConnection(StandaloneConnectionProvider.java:160)
    at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$0(StandaloneConnectionProvider.java:114)
    at java.base/java.util.Optional.map(Optional.java:265)
    at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:114)
    at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1197)
    ... 64 common frames omitted
Caused by: io.lettuce.core.RedisException: Cannot determine topology from RedisURI [sentinels=[RedisURI [host='localhost', port=26379]], sentinelMasterId=mymaster]
    at io.lettuce.core.masterslave.SentinelConnector.lambda$connectAsync$0(SentinelConnector.java:69)
    at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:118)
    at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1712)
    ...

如果我将我的应用程序添加到上述的docker-compose文件中,则所有内容都会像超级按钮一样工作 所有这一切都发生在Windows 10上

有人可以提示我我的设置有什么问题吗? 我准备提供任何其他信息

0 个答案:

没有答案