【问题标题】:Working with Redis queue inside a multi node Python celery application using docker swarm使用 docker swarm 在多节点 Python celery 应用程序中使用 Redis 队列
【发布时间】:2019-01-04 04:07:12
【问题描述】:

所以这是一个或多或少的理论问题。

假设我们有一个由 3 个节点组成的多节点 Swarm 设置。现在我们已经安装了一个 Python 服务,它使用 Celery 和 Redis 作为消息代理。所以基本上还有一个 3 节点副本 redis 服务作为应用程序的一部分。

现在,既然这个 Redis 服务充当消息代理,如果我们只使用服务名称在我的 Python 应用程序中进行 DNS 解析,那么 docker swarm 或我的应用程序如何知道哪个 redis 节点将拥有我放置的任务队列 ?

我的意思是路由网格只会将流量引导到具有该服务的任何一个节点上的特定服务。现在我的 Python 应用程序已经异步启动了一个任务,并将其放在 redis 队列中。因此,一旦完成,我希望我的应用程序查询 redis 以获取结果。但是它怎么知道哪个节点有结果呢。

这有点像粘性会话吗?如果有什么不清楚的地方请告诉我。

【问题讨论】:

  • 三个redis节点是否集群?
  • 是的,就像我们使用 Docker swarm 一样,我们创建了一个 3 节点 swarm 集群,然后我们运行了 redis 服务,比如说 2 个副本

标签: redis celery docker-swarm


【解决方案1】:

我们通常使用位于您的 redis 集群前面的 redis sentinel 来处理此用例,以启用自动故障转移,并将 celery 指向作为代理的 redis-sentinel (it's fairly simply in celery 4.2.0)。如果您对在集群中执行和处理手动 redis 故障转移感到满意,那么您只需将 celery 指向 redis 服务。

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2020-07-31
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多