首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带哨兵在码头上的红色HA

带哨兵在码头上的红色HA
EN

Stack Overflow用户
提问于 2020-12-22 19:33:33
回答 1查看 1.3K关注 0票数 1

我在码头上和Redis HA一起挣扎了一个星期。我不太相信我的意图是否行得通。文档是可以理解的,但是有许多与文档不相对应的例子。

好吧,我想做的是建立一个Redis集群,包括一个主服务器、两个副本和三个哨兵。这是在192.168.1.10上托管的。我想通过一个来自192.168.1.11的应用程序访问集群。RedisCluster在没有哨兵的情况下正常工作。复制工作正常。

启动哨兵时,在所有3个redis容器上都会得到以下日志条目: redis-0、redis-1和redis-2。

代码语言:javascript
复制
1:S 22 Dec 2020 18:43:38.349 * Connecting to MASTER 172.20.0.2:6379
1:S 22 Dec 2020 18:43:38.350 * MASTER <-> REPLICA sync started
1:S 22 Dec 2020 18:43:38.350 * Non blocking connect for SYNC fired the event.
1:S 22 Dec 2020 18:43:38.350 * Master replied to PING, replication can continue...
1:S 22 Dec 2020 18:43:38.350 * Trying a partial resynchronization (request eac3aa540e767589e9673ae0ed844d985ed2abb2:1856).
1:S 22 Dec 2020 18:43:38.350 * Master is currently unable to PSYNC but should be in the future: -NOMASTERLINK Can't SYNC while not connected with my master

我试着遵循教程,但没有成功。和描述的行为相同。这些是我的码头命令

代码语言:javascript
复制
# Redis (with custom redis.conf will not work the replication) so i keep it simple this way.
docker run --name redis-0 -d --network redis -p 6379:6379 redis redis-server
docker run --name redis-1 -d --network redis -p 6380:6379 redis redis-server --slaveof redis-0 6379
docker run --name redis-2 -d --network redis -p 6381:6379 redis redis-server --slaveof redis-0 6379
# Sentinel
docker run -d --name sentinel-0 --network redis -v ${PWD}/sentinel-0:/etc/redis/  redis  redis-sentinel /etc/redis/sentinel.conf
docker run -d --name sentinel-1 --network redis -v ${PWD}/sentinel-1:/etc/redis/  redis  redis-sentinel /etc/redis/sentinel.conf
docker run -d --name sentinel-2 --network redis -v ${PWD}/sentinel-2:/etc/redis/  redis  redis-sentinel /etc/redis/sentinel.conf

这些是sentinel.conf

代码语言:javascript
复制
port 5000
# sentinel monitor <master-group-name> <ip> <port> <quorum>
sentinel monitor mymaster 172.20.0.2 6379 2
sentinel down-after-milliseconds mymaster 1000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

哨兵容器对sentinel.conf有写访问权.

这是我的iptables指令

代码语言:javascript
复制
# Redis
/usr/sbin/iptables -t nat -A PREROUTING -p tcp --dport 6379 -j DNAT --to-destination 172.20.0.2:6379
/usr/sbin/iptables -t nat -A PREROUTING -p tcp --dport 6380 -j DNAT --to-destination 172.20.0.3:6379
/usr/sbin/iptables -t nat -A PREROUTING -p tcp --dport 6381 -j DNAT --to-destination 172.20.0.4:6379

# Sentinel
/usr/sbin/iptables -t nat -A PREROUTING -p tcp --dport 26379 -j DNAT --to-destination 172.20.0.5:6379
/usr/sbin/iptables -t nat -A PREROUTING -p tcp --dport 26380 -j DNAT --to-destination 172.20.0.6:6379
/usr/sbin/iptables -t nat -A PREROUTING -p tcp --dport 26381 -j DNAT --to-destination 172.20.0.7:6379

我很清楚这些文件:

由于哨兵使用主信息输出信息自动检测副本,因此检测到的副本将无法到达,而且哨兵永远无法故障转移主副本,因为从系统的角度来看,没有好的副本,因此目前无法用哨兵监视与Docker一起部署的一组主实例和副本实例,除非您指示Docker映射端口1:1。 对于第一个问题,如果您想使用带有转发端口的Docker运行一组Sentinel实例(或任何其他重映射端口的NAT设置),您可以使用以下两个哨兵配置指令来强制哨兵宣布一组特定的IP和端口: 哨兵宣布-ip哨兵宣布-端口注意,码头有能力运行在主机网络模式(检查--net=host选项获得更多信息)。这应该不会产生任何问题,因为在此设置中没有对端口进行重新映射。

我只是不知道将公告-IP和端口放在哪里,以及它们的价值。还请注意,--net=host将不能工作,因为我在同一个主机上有3个容器:端口。

如何在码头环境中运行哨兵,为Redis HA服务?

谢谢你的帮助!

编辑:

我做了一个故障转移测试,结果如下(哨兵0、1和2的结果相同)

代码语言:javascript
复制
# docker exec -it sentinel-0 redis-cli -p 5000
127.0.0.1:5000> SENTINEL get-master-addr-by-name mymaster
1) "172.20.0.2"
2) "6379"
# docker stop redis-0
redis-0
# docker exec -it sentinel-0 redis-cli -p 5000
127.0.0.1:5000> SENTINEL get-master-addr-by-name mymaster
1) "172.20.0.2"
2) "6379"
EN

回答 1

Stack Overflow用户

发布于 2020-12-23 03:40:50

跟随你的Docker commandssentinel.conf,它对我是有效的。

代码语言:javascript
复制
1:S 23 Dec 2020 03:14:59.370 * Connecting to MASTER redis-0:6379
1:S 23 Dec 2020 03:14:59.371 * MASTER <-> REPLICA sync started
1:S 23 Dec 2020 03:14:59.371 * Non blocking connect for SYNC fired the event.
1:S 23 Dec 2020 03:14:59.371 * Master replied to PING, replication can continue...
1:S 23 Dec 2020 03:14:59.372 * Trying a partial resynchronization (request 5c52aa10610b365f29fec2968e095c5b49eb6136:43).
1:S 23 Dec 2020 03:14:59.373 * Full resync from master: 1f843162cf808a500a5d57392baf585f6e1679a3:0

也许你可以检查红-0日志,它是否接受复制‘询问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65414811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档