AWS亚马逊云
一、背景
你是一名云计算运维工程师,现在需要为某电商企业构建交易网站(LAMP架构)。通过多次沟通交流,最后此单位决定在AWS云的中国区域中部署此网站。现在,需要为客户实现高可用性和高弹性的架构,同时正确部署LAMP应用。已知的要求有:
- 将基于LAMP架构的应用上线运营,对外发布的网站的端口为8001
- 创建全新的VPC及网络架构
- 使用负载均衡、弹性伸缩、EC2、Amazon Aurora等组件构建资源栈
- 实现配置弹性伸缩
- 系统会根据需要,自动添加、配置新的实例,无须手动操作
- 通过使用子网、安全组等技术保护业务的安全
- 通过多可用区部署、群集技术等避免单点故障
- 通过其它必要的技术来应对数据损坏、丢失等意外事件的发生
- EC2实例类型为t2.micro,8GB磁盘
- RDS为Amazon Aurora,db.t3.medium,磁盘80GB
- 为减少Web应用的压力, CSS、图片等文件放置到公开的S3中
- 用户上传的文件需要放置到EFS存储中
- 架构图中组件不能有单点故障
- 设置必要的资源标签
二、部署流程
1.VPC及子网
2.NAT Gateway
3.DB
4.EC2
5.部署应用
6.EFS
7.S3
8.AMI
9.ELB
10.Auto Scaling
11.Cloud Watch
三、部署
(一)VPC
VPC及子网概念
通过Amazon Virtual Private Cloud (Amazon VPC),可以将AWS资源启动到你定义的虚拟网络中。这个虚拟网络与在传统中心中运行的传统网络极其相似。Amazon VPC 是 Amazon EC2 的网络层,初学者需要掌握以下主要概念:
1、Virtual private cloud (VPC):仅适用于你的AWS账户的虚拟网络。
2、子网:你的 VPC 内的一个 IP 地址范围。
3、路由表:一组称为“路由”的规则,它们用于确定将网络流量发送到何处。
4、互联网网关:连接到VPC的网关,用于启用VPC中的资源与互联网之间的通信。
网络规划
VPC名称:vpc
VPC CIDR:10.0.0.0/16
Public1 | App1 | Data1 |
---|---|---|
10.0.1.0/24 | 10.0.2.0/24 | 10.0.3.0/24 |
Public2 | App2 | Data2 |
---|---|---|
10.0.11.0/24 | 10.0.12.0/24 | 10.0.13.0/24 |
创建VPC、子网、NAT、GateWay
1、点击Create VPC
2、如下创建VPC及子网
(1)选择要创建的资源:VPC、子网等
(2)名称标签自动生成:vpc
(3)IPv4 CIDR块:10.0.0.0/16
(4)可用区(AZ):2个
(5)自定义可用区:第一个可用区为us-east-1a;第二个可区为us-east-1b
(6)公有子网的数量:2个
(7)私有子网的数量:4个
(8)NAT网关:每个可用区1个
(9)VPC终端节点暂时不设置,选择无
(10)其余默认
3、检查修改路由表
(1)修改VPC、路由表及各子网名称
(2)两个Public子网路由指向IGW
(3)App子网指向各自的NAT网关
(4)创建一个local路由表,删除自动创建的两个Data路由表,使两个Data子网指向local路由
1)创建local 路由表:
2)删除自动创建的两个Data路由表:略(编辑两个路由表的子网关联,取消关联即可删除)
3)使两个Data子网指向local路由表:编辑local路由表的子网关联,将Data子网添加即可
(二)创建数据库
1、创建安全组
(1)创建ec2实例的安全组备用
安全组名称:ec2
描述:ec2
VPC:选择之前创建的vpc-vpc
入站规则:规则一,选择“ssh”类型,源选择“我的IP”;规则二,选择“自定义TCP”,端口选择计划对外开放的“8001”端口,源选择“任何位置-IPv4”
出站规则:默认
(2)创建数据库安全组
安全组名称:rds
描述:rds
VPC:选择之前创建的vpc-vpc
入站规则:类型为“MYSQL/Aurora”,源为刚刚创建的“ec2”安全组
出站规则:默认
2、创建数据库的子网组
名称:db
描述:db
VPC:选择之前创建的“vpc-vpc”
添加子网:选择创建VPC时选择的可用区,子网选择两个Data子网
3、创建数据库
名称:rds
凭证设置:用户名自己设置,这里设置:“admin” ,密码自己设置,这里设置:“zhangaoyun”
数据库实例类:可突增类
多可用区部署:在不同的可用区中创建Aurora副本或读取器节点
VPC:选择之前创建的“vpc-vpc”
子网组:刚刚创建的“db”子网组
安全组:“rds”安全组
其他默认
(三)ec2
1、创建密匙对
2、创建ec2实例
名称;test
系统镜像:Amazon Linux aws
实例类型:t2.micro
密匙对:key58
VPC:选择之前创建的“vpc-vpc”
子网:Public1
自动分配公有IP:启用
安全组:“ec2”安全组
其他配置默认
(四)部署应用
1、使用PuTTY连接实例
2、登录ec2-user
3、为root用户添加密码,切换到root用户,修改/etc/ssh/sshd_conf文件
PermitRootLogin yes
PasswordAuthentication yes
4、安装php、php-mysql、mariadb、httpd(LAMP)
开启httpd:systemctl start httpd
设置开机自启动:systemctl enable httpd
5、修改http配置文件,修改端口:vi /etc/httpd/conf/httpd.conf
Listen 80
修改为 Listen 8001
6、下载test项目包到/var/www/html/并解压:unzip bookstore2.zip
7、浏览器输入实例的公有IP端口为8001,测试Web服务使用正常
8、登录数据库写入节点,写入数据
创建bookstore数据库:create database bookstore;
进入bookstore数据库:use bookstore;
创建books表:
CREATE TABLE `books` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`price` decimal(10,2) NOT NULL,
`author` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
插入数据:
INSERT INTO `books` VALUES (1, 'PHP项目实践', 56.00, '明');
INSERT INTO `books` VALUES (2, 'Java基础', 88.00, '强');
INSERT INTO `books` VALUES (3, 'Python数据分析', 66.00, '飞');
检查创建是否正确:select * from books;
9、修改php文件:vi /var/www/html/index.php
10、下载压力测试文件包到/var/www/html下
解压:unzip cpload.zip
浏览器输入:实例IP:8001/status.php
(五)EFS
1、创建EFS安全组
安全组名称:efs
描述:efs
VPC:vpc-vpc
入站规则:类型为“NFS”;源为“ec2安全组”
其余默认
2、创建EFS
(1)点击创建EFS
(2)选择自定义
名称:EFS
VPC:vpc-vpc
可用区:创建子网时选择的两个可用区
子网:两个Data子网
安全组:efs安全组
其它默认
3、配置EFS
(1)连接实例,安装amazon-efs-untils:yum install -y amazon-efs-utils
(2)创建EFS的挂载目录:mkdir /efs
(3)挂载EFS:sudo mount -t efs -o tls efs-id /efs
注:点击创建好的EFS,点击右上角的连接可找到“使用EFS挂载帮助程序”,注意命令中挂载目录是否需要更改,这里是使用的挂载目录是“/efs”。
(4)设置EFS开机自动挂载:vi /efs/fstab
注:用户指南中可找到命令,例如:fs-0b342a43a636748c1:/ /efs efs _netdev,tls 0 0
(5)创建一个efs.conf: vi /etc/httpd/conf.d/efs.conf
Alias "/efs" "/efs"
<Directory "/efs">
Require all granted
</Directory>
(6)将2.jpg放到/efs目录下:cp /var/www/html/efsimags/2.jpg /efs/
(7)测试是否成功
(六)AMI
1、使用test实例创建AMI
名称:ami
描述:ami
其它默认
(七)ELB
1、创建目标群组
选择目标类型:实例
目标组名称:target
协议:HTTP
端口:8001
VPC:vpc-vpc
其它默认
注册目标:选择test
3、创建elb安全组
安全组名称:elb
描述:elb
VPC:vpc-vpc
入站规则:类型为“自定义TCP”;端口为“8001”;源为“任何位置-IPv4”
其余默认
4、创建负载均衡器
负载均衡器类型:ALB
负载均衡器名称:ELB
模式:面向互联网
IP地址类型:IPv4
VPC:vpc-vpc
映射:两个可用区及两个Public子网
安全组:elb
侦听器和路由:协议为“HTTP”;端口为“8001”;默认操作转发至“target”
其余默认
注:网络负载均衡器
目标组创建的时候协议选择TCP,其余均与创建应用负载均衡器一致
(八)Auto Scaling
1、创建启动模板
启动模板名称:launch
模板版本说明:launch
系统映像:我的AMI“ami”
实例类型:t2.micro
密匙对:key58
安全组:ec2安全组
其余默认
2、创建Auto Scaling
名称:Auto
启动模板:launch
VPC:vpc-vpc
可用区及子网:App1和App2
负载均衡:附加到现有的负载均衡器
现有的负载均衡器目标组:target
运行状态检查:60秒
组大小:所需容量:2;最小容量:2;最大容量:4;
其余默认
3、测试:在浏览器输入负载均衡器域名端口为8001,多刷新几次发现服务器地址在变化
(九)CloudWatch
1、创建警报
(1)CPU利用率过高增加实例
指标:选择指标->EC2->按Auto Scaling组->Auto Scaling CPUUtilization
周期:1分钟
每当CPUUitlization为…:大于/等于70
通知:删除
警报名称:addec2
(2)CPU利用率较低减少实例
指标:选择指标->EC2->按Auto Scaling组->Auto Scaling CPUUtilization
周期:1分钟
每当CPUUitlization为…:小于/等于20
通知:删除
警报名称:reduceec2
2、附加到Auto Scaling
选择Auto Scaling中的弹性伸缩,创建动态扩展策略
(1)CPU利用率过高增加实例
(2)CPU利用率较低减少实例
Putty对Linux上传下载文件或者文件夹
一、方法一:pscp命令
在Windows命令行中上传文件:
pscp [Windows上的路径,可绝对可相对] [Linux用户]@[Linux的IP地址或网络内唯一主机名]:[Linux上存放地址,绝对路径
例如:pscp f:/ss.zip root@54.166.254.58:/
二、方法二:psftp命令
注意:如若不行,修改实例中ssh配置文件试试(本文档部署应用中)
put 上传文件,目录需要加-r
get 下载文件,目录需要加-r
mput 上传多个文件
mget 下载多个文件
cd 服务器端移动路径
pwd 显示服务器端当前所在路径
lcd 本地端移动路径
lpwd 显示本地端当前所在路径
实例:
C:Usersxuefei>psftp root@192.168.0.11
Using username "root".
root@192.168.0.11's password:
Remote working directory is /root
psftp> lcd Desktop //调整本地端路径
New local directory is C:UsersxuefeiDesktop
psftp> put extundelete-0.2.4 //可以看到但有put是不行的
local: unable to open extundelete-0.2.4
psftp> mput extundelete-0.2.4 //mput一样不行
local: unable to open extundelete-0.2.4
psftp> put -r extundelete-0.2.4 //只有put -r才可以上传目录