Amazon Web Services 上的负载平衡 Wordpress:管理更改

Llo*_*ees 7 load-balancing wordpress amazon-web-services

我对 Amazon Web Services 比较陌生,我正在尝试了解 Elastic Load Balancing 如何在我的 wordpress 设置上下文中工作。此外,我想就拟议的基础设施提供一些建议。

我最初提议的基础设施如下:

  • 1x EC2 m1.small - Ubuntu 12.04.3 LTS 64 位(带有 1 个 EBS 卷)
  • 1x EC2 t1.micro - Ubuntu 12.04.3 LTD 64 位(有或没有 EBS 卷?)
  • 1 个微型 RDS 实例 - MySQL 5.6.13

EC2 我当前的 EC2 (t1.micro) 正在运行 LAMP 堆栈并配置为运行 wordpress。

我想用 m1.small 实例来负载平衡,运行 t1.micro 实例的克隆。

我目前的未知数如下:

  • 负载平衡设置将如何管理跨实例在 wordpress CMS 上所做的更改?每次在 wordpress 中进行更改时,我是否都必须不断更新 AMI?
  • 我的网站是一个电子商务网站。这在负载平衡设置中是否有任何影响?即,订单是否有可能存在于一个实例而不是另一个实例上?

这可能是一个非常愚蠢的问题,但我认为有些问题不会相关,因为基础设施正在引用一个数据库。

最后,有没有更好的方法来设置负载平衡的基础设施?即我是否应该考虑使用 Amazon S3 来存储我的所有文件并使用 Cloudfront 作为 CDN 以确保高效运行并解决任何 EBS 文件复制问题。

非常感谢任何帮助。

劳埃德

小智 5

无状态 Web 应用程序很难。

如您所知,wordpress 非常依赖于写入磁盘的内容。这是建议的基础设施

  • 弹性负载均衡器
    • 由小型 ec2 实例组成的自动缩放组
  • Foreman/Dev micro ec2 实例
  • CMS 数据的微型/小型 RDS
  • 用于会话存储的 Elasticache 集群
  • 用于媒体上传的 S3 存储桶

现在是困难的部分。

让我们暂时忘记对代码库的更新,让我们看看如何使整个事情无状态。您应该执行以下操作来使这个东西水平可扩展:

  1. 从您的微型实例开始。它将充当部署机制和模板
  2. 将 PHP 会话设置为使用 memcached 进行会话管理,并将其指向您的 elasticache 集群http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
  3. 在微实例上安装git
  4. 安装某种 wordpress 插件以将所有文件上传放入 S3(可选,但可以避免每次将媒体文件上传到 cms 时重新部署)尝试 W3 Total Cache 插件

这负责设置

如何部署新的更改

您将使用您的微型实例进行未来对 wordpress 安装的所有更改。这包括更新 wordpress、更新主题文件以及几乎所有存储在磁盘上的内容。

您将需要创建两个脚本:

第一个将用于将更改部署到自动缩放组。它应该执行以下操作:

  1. 提交对其 git repo 所做的更改
  2. Ping 所有生产实例并告诉他们从微实例下载新的代码库。您将需要使用某种形式的 AWS sdk 来获取自动扩展组中的实例列表并触发它们的接收脚本。我个人通过我创建的 HTTP 端点使用我的。

第二个脚本将存在于自动缩放组的实例上,由第一个脚本触发,并在实例首次初始化时运行。它应该执行以下操作:

  1. 连接到微实例上的 git 存储库
  2. 在分离的 HEAD 状态下获取最新的更改并签出更改

每次更改系统文件时,都应该运行上面的部署脚本。然后,这会将更改传播到所有生产实例。

现在为生产实例创建一个基础 AMI。它应该与微型实例非常相似,但实际上不应安装 wordpress。您将使用在启动时传递到 ec2 实例的用户数据来运行上面的第二个脚本,以从微型实例下载最新版本的代码库。

最后一件事...如果您正在运行任何形式的电子商务,您将需要在负载均衡器上安装 SSL 证书。看看这里的指南:http : //www.nczonline.net/blog/2012/08/15/setting-up-ssl-on-an-amazon-elastic-load-balancer/