Amazon Web Services上的负载平衡WordPress:pipe理更改

我对amazon web services相对来说比较陌生,我正试图让我的脑海里围绕着我的wordpress安装程序来进行Elastic Load Balancing的工作。 另外,我想就拟议的基础设施提供一些build议。

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

  • 1x EC2 m1.small – Ubuntu 12.04.3 LTS 64bit(带1个EBS卷)
  • 1x EC2 t1.micro – Ubuntu 12.04.3 LTD 64位(带或不带EBS卷?)
  • 1x Micro RDS实例 – MySQL 5.6.13

EC2我目前的EC2(t1.micro)正在运行LAMP堆栈,并configuration为运行wordpress。

我想负载平衡这与一个m1.small实例,运行t1.micro实例的克隆。

目前我对未知的情况如下:

  • 负载均衡设置如何pipe理跨实例的WordPress的CMS的变化? 每次在wordpress中进行更改时,是否必须不断更新AMI?
  • 我的网站是一个电子商务网站。 在负载均衡设置中是否有这个影响? 也就是说,有一个命令存在的可能性,而不是另一个吗?

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

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

任何帮助不胜感激。

劳埃德

无状态的Web应用程序很难。

如你所知,wordpress非常依赖写入磁盘的东西。 这是build议的基础设施

  • 弹性负载平衡器
    • Autoscaling组由小型ec2实例组成
  • 工头/开发微EC2实例
  • Micro / Small RDS CMS数据
  • 会话存储的Elasticache群集
  • 用于媒体上传的S3存储桶

现在困难的部分。

让我们暂时忘记代码库的更新,让我们看看如何使整个事情变得无状态。 你应该做下面的事情来使这个东西横向扩展:

  1. 从你的微型实例开始。 它将作为部署机制以及模板
  2. 设置PHP会话以使用memcached进行会话pipe理,并将其指向您的弹性caching集群http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
  3. 在微型实例上安装git
  4. 安装一些wordpress插件,把所有的file upload到S3(可选,但是保存你从每次你上传一个媒体文件到cms重新部署)尝试W3总caching插件

这照顾了设置

如何部署新的更改

您将使用您的微型实例所有未来的更改到wordpress安装。 这包括像更新wordpress,更新你的主题文件和几乎所有存储在磁盘上的东西。

您将需要创build两个脚本:

第一个将用于将更改部署到自动调节组。 它应该做到以下几点:

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

第二个脚本将位于自动扩展组的实例上,并由第一个脚本触发,并在第一次初始化实例时运行。 它应该做到以下几点:

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

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

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

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