AWS - 创建一个高可用的WordPress 博客 (二)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介:

上一篇大概的介绍了一下高可用的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的权限。


如下所示:


wKioL1QKeFGhuYy4AAEnsTK0kDM706.jpg


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


wKiom1QKeEzQH2G5AAC3SE9amLo636.jpg


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

wKiom1QKeE7ib0TmAAC6_11hMnE841.jpg


创建Internet 网关

wKioL1QKeFngpokrAADOxzuklkE010.jpg

配置路由表


wKiom1QKeFDjj2FdAADohziwXbw875.jpg



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


wKioL1QKeFuAZX5iAADJsiaihgg604.jpg

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




点击RDS

wKiom1QKeFWyLcjQAABsAm3jpfk601.jpg


选择Multi-AZ Deployment

wKioL1QKeF6BQjc_AADrfqOxtHk018.jpg

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

wKiom1QKeFnA3ueMAADKtZOlGbM194.jpg


级别改成small就行了。

wKiom1QKeFui67V8AADRBrGgjcY588.jpg

直接选择默认VPC

wKioL1QKeGXhhW5mAAEjH2lQ1Qs860.jpg


创建成功

wKioL1QKeGfxq6DnAADUnYn5Tx4826.jpg

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

wKiom1QKeGTjl0_GAAG6pDajGdE977.jpg


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


具体的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)

wKiom1QKfLaDuFALAABmi4LZLrs786.jpg

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

wKioL1QKfL7Sxd3oAAApTmJTrqs293.jpg

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

wKiom1QKfLiwnkp9AAApPSuyIOA132.jpg

wKioL1QKfMDA7VHZAAAlGVr5b5I525.jpg


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

wKiom1QKfLqAQ-t7AAA_1EGpQAc309.jpg


修改一下内容

wKioL1QKfMLzZ8gkAAA19Y6ZiZg695.jpg


添加域名和根目录

wKiom1QKfL2yjzylAAD3aL22Zmc908.jpg


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

wKioL1QKfMXQA780AAA9JnZ3tUU460.jpg

重启apache

wKiom1QKfL_yMPo6AABExmvpW5w775.jpg


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

wKioL1QKfMeQkKzvAAA_SLgaPNo871.jpg

wKioL1QKfMjQ8ipCAABOxLG8lj8241.jpg


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

wKiom1QKgDfQDBsWAABEbCQ2BIM333.jpg


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


wKioL1QKgEDyoTTRAACHWUzRxns632.jpg

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

wKioL1QKgEOzgbPgAAFbKP6W4Nk098.jpg

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

wKiom1QKgD3CfhCSAAC-86LnLYI758.jpg

输入初始化信息

wKiom1QKgD-ixRgqAACTzRrCsdI543.jpg


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

wKioL1QKgEmzpiHAAAEmuPuQmSA195.jpg


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

wKioL1QKgEqS0D5bAABzBknlLK8880.jpg


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

wKiom1QKgEegLLd9AAHuLJQ_1Rg249.jpg


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


新建一个 S3 bucket, wordpressbeanxyzcdn

wKioL1QKgE_S3CsnAABaQM4SyWA075.jpg

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

wKiom1QKgFPDpu8bAAB-wVkBzc4084.jpg


然后创建一个CloudFront Url

wKiom1QKgEqwW7_nAAC2rN0ppA8142.jpg

选择Web

wKiom1QKgE3z09CoAAEFU3n9Odc960.jpg

分布点指向S3 bucket

wKiom1QKgE_j4LZxAAEp9yLG0D0424.jpg


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

wKioL1QKgFmBoV0MAAD8vSR0Fd8681.jpg


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

wKioL1QKgF7yDjWEAAGldDnzX84679.jpg


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

wKioL1QKgF_wdkJvAABQva7mM3Y927.jpg

wKiom1QKgFrxCE1hAACIEbT8Ue4310.jpg


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

wKioL1QKgGLCkeTiAABMDIT6pgs061.jpg

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

wKiom1QKgFyiXBpvAAAzTd4HDLE694.jpg


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

wKioL1QKgGajbI4yAAFVVbPJFoE615.jpg

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


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

wKiom1QKgGHQKfJrAADDEtNo1SE319.jpg


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

wKioL1QKgGqTM5y_AACO6IC2zCY532.jpg


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


新建一个ELB

wKiom1QKgGbDH4qGAAErGbQH-_Q726.jpg

wKioL1QKgG_yIhW8AAD024Uablo774.jpg

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

wKiom1QKgGrCCS7mAADx-rO9c6I748.jpg


