上一篇大概的介绍了一下高可用的wordpress的设计结构。这个设计图会涉及到VPC,EC2,ELB,RDS,S3,CloudFront,Auto Scaling,IAM和CloudWatch等核心服务,对于了解各部分的功能是个很好的练习。


现在我们开始具体的配置,豆子会配置一个Ubuntu14 的WordPress,该服务器和MySQL数据库都具有高可用的功能,还可以通过CPU的负荷自动添加或者删除现有实例。具体的配置包括以下步骤:


  1. 创建基本的网络和防火墙

  2. 配置高可用MySQL

  3. 创建一个Ubuntu 14实例

  4. Ubuntu安装LAMPStack

  5. 配置S3和CloudFront CDN

  6. 配置Ubuntu Virtual Host

  7. 配置Route 53 DNS 

  8. 测试通过之后配置成AMI镜像

  9. 配置ELB

  10. 配置Auto scaling

  11. 测试



首先我们需要配置一个基本的VPC 网络和IAM角色。


之前的博客里面我已经创建了一个IAM的角色 ec2-s3,可以允许关联的虚拟机默认就有访问S3 Bucket的权限。


如下所示:


AWS - 创建一个高可用的WordPress 博客 (二)_第1张图片


接下来创建一个新的VPC网络 wordpressbeanxyz


wKiom1QKeEzQH2G5AAC3SE9amLo636.jpg


创建2个子网,分别位于不同的AZ

wKiom1QKeE7ib0TmAAC6_11hMnE841.jpg


创建Internet 网关

AWS - 创建一个高可用的WordPress 博客 (二)_第2张图片

配置路由表


AWS - 创建一个高可用的WordPress 博客 (二)_第3张图片



新建一个Security Group,配置允许访问的端口


AWS - 创建一个高可用的WordPress 博客 (二)_第4张图片

准备工作差不多了,先来创建个MySql的高可用实例吧。




点击RDS

AWS - 创建一个高可用的WordPress 博客 (二)_第5张图片


选择Multi-AZ Deployment

AWS - 创建一个高可用的WordPress 博客 (二)_第6张图片

豆子账号所在的Sydney区域还无法创建micro级别的Multiple实例,亚马逊逼着我用更贵的实例,好吧

AWS - 创建一个高可用的WordPress 博客 (二)_第7张图片


级别改成small就行了。

AWS - 创建一个高可用的WordPress 博客 (二)_第8张图片

直接选择默认VPC

AWS - 创建一个高可用的WordPress 博客 (二)_第9张图片


创建成功

AWS - 创建一个高可用的WordPress 博客 (二)_第10张图片

正在创建,大概要10分钟才会完全配置结束

AWS - 创建一个高可用的WordPress 博客 (二)_第11张图片


至此,基本的数据库和网络结构就算搭建起来了,接下来我们来搭建个虚拟机测试一下。


具体的EC2加载和Putty连接过程就省略了,这个是最最基本的操作。


豆子加载了一个Unbuntu 14的EC2实例,Putty连接之后


首先安装相关LAMP Stack

wKiom1QKfLDgWHRnAAB7CBWbwLU647.jpg

AWS的命令行也得安装

wKioL1QKfLizRvrcAAAxlL6FElc493.jpg

测试一下成功安装

wKiom1QKfLKAQvvfAABAguu8e10977.jpg

如果没有配置IAM的角色,要想访问S3 那就只能通过 aws configure来输入secret key才行了

wKiom1QKfquQbc9YAAAz5xvqJRc740.jpg


接下来下载安装wordpress


wKioL1QKfLrAeBAtAAAzga5ztcs209.jpg

解压

wKiom1QKfLTA0Ye2AAAvbBYeMMM216.jpg

修改配置文件

wKioL1QKfLzT5BpDAAAptNjjWmA546.jpg

数据库的名称,用户名,密码以及地址(这里输入MySql 实例的EndPoint)

AWS - 创建一个高可用的WordPress 博客 (二)_第12张图片

然后把整个文件夹拷贝到 apache的根目录下 /var/www/wordpress

wKioL1QKfL7Sxd3oAAApTmJTrqs293.jpg

修改一下访问权限,确保用户可以访问

wKiom1QKfLiwnkp9AAApPSuyIOA132.jpg

wKioL1QKfMDA7VHZAAAlGVr5b5I525.jpg


然后配置一下virtual host 文件。Ubuntu14里面的默认文件是 000-default.conf,把他拷贝出来,重命名为wordpress.confg

wKiom1QKfLqAQ-t7AAA_1EGpQAc309.jpg


修改一下内容

wKioL1QKfMLzZ8gkAAA19Y6ZiZg695.jpg


添加域名和根目录

AWS - 创建一个高可用的WordPress 博客 (二)_第13张图片


重新加载一下这个配置文件

wKioL1QKfMXQA780AAA9JnZ3tUU460.jpg

重启apache

wKiom1QKfL_yMPo6AABExmvpW5w775.jpg


然后通过aws的命令把对应的wordpress文件夹和virtual host的配置文件备份回S3保存。通过这种方式,我们可以通过Bootstrap来给之后新创建的服务器同步最新的配置信息。

wKioL1QKfMeQkKzvAAA_SLgaPNo871.jpg

wKioL1QKfMjQ8ipCAABOxLG8lj8241.jpg


打开S3的管理界面看看是否已经同步

AWS - 创建一个高可用的WordPress 博客 (二)_第14张图片


