我有一个弹性的beanstalk工作者环境,在我最近的部署中已经过渡到健康状况“严重”。它给我的错误是:
sqsd在所有实例上都处于故障模式
如何修复此问题/获取有关此内容的更多信息?
答案 0 :(得分:0)
这几乎可以肯定是因为您的最新部署未通过运行状况检查。请参阅/var/log/aws-sqsd/default.log的内容(可以通过环境的“日志”部分找到)。这将为您提供更多信息,例如:
服务运行状况检查URL“http://localhost/”失败,http状态代码为“500”
答案 1 :(得分:0)
sqsd is in fault mode
错误可能有不同的原因,例如根据某些潜在问题,运行状况检查可能会失败,并显示http状态代码400
或500
。
要了解更多信息,可以ssh
进入工作程序实例(例如,EC2管理控制台>实例>实例上的RMB>连接),然后尝试使用http://localhost/
进行探测。 curl
。
在某些情况下,我们的工作人员环境收到了类似的sqsd is in fault mode
错误,status 400
。这是由于我们(Django)ALLOWED_HOSTS
中的settings.py
值不正确。
在另一个情况下,在尝试更新到最新的Amazon Linux平台版本之后,我们的工作环境中出现status 500
类似问题。请注意,我们的worker env运行了好几个月没有任何问题,并且我们没有修改应用程序版本,也没有修改环境配置。
失败的平台更新尝试的日志(aws-sqsd/default.log
)显示:
2018-10-19T09:06:52Z healthcheck-err: service healthcheck to URL "http://localhost/health/" failed with http status code "500"
而之前尝试更新失败的日志显示如下:
2018-10-19T08:38:43Z message: sent to http://localhost:80
有趣的是,根据AWS docs,工人甚至不应该使用健康检查网址(如果我理解正确的话……):
在单个实例或工作者层环境中,Elastic Beanstalk通过监视其Amazon EC2实例状态来确定实例的运行状况。在这些环境类型中,不能使用Elastic Load Balancing运行状况设置(包括HTTP运行状况检查URL)。 [我的重点]
奇怪的是,当时我们的工作环境是使用EB Web控制台配置的,部署策略是“使用附加批处理滚动”,并使用下拉菜单中的“基于运行状况的滚动更新”。
这似乎与上面的引用直接矛盾,这意味着我们的活动配置实际上是无效的(即使env已经成功运行了很长时间)。
果然,如果我现在尝试使用EB Web控制台修改环境配置中的某些内容(任何内容),我会突然收到一个从未有过的错误:
“无效的选项值:'运行状况'(名称空间:'aws:autoscaling:updatepolicy:rollingupdate',OptionName:'RollingUpdateType'):无法为工作层环境启用基于运行状况的滚动更新。”
此外,“基于健康状况的滚动更新”选项不再显示在“滚动更新类型”的下拉列表中(但在我尝试应用更改之前就已经存在)。