amazon-web-services - 在网站不可用时重启 EC2 实例
问题描述
我有一个托管在 EC2 服务器上的网站。如果网站在特定时间范围内(比如 60 秒)不可用,我想监控网站端点并重新启动 EC2 实例。我在 AWS 中使用了哪些工具以及如何实现这一点?
解决方案
这不是推荐的方法。
首先,如果网站不可用,您可能需要调查原因,而不仅仅是重新启动实例。您的目标应该是通过消除问题的根本原因来运行稳定的系统,而不是通过一直重新启动来忽略问题。
推荐的设计是在高可用配置中运行:
- 在至少两个可用区的至少两台服务器上运行的应用程序(以防 AZ 发生故障)。这不一定更昂贵,因为每台服务器都可以小于单个大型服务器。
- 实例前面的负载均衡器,将流量分配给实例。负载均衡器还执行持续的健康检查,并停止向未通过健康检查的服务器发送请求
- 一个Auto Scaling 组,可以终止运行状况不佳的实例并自动启动替换服务器。如果可用区失败,这也很有效。
在此设计中,将终止(停止和销毁)不健康的实例,并使用预定义的磁盘映像和启动脚本创建一个新实例。或者,您可以选择将不良实例移出 Auto Scaling 组以调查问题,并启动一个新实例来代替它。
如果您的应用程序需要数据库,则数据库应位于实例外部,以便所有实例都可以连接到数据库,并且替换应用程序实例不会导致任何数据丢失。
至于在服务器上发现问题的速度,负载均衡器可以每隔几秒执行一次检查。另一方面,Amazon CloudWatch 至少需要一分钟来检测问题(可能需要更长的时间,因为指标是在一段时间内计算的,而不是“现在”指标)。
推荐阅读
- javascript - i am using axios to get data to display in the page but what is displayed is object promise not value
- graphql - How do I present authorization details in my GraphQL schema?
- php - Getting Max Boolean clause error solr 6.2.1
- python - Python Flask could not add new user instead of it display else part message
- cassandra - ReadTimeout in cqlsh console of cassandra
- github - 如果项目在github上开源,我可以复制代码吗?
- android - How to handle fragment state using viewmodel?
- javascript - How can I run `Date.getDay()` based on different timezone in nodejs?
- android - Recyclerview is not displaying Pre-Populated item on first run
- php - Laravel raw sql query