指向之前创建的SG

wKiom1QKgGzRAlLvAACktk-ygQ4725.jpg

这就创建好了


wKiom1QKgHGykzsMAAC6CrDuJ0U232.jpg

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

wKioL1QKgHzhZ-msAAFl1YUsKhs380.jpg

wKioL1QKgH_QoIAtAAGCNS3hA5w435.jpg

nslookup看看是否已经更改。

wKiom1QKgHnws32EAABPgZ9EEyI282.jpg


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



wKioL1QKhaShlKwwAACMsWTzN08518.jpg

wKioL1QKhaeDe_b0AAGZyV1A0IY475.jpg

选择之前创建的AMI镜像

wKiom1QKhaLBchZ8AACo17YdZQM449.jpg

wKioL1QKhavw286yAAEKZtNKUWI433.jpg


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

wKiom1QKhanhdevbAAFtqqx0vo4015.jpg

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

wKiom1QKhauQD_zvAAD6-jBoUic222.jpg

wKioL1QKhbSCqya8AADJS4W1wow631.jpg


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


wKioL1QKhbfxhamNAAFCFB9Uod0477.jpg

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


wKiom1QKhbOyJrcwAAEjO7g52Vs392.jpg

wKioL1QKhbyyHo7_AAEmSD1Pxis340.jpg

wKiom1QKhbejdqymAACZYf8HoqM045.jpg

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

wKiom1QKhbrjlc-uAAFZlcULLWM358.jpg

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


wKioL1QKhcjxAjeAAAE3qWwimd8481.jpg

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

wKiom1QKhcXg7Z-2AADpqc3NXOE940.jpg










本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1549612,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
关系型数据库 MySQL Apache
怎么在树莓派上搭建WordPress博客网站,并发布到外网可访问?
怎么在树莓派上搭建WordPress博客网站,并发布到外网可访问?
533 1
|
10天前
【wordpress教程】wordpress博客网站添加非法关键词拦截
有的网站经常被恶意搜索,站长们不胜其烦。那我们如何屏蔽恶意搜索关键词呢?下面就随小编一起来解决这个问题吧。
20 1
|
23天前
|
移动开发 前端开发 语音技术
WordPress轻拟物博客主题niRvana 4.5.3(自适应手机端)
WordPress轻拟物主题niRvana,设计上不再趋从于现有的扁平风,我认为是时候从极致的扁平稍微向拟物致敬了,因此采用了轻拟物的风格。niRvana 设计和样式更加新颖,一眼看上去就会被他吸引住,主题配色也非常舒服。而且它有两个功能特别有意思,一个是自动根据文章特色图片识别出图片的主色调,在首页、文章分类页用最美的方式显示滚动图片,另一个则是文章支持语音朗读。主题细腻有质感,手机端体验非常好。
40 2
|
2月前
|
Java Android开发
java利用xml-rpc协议操作wordpress博客
java利用xml-rpc协议操作wordpress博客
61 1
|
2月前
|
PHP
菊子曰备份Wordpress网站的博客内容出错的解决办法(原创)
菊子曰备份Wordpress网站的博客内容出错的解决办法(原创)
499 2
|
2月前
|
关系型数据库 MySQL PHP
wordpress博客系统详细安装部署教程
wordpress博客系统详细安装部署教程
wordpress博客系统详细安装部署教程
|
2月前
|
弹性计算 关系型数据库 MySQL
带你读《弹性计算技术指导及场景应用》——2. 免费试用ECS,轻松搭建WordPress博客平台使用
带你读《弹性计算技术指导及场景应用》——2. 免费试用ECS,轻松搭建WordPress博客平台使用
212 0
|
2月前
|
前端开发
wordpress博客趣主题个人静态网页模板
博客趣wordpress页面模板适合个人博客,个人模板等内容分享。
122 0
|
7月前
|
API 数据安全/隐私保护 Python
随手写了个博客多平台发布脚本:Python自动发布文章到Wordpress
作为一名技术博主,提高博客发布效率是我们始终追求的目标。在这篇文章中,我将分享一个基于Python的脚本,能够实现博客多平台发布,具体来说,是自动发布文章到WordPress。通过这个简单而高效的脚本,我们能够省去繁琐的手动发布步骤,提升工作效率。
随手写了个博客多平台发布脚本:Python自动发布文章到Wordpress
|
8月前
|
网络安全 数据库 数据安全/隐私保护
手把手教你搭建WordPress博客网站并发布至公网(下)
手把手教你搭建WordPress博客网站并发布至公网
108 0