上一篇大概的介绍了一下高可用的wordpress的设计结构。这个设计图会涉及到VPC,EC2,ELB,RDS,S3,CloudFront,Auto Scaling,IAM和CloudWatch等核心服务,对于了解各部分的功能是个很好的练习。
现在我们开始具体的配置,豆子会配置一个Ubuntu14 的WordPress,该服务器和MySQL数据库都具有高可用的功能,还可以通过CPU的负荷自动添加或者删除现有实例。具体的配置包括以下步骤:
创建基本的网络和防火墙
配置高可用MySQL
创建一个Ubuntu 14实例
Ubuntu安装LAMPStack
配置S3和CloudFront CDN
配置Ubuntu Virtual Host
配置Route 53 DNS
测试通过之后配置成AMI镜像
配置ELB
配置Auto scaling
测试
首先我们需要配置一个基本的VPC 网络和IAM角色。
之前的博客里面我已经创建了一个IAM的角色 ec2-s3,可以允许关联的虚拟机默认就有访问S3 Bucket的权限。
如下所示:
接下来创建一个新的VPC网络 wordpressbeanxyz
创建2个子网,分别位于不同的AZ
创建Internet 网关
配置路由表
新建一个Security Group,配置允许访问的端口
准备工作差不多了,先来创建个MySql的高可用实例吧。
点击RDS
选择Multi-AZ Deployment
豆子账号所在的Sydney区域还无法创建micro级别的Multiple实例,亚马逊逼着我用更贵的实例,好吧
级别改成small就行了。
直接选择默认VPC
创建成功
正在创建,大概要10分钟才会完全配置结束
至此,基本的数据库和网络结构就算搭建起来了,接下来我们来搭建个虚拟机测试一下。
具体的EC2加载和Putty连接过程就省略了,这个是最最基本的操作。
豆子加载了一个Unbuntu 14的EC2实例,Putty连接之后
首先安装相关LAMP Stack
AWS的命令行也得安装
测试一下成功安装
如果没有配置IAM的角色,要想访问S3 那就只能通过 aws configure来输入secret key才行了
接下来下载安装wordpress
解压
修改配置文件
数据库的名称,用户名,密码以及地址(这里输入MySql 实例的EndPoint)
然后把整个文件夹拷贝到 apache的根目录下 /var/www/wordpress
修改一下访问权限,确保用户可以访问
然后配置一下virtual host 文件。Ubuntu14里面的默认文件是 000-default.conf,把他拷贝出来,重命名为wordpress.confg
修改一下内容
添加域名和根目录
重新加载一下这个配置文件
重启apache
然后通过aws的命令把对应的wordpress文件夹和virtual host的配置文件备份回S3保存。通过这种方式,我们可以通过Bootstrap来给之后新创建的服务器同步最新的配置信息。
打开S3的管理界面看看是否已经同步
接下来需要设定一下DNS,打开Route53,我已经创建了Hosted Zone了。这个域名我是在goDaddy上注册的,把NS的服务器在goDaddy指向aws即可转移到Route53上。
创建一个域名 blog.beanxyz.com然后指向虚拟机的公网IP
输入域名试试看,成功加载wordpress
输入初始化信息
Ubuntu 14上的WordPress就可以算是成功搭建了。 不过这个时候只有数据库是高可用的,WordPress服务器还不是,上面的媒体数据也是保存在本地硬盘上的。
新建一个Post,插入一张图片
可以看见,图片是保存在 /wp-content/uploads 的本地磁盘里面的
为了保证全球各地的访问速度都很快,我们需要创建一个CDN 网络,CDN的Orgin 服务器指向S3,所有的图片信息都需要保存在对应的S3 bucket里面。
新建一个 S3 bucket, wordpressbeanxyzcdn
修改属性,创建一个Bucket Policy,允许所有用户对其中的内容都具有只读权限
然后创建一个CloudFront Url
选择Web
分布点指向S3 bucket
通过S3 sync同步图片到我们的S3 Bucket里面
确认一下Url,S3 bucket和本地磁盘的内容已经同步了
然后在crontab里面创建一个计划任务,每分钟同步一次
同时,还需要修改vitual host文件,用CDN的地址来替换本地磁盘的访问地址
打开 rewrite的功能,然后重启apache
再从wordpress上点开图片的地址,发现已经是CDN的地址了
最后别忘记通过aws s3 cp命令把最新的改动都保存回S3 bucket
然后通过这个EC2创建一个AMI 镜像
之后我们可以通过这个AMI和Auto Scaling 自动创建新的虚拟机
现在我们来配置一下WordPress的高可用功能,Elastic load balancer。
新建一个ELB
把我创建的2个子网都放进去,这样自动创建的虚拟机会在不同的数据中心进行负载平衡
指向之前创建的SG
这就创建好了
创建好之后,我们还需要修改一下之前的DNS,使得我的blog.beanxyz.com指向ELB的地址,而不是直接指向某个虚拟机的公网IP
nslookup看看是否已经更改。
最后,我们来创建新的Auto Scaling Group
选择之前创建的AMI镜像
配置虚拟机,注意在User Data里面可以通过Bootstrap来预配置信息
剩下的基本上默认选项按部就班的点下去就行了
勾选ELB,这样新创建的EC2,自动会加入ELB进行负载平衡
根据CPU的变化自动添加删除实例,这个之前豆子的博客已经详细介绍过了
AS配置完毕之后,因为我设置的初始状态需要2台服务器,他会自动立刻创建2个实例,可以在ELB的配置界面里面查看
也可以在EC2的配置界面下查看
手动删除一台实例,访问仍然成功!