申明:本文以平安金融云(https://fincloud.pinganyun.com/)为例,内容来自互联网公开信息。
本文以wordpress为例,创建一个高可用、可扩展、高性能的站点。涉及到平安金融云服务有VPC、Security Group、RDS-MySQL、EFS、EC2、ELB、云网通、CDN、OBS等,最后尝试了Auto Scalling组的创建。其中的问题共大家讨论。
1. 架构图
本次实验选择平安云华东区的两个AZ:EFA和EFB。每个服务的解释如下:
VPC:https://fincloud.pinganyun.com/ssr/help/network/vpc/index.overview
RDS-MySQL:https://fincloud.pinganyun.com/ssr/help/database/RDS/Product_Introduction.Overview
ECS:https://fincloud.pinganyun.com/ssr/help/compute/ecs/intro.overview
ELB:https://fincloud.pinganyun.com/ssr/help/network/elb/index.intro
CDN:https://fincloud.pinganyun.com/ssr/help/network/CDN/help.introduction
OBS:https://fincloud.pinganyun.com/ssr/help/storage/obs/intro.whatisobs
EIP:https://fincloud.pinganyun.com/ssr/help/network/EIP/intro.whatiseip
云解析:https://fincloud.pinganyun.com/ssr/help/domain/cloudDNS/introduction.overview
2. 部署环境分为以下步骤:
- 创建VPC、子网、安全组
- 创建RDS-MySQL实例
- 创建EFS文件系统实例
- EFA中创建ECS实例,并绑定EIP, 安装Apache, PHP程序
- ECS实例挂载EFS文件系统,部署Wordpress代码并连接数据库
- 创建一个简单的博文
- ECS制作镜像,同步镜像到EFB,创建ECS实例
- 创建ELB, 把EFA和EFB的ECS实例添加服务器资源池并配置监听器
- 创建云解析并解析ELB的公网IP
- 模拟拟EC2实例故障
- 模拟RDS实例故障
1) 创建VPC、子网、安全组
分别在EFA和EFB创建子网,因为需要Muti-AZ部署。
创建webserver security group,开放http80, ssh22端口。
注意:此处的安全组SG是有状态的,只用开通入方向的规则,出方向自动放行。
2) 创建RDS-MySQL实例
需要选择一个主可用区A,但是实际上EFA/EFB都能访问。而且文档中也说明了RDS默认部署就是Muti-AZ的主备架构。
注意
- RDS没有使用MySQL默认的3306端口,常规实例、远程灾备实例、同城只读实例和远程只读实例分别具有各自的访问域名和端口号。
- 必须开通白名单才能连接数据库,而且看起来白名单只能是一个个的选择ECS实例。
另外,白名单自动打通了ECS的端口连接,不用在security group上添加任何规则,ECS就可以连接数据库。
3) 创建EFS文件系统
可用区要选择,但是EFB也能够连接到EFS。文档中也说明了EFS是Region内部都可以访问。存储类型要选择性能型,因为存储wordpress app主程序,有IO读写。
注意:和RDS一样,访问EFS需要授权,而且看起来也只能对ECS授权。
同样,EFS授权自动打通了ECS的端口连接,不用在security group上添加任何规则,ECS就可以连接EFS。
4) EFA中创建ECS实例,配置EIP, 并安装Apache, PHP程序
为ECS配置EIP
升级
yum update -y
安装httpd
安装PHP73
测试一下
5) ECS实例挂载EFS文件系统,部署Wordpress代码在EFS上
首先要确定ECS被EFS授权连接
下载并安装wordpress代码
wget https://wordpress.org/latest.zip
unzip latest.zip
mv wordpress/* /var/www/html/
rm -rf wordpress/ latest.zip
sudo chown -R apache:apache /var/www/html/*
chmod -R 775 /var/www/html
systemctl restart httpd.service
systemctl status httpd.service
打开浏览器:
6) 连接数据库,创建一个简单的博文
首先确定ECS在白名单里
注意:端口是3543,而不是mysql常见的3306。但是wordpress图形化wizard只能连接3306端口,所以图形界面是连不上的。
原因是RDS-MYSQL端口变成了3453, 只能手动编辑wp-config.php文件。
继续初始化:
初始化完成后,创建一个简单的页面。
7) ECS制作镜像,同步镜像到EFB,创建另一个EFB的ECS实例
ECS制作镜像要先关机,这个也是限制啊,AWS可以开机做镜像。
EFS的授权上要加上EFB的ECS
RDS白名单上添加EFB的ECS
两个ECS都可以访问同样的内容:
8) 创建ELB, 把EFA和EFB的ECS实例添加服务器资源池并配置监听器
添加两个ECS到ELB的资源池
注意
尽管是公网的ELB, 但是ECS并不需要公网的IP地址,所以此时解绑两个ECS的EIP也是可以的。
9) 创建云解析并解析ELB的公网IP
这里临时使用了我的一个阿里云的域名entrycloud.cn
10) 模拟拟EC2实例故障,检验ELB高可用
关闭一个ECS,服务不中断。
3. AS伸缩组探索
架构图
单独建立一个ELB
单独建立一个监视器
创建AS组
启动伸缩组成功,但是ECS在不停的重启,服务监听失败。
估计是EFS和数据库需要手动添加授权和白名单,无法和AS自动配合,后续等待产品经理升级方案。