- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我们的环境中,我们使用 AWS 上的 RabbitMQ 和 Celery 在多个节点上并行运行任务。
最近我们将 RabbitMQ 变成了一个由 3 个节点组成的集群,配置了一个 ha 策略,并为所有 3 个节点的端口 5672 添加了一个 AWS 弹性负载均衡器 (ELB)。我们的 Celery worker 和客户端代码都使用 ELB DNS 作为代理 URL。
自该更改以来,我们注意到等待异步任务完成将引发异常 IOError: Socket closed
。
ELB 将在 60 秒后关闭所有空闲连接。我们的任务需要几个小时才能完成。
将 BROKER_HEARTBEAT 设置为低于 60 的值可解决工作端的连接中断。但是我们似乎找不到任何可以使客户端连接保持事件状态的设置。
这是使用 Celery 等待长时间运行任务的正确方法吗?
我们尚未测试的一种解决方法是调用 AsyncResult.wait()
方法,直到它成功结束。例如:
async_result = task.delay(params)
while True:
try:
async_result.wait()
break
except IOError:
pass
我们使用:
最佳答案
我相信您需要做的是延长 AWS ELB 的超时时间。正在发生的事情是连接在任务完成之前被关闭。您可以通过发出以下命令来完成此操作
elb-modify-lb-attributes myTestELB --connection-settings "idletimeout=3600" --headers
这会给您一个小时的时间来完成任务。参见 https://aws.amazon.com/blogs/aws/elb-idle-timeout-control/有关这方面的更多信息。
如果一个小时还不够,那么您将不得不禁用连接池。将这两个设置添加到您的 celery 配置中
BROKER_POOL_LIMIT = None
BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}
第二个会影响性能,因为它会增加一些开销。由于您有长时间运行的任务,这可能不是问题。第二个设置可能不是必需的,但我建议您使用负载均衡器。此设置将确保消息在接收过程中不会丢失。
另一种选择是将您的长任务也分解为更小的任务!这可能意味着更多的代码,但从长远来看可能是值得的。
关于python - Celery 与 AWS ELB 和 RabbitMQ 的连接中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41040257/
这似乎与子网/可用区有关,但我是使用 VPC 的新手,它让我望而却步。 专有网络:10.80.0.0/16 子网:10.80.1.0/24 (us-east-1b) 子网:10.80.2.0/24 (
我想向 ELB 后面的所有实例发送更新。我更喜欢发送更新而不是从实例端轮询。是否可以向 ELB 发送将广播到所有实例的消息? 最佳答案 不直接,不。 一种编程解决方法是查询 ELB API 以发现健康
(我试图了解 ELB 网络如何在 VPC 中工作,并发布此问题) 当我们向公共(public) ELB 添加两个子网时,aws elb create-load-balancer --load-bala
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 去年关闭。 Improve this
我目前将我的 Web 应用程序托管在 AWS 上,我使用两个 ELB 实例,一个用于对应用服务器的前端请求进行负载均衡,另一个用于对从应用服务器到 API 服务器的后端请求进行负载均衡,像这样(抱歉糟
对于我的堆栈,我需要自动检索 AWS 上负载均衡器的 dns,因为我删除/创建以更新我的堆栈和服务器,名称一直在变化,或者我需要能够自动检索 dns来 self 在 AWS 中的 ELB 谢谢 最佳答
有谁知道带 SSL 的 AWS ELB 在幕后是如何工作的?在我的 ELB 域名上运行 nslookup,我得到 4 个唯一的 IP 地址。如果我的 ELB 启用了 SSL,AWS 是否可以与其他启用
在亚马逊的“经典负载均衡器”上,您可以创建一个规则来将 HTTPS 连接转发到 HTTP,通过将证书上传到负载均衡器并让服务器只处理 http 来简化 SSL 和服务器配置。 我现在正在尝试使用 Am
免责声明: 本主题适用于 HTTP 流量(在 Linux 平台上)。对于以下问题,ELB 可能有一个很好的解决方案(每个人都价格合理)。但到目前为止我找不到任何东西。这就是为什么我需要专家的建议。 问
ELB:弹性负载均衡器 ALB:应用程序负载均衡器 我正在尝试将 aws 上的 elb/alb 映射到另一个 elb(例如: http://my-elb-domain.com ), elb/alb -
我知道 Apigee 可以将请求转发/负载均衡到目标服务器。但是各种云提供商都出售他们的负载均衡器,如果在我的后端应用程序中,我只是公开 API 并且我使用 apigee 边缘,为什么我需要这些负载均
我想知道是否可以使用 CF 堆栈未导出的现有 ELB 在新的 CFT 中引用并在生成的 CF 堆栈中使用。唯一的在线资源似乎是现有的 CFT 需要导出 ELB,以便新的 CFT 导入它。然而,新的 C
我通过使用 ELB、自动缩放、RDS 和 ELB 外部的一个 Node ec2 实例在 AWS 上创建了一个架构(希望它不会错)。现在我不明白,我可以如何在此架构上实现 SSL。 让我简要解释一下:
我在两个 Ubuntu 实例中使用 Tomcat,它们位于 Amazon Web Services 云中的 ELB(弹性负载均衡器)后面。每个 Tomcat 安装在同一个引擎中都有多个虚拟主机。 EL
我已经配置了一个带有 443 HTTPS 端口的 AWS ELB 来支持 Https 传入请求。但是,我想从 ELB 指向一个目标 EC2,它有一个在端口 80 上运行的 tomcat 服务器,没有任
我在使用 ELB 的 aws 上有一个主节点和两个辅助节点。阅读和写作的最佳实践是什么? 1)我是否创建一个包含所有节点的单个LB,主节点和次节点都在ELB中,让python(pymongo)处理排序
我们有一组 EC2 服务器的多个 SSL 证书(由于旧版限制)。我们有多个 ELB 指向该组,每个 ELB 终止特定证书的 SSL。我们现在想要转向自动扩展,而不是硬编码的 EC2 实例列表。单个自动
mod_pagespeed 重写了我的 css 链接 链接 href="/css/file.css"rel="样式表" 类似于: 链接 href="http://example.com/css/fil
在此正则表达式中,https://regex101.com/r/SzzJDE/7如何对 __utm.gif 进行分组 我有 \"(\S+)\s+\w+:\/\/([\w\-\.]*):\S+(\/\S
我有一个发布请求,它将触发服务器代码以在所有实例的内存中缓存数据。所以我需要通过nginx将此请求路由到所有实例。是否可以在 ELB 中配置它? 最佳答案 不,这在 ELB 中是不可能的。我建议要么使
我是一名优秀的程序员,十分优秀!