使用 EC2 可用区的最佳实践是啥?

Posted

技术标签:

【中文标题】使用 EC2 可用区的最佳实践是啥?【英文标题】:What's are best practices for using EC2 Availability Zones?使用 EC2 可用区的最佳实践是什么? 【发布时间】:2011-11-02 09:27:33 【问题描述】:

我正在 EC2 上重新启动一个站点(每天约 5 毫米以上的访问量),并且对如何在不同的数据中心部署节点感到困惑。我最基本的设置是 Varnish 服务器后面的两个节点。

我是否应该在不同的可用区有两个 Varnish 实例,每个实例都有与共享 RDS 数据库通信的 WWW 节点?每个 Varnish 实例都可以使用 Amazon 的负载均衡器进行负载均衡。

类似:

1 个负载均衡器正在与:

Varnish 位于弗吉尼亚州,与自己的 us-east-x 节点通信 Varnish 在加利福尼亚,与自己的 us-west-x 节点通信

在多个数据中心部署对我来说是一个新概念,因此我们不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

我们广泛使用亚马逊 EC2 来进行负载平衡和容错。虽然我们仍然没有广泛使用 Amazon 提供的 LoadBalancers,但我们有自己的负载均衡器(在 Amazon 之外运行)。 Amazon 承诺 LoadBalancers 永远不会宕机,它们是内部容错的,但我还没有测试得足够好。

一般来说,我们在每个可用区托管两个实例。一个充当真实服务器的镜像服务器。如果其中一台服务器出现故障,我们会将客户发送到另一台服务器。但最近亚马逊展示了一种模式,即单个可用区经常出现故障。

因此,我认为明智的技术是像您提到的那样跨可用区域设置服务器。我们使用 postgres,因此我们可以跨实例复制数据库中的内容。在 9.0 中,二进制复制非常适合双向复制。这样,两台服务器都可以在启动时承担负载,但是当可用区确实关闭时,所有用户都会被发送到一台服务器。由于有一个通用数据库可用,因此用户去哪里并不重要。只是如果他们转到错误的服务器,他们会遇到轻微的缓慢。

通过这种方法,您可以对网站进行串联更新。更新一个确保它运行良好,然后更新下一个。所以即使服务器升级失败,整个网站也一直在运行。

【讨论】:

当一个可用区出现故障时,您如何将客户发送到其他服务器? 我们的自定义负载均衡器每分钟都会从服务器进行负载检查。我们使用子域 url 来引导客户。因此,如果集群出现故障,我们会向他们发送不同的子域 url。亚马逊负载均衡器充当抽象层,并在内部将 http 请求路由到服务器。它通过从您的服务器请求一个网页,每 10 秒检查一次可用性。你可以只放一个blank.html。如果实例关闭,亚马逊将不会向该服务器发送任何请求。

以上是关于使用 EC2 可用区的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

AWS EC2-Instance 备份/终止/启动的最佳实践是啥

使用 Django(或任何 Web 框架)的 AJAX 的“最佳实践”是啥

在 C# Web api 上进行用户身份验证的最佳实践是啥?

DAO(数据访问对象)最佳实践 - 我看到的示例同时使用 DAO 和服务对象,这里的最佳实践是啥?

最佳实践:单个 Amazon EC2 实例上的多个 django 应用程序

关于 AWS IAM Role 的最佳实践