所以这或多或少是一个理论问题。
假设我们有一个由3个节点组成的多节点Swarm设置。现在我们已经安装了一个Python服务,它使用Celery和Redis作为消息代理。因此,基本上还有一个3节点副本redis服务作为应用程序的一部分。
既然这个Redis服务充当了消息代理,如果我们只使用服务名称在我的Python应用程序中进行DNS解析,那么docker swarm或我的应用程序如何知道哪个Redis节点会有我放在队列中的任务?
我的意思是,路由网格只会将特定服务的流量引导到任何一个拥有该服务的节点上。现在,我的Python应用程序异步启动了一个任务,并将其放入redis队列中。因此,一旦完成,我希望我的应用程序查询redis以获得结果。但是它怎么知道哪个节点有结果呢。
这有点像棘手的会议吗?如果有什么不清楚的地方,请告诉我。
我们通常处理这个用例时,redis sentinel位于您的redis集群前面,以启用自动故障转移,并将芹菜指向作为代理的redissentinel(这在芹菜4.2.0中相当简单)。如果您对在集群中进行和处理手动redis故障转移感到满意,那么您只需将芹菜指向redis服务即可。