尝试为本地开发准备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 sentinel的文件: 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文件,上面描述的一切都会像一个魔咒一样工作,所有这些都会发生在Windows10上,如果有关系的话
有人能给我一个提示我的设置有什么问题吗?我准备提供任何额外的信息
暂无答案!
目前还没有任何答案,快来回答吧!