接下来需要设定一下DNS,打开Route53,我已经创建了Hosted Zone了。这个域名我是在goDaddy上注册的,把NS的服务器在goDaddy指向aws即可转移到Route53上。


AWS - 创建一个高可用的WordPress 博客 (二)_第15张图片

创建一个域名 blog.beanxyz.com然后指向虚拟机的公网IP

AWS - 创建一个高可用的WordPress 博客 (二)_第16张图片

输入域名试试看,成功加载wordpress

AWS - 创建一个高可用的WordPress 博客 (二)_第17张图片

输入初始化信息

AWS - 创建一个高可用的WordPress 博客 (二)_第18张图片


Ubuntu 14上的WordPress就可以算是成功搭建了。 不过这个时候只有数据库是高可用的,WordPress服务器还不是,上面的媒体数据也是保存在本地硬盘上的。

AWS - 创建一个高可用的WordPress 博客 (二)_第19张图片


新建一个Post,插入一张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第20张图片


可以看见,图片是保存在 /wp-content/uploads 的本地磁盘里面的

AWS - 创建一个高可用的WordPress 博客 (二)_第21张图片


为了保证全球各地的访问速度都很快,我们需要创建一个CDN 网络,CDN的Orgin 服务器指向S3,所有的图片信息都需要保存在对应的S3 bucket里面。


新建一个 S3 bucket, wordpressbeanxyzcdn

AWS - 创建一个高可用的WordPress 博客 (二)_第22张图片

修改属性,创建一个Bucket Policy,允许所有用户对其中的内容都具有只读权限

AWS - 创建一个高可用的WordPress 博客 (二)_第23张图片


然后创建一个CloudFront Url

AWS - 创建一个高可用的WordPress 博客 (二)_第24张图片

选择Web

AWS - 创建一个高可用的WordPress 博客 (二)_第25张图片

分布点指向S3 bucket

AWS - 创建一个高可用的WordPress 博客 (二)_第26张图片


通过S3 sync同步图片到我们的S3 Bucket里面

AWS - 创建一个高可用的WordPress 博客 (二)_第27张图片


确认一下Url,S3 bucket和本地磁盘的内容已经同步了

AWS - 创建一个高可用的WordPress 博客 (二)_第28张图片


然后在crontab里面创建一个计划任务,每分钟同步一次

AWS - 创建一个高可用的WordPress 博客 (二)_第29张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第30张图片


同时,还需要修改vitual host文件,用CDN的地址来替换本地磁盘的访问地址

AWS - 创建一个高可用的WordPress 博客 (二)_第31张图片

打开 rewrite的功能,然后重启apache

wKiom1QKgFyiXBpvAAAzTd4HDLE694.jpg


再从wordpress上点开图片的地址,发现已经是CDN的地址了

AWS - 创建一个高可用的WordPress 博客 (二)_第32张图片

最后别忘记通过aws s3 cp命令把最新的改动都保存回S3 bucket


然后通过这个EC2创建一个AMI 镜像

AWS - 创建一个高可用的WordPress 博客 (二)_第33张图片


之后我们可以通过这个AMI和Auto Scaling 自动创建新的虚拟机

AWS - 创建一个高可用的WordPress 博客 (二)_第34张图片


现在我们来配置一下WordPress的高可用功能,Elastic load balancer。


新建一个ELB

AWS - 创建一个高可用的WordPress 博客 (二)_第35张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第36张图片

把我创建的2个子网都放进去,这样自动创建的虚拟机会在不同的数据中心进行负载平衡

AWS - 创建一个高可用的WordPress 博客 (二)_第37张图片


指向之前创建的SG

AWS - 创建一个高可用的WordPress 博客 (二)_第38张图片

这就创建好了


AWS - 创建一个高可用的WordPress 博客 (二)_第39张图片

创建好之后,我们还需要修改一下之前的DNS,使得我的blog.beanxyz.com指向ELB的地址,而不是直接指向某个虚拟机的公网IP

AWS - 创建一个高可用的WordPress 博客 (二)_第40张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第41张图片

nslookup看看是否已经更改。

AWS - 创建一个高可用的WordPress 博客 (二)_第42张图片


最后,我们来创建新的Auto Scaling Group



AWS - 创建一个高可用的WordPress 博客 (二)_第43张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第44张图片

选择之前创建的AMI镜像

AWS - 创建一个高可用的WordPress 博客 (二)_第45张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第46张图片


配置虚拟机,注意在User Data里面可以通过Bootstrap来预配置信息

AWS - 创建一个高可用的WordPress 博客 (二)_第47张图片

剩下的基本上默认选项按部就班的点下去就行了

AWS - 创建一个高可用的WordPress 博客 (二)_第48张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第49张图片


勾选ELB,这样新创建的EC2,自动会加入ELB进行负载平衡


AWS - 创建一个高可用的WordPress 博客 (二)_第50张图片

根据CPU的变化自动添加删除实例,这个之前豆子的博客已经详细介绍过了


AWS - 创建一个高可用的WordPress 博客 (二)_第51张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第52张图片

AWS - 创建一个高可用的WordPress 博客 (二)_第53张图片

AS配置完毕之后,因为我设置的初始状态需要2台服务器,他会自动立刻创建2个实例,可以在ELB的配置界面里面查看

AWS - 创建一个高可用的WordPress 博客 (二)_第54张图片

也可以在EC2的配置界面下查看


AWS - 创建一个高可用的WordPress 博客 (二)_第55张图片

手动删除一台实例,访问仍然成功!

AWS - 创建一个高可用的WordPress 博客 (二)_第56张图片