在 Amazon Web Services 上平衡 Wordpress 负载:管理变更

在 Amazon Web Services 上平衡 Wordpress 负载:管理变更

我对 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 卷?)
  • 1x 微型 RDS 实例 - MySQL 5.6.13

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

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

我目前未知的情况如下:

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

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

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

非常感谢您的帮助。

劳埃德

答案1

无状态的 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 仓库
  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/

相关内容