概念:一项可以根据业务需要快速调整计算容量的云服务,每台虚拟机称为一个实例
类型:根据不同硬件配置的虚拟机分类成为实例类型。例如t和m是常规类型、c是计算优化、r x 和 z是内存优化、d h 和 i是存储优化、f g 和 p是计算优化
限制:每个账户最多可以运行20个同类型的实例,如果需要提高限制,需要联系aws
购买选项
EC2实例的运行平台:
目前,EC2上可以运行基于Windows和Linux操作系统的实例,不支持任何非X86架构的实例。另外AWS还发布了一种新型的实例,可以让你操作AWS的裸机(不含任何操作系统),因此方便你在上面直接安装类似VMware Esx的虚拟操作系统。
注意:也可以创建一个windows实例,创建步骤同上面一致,创建完成后,点击实例上面的连接选项。在连接方法处选择一个独立的RDP客户端
,然后在连接信息处点击获取密码。打开远程桌面连接,将链接信息处的公有DNS输入后,再在凭据处输入用户名及密码即可连接到windows实例
实验前准备,创建两台EC2实例
连接到第一台vm,注意AMI镜像中提前安装了aws命令行工具,aws --version
,查看一下安装的版本;此时如果输入aws s3 ls
,是无法查看目前的s3的,因为没有权限;要先进行配置aws configure
,此处不输入用户名和密码,前面说了这种方式并不安全,只需要再第三个区域处,配置区域即可,这个区域名来自于地址栏处的region=“”处,找到并复制即可,其他直接回车默认。
勾选该实例,点击actions,选择下拉菜单处的安全中进入 attach/replace IAM role ,进入后点击 create new IAM role,进入后点击 create role,选择EC2,进入下一步
此时再回到 attach/replace IAM role 页面处,在IAM role的框后点击刷新按钮,然后下拉菜单就可以看到刚才创建的用户,选中然后点击apply即可
此时再进入命令行,输入 aws s3 ls
,就可以看到该区域下所包含的bucket,aws [s3] --help
可以查看aws命令相关帮助
创建一个新的bucket,aws s3 mb s3://自定义名
,其中mb=makebucket,此时输入 aws s3 ls
查看
创建一个文件,将该文件上传到bucket中,echo "hello word" > hello.txt
,aws s3 cp hello.txt s3://之前的自定义名
,aws s3 ls s3://之前的自定义名
此时就可以看到上传的文件
注意这种方法不需要将密码等信息铭文存储到本地,提高了安全性
在创建成功并使用该角色登录后,打开控制台,此时若再输入 aws s3 ls s3://之前的自定义名
就会报错,因为此时已经不是s3权限的用户了
可以使用aws ec2 describe-instances help
查看该命令的详细用法,然后在里面找到查看实例情况(id、AMI)的命令,复制后查看即可
还可以使用aws ec2 terminate-instance --instance-ids 写要关闭实例的id
,此时就可将某一台实例关闭
进入EC2界面,目前有一个在运行的实例,选中它就可以在下面看到该实例的相关信息,可以看到它自动被分配了一个ipv4的公有地址以及私有地址
在左侧导航栏处,可以找到一个 Elastc IPs,点击进入,点击 Allocate new address,在点击Allocate ,此时就会自动创建一个弹性ip,点击close
在close后弹出的界面中点击actions–> associate address,在弹出的页面中instance处,选择一台实例,其他不做配置,点击associate 即可,点击close
在左侧导航栏找到instance,返回实例处,次数选中实例,可以在下面看到其公有ip已经发生改变(此时该实例就拥有了一个静态的地址,之前的地址是动态分配的,每次重启就会再重新分配一个ip)
在默认情况下,可能一台实例需要两个ip地址,此时就需要再添加一块网卡。可以在左侧导航栏处找到 Network interface 点击进入(注意提前在实例页面找到该实例所处的域,也就是表头的 availability zone),进入后点击create network interface,在进入后页面处的description处做出描述即可,也相当于给第二块虚拟网卡做tag,在subnet处选择刚才看到的实例所在的域。在ip处选择自动分配ip,在最下面的安全组中勾选有ssh的策略,点击create
选中第二块虚拟网卡,点击actions–>attach ,然后选择之前的实例即可。此时再回到instances,选中该实例就可以看到它有两个私有地址
再创建一个新的弹性ip,然后将其分配给该虚拟网卡。在创建弹性ip时前面的步骤一致,在actions–> associate address后,选择resource type时,选择network instance ,在interface处选择刚才创建的网卡,在ip处将生成的ip分配,点击associate即可
注意:当做完实验后,为了避免产生不必要的费用,可以在左侧导航栏的 Elastc IPs 处,将所有不需要的ip选中,然后点击 actions–> disassociate address,在取消关联后,再选中点击 actions–> release address ,将选中的ip释放即可
进入EC2的管理界面,登录实例,使用curl http://169.254.169.254/latest/meta-data/
,查看元数据(我的理解就是事实变量),使用 curl http://169.254.169.254/latest/meta-data/hostname
,就可以查看主机名
使用http://169.254.169.254/latest/user-data/
,查看用户数据,如果在创建实例时,在advanced details处没有输入过数据,就会返回404找不到,也就是没有用户数据。所以我们再重新创建一个实例,在advanced details处将上面的脚本内容输入,其他步骤不变
可以查看到系统的运行日志。此时可以查看apache是否安装成功systemctl status httpd
,可以输入curl localhost
,检查默认发布页面。
使用浏览器去访问该主机的ip,此时是不成功的,因为没有开启80端口。在实例的详细信息处跳转至安全组,在inbound处点击edit,添加http,此时再从浏览器访问ip就可以访问从脚本中输入到发布页面的内容
EBS:基于块的存储卷,它是和EC2配合使用的基于块的卷,是未格式化的裸设备,可以将它看做一个硬盘分配给EC2主机去使用。同时它是高可用及高可靠性的存储设备,适用于主要存储。它可用于创建文件系统并通过操作系统挂载。注意每个卷每次只能附加给一个在同个区域的实例。它支持某个时间点的快照并存在S3上,同时它提供多种不同性能类型的卷
特点:
使用情景:可以使用多个EBS卷创建RAID 0设备来增加资源利用率,提高性能(由于aws已经做了底层硬件保护,所以就可以充分利用raid 0这样的磁盘阵列来大幅提升读写性能而不去在意设备损坏所引起的数据丢失)
注意:IOPS是指每秒钟的io操作,可以看做是某个时间段通过的车流量
实验:
点击左侧导航栏处的volumes,此时就可以看到EC2的根卷,点击 create volume 创建新的卷(注意创建新卷前在表头上查看根卷是处于哪个域的),类型依旧选择gp2,大小输入10G,AV Zone选择根卷相同的区域即可
创建完成后,点击close,刷新volumes界面,可以看到出现两个卷,选中刚才新建的卷,点击actions–>attach volume,在进入的窗口处选择只要加入卷的实例即可
登录进入该实例,使用lsblk
命令查看卷,df -h
查看所有卷的挂载点,可以使用file 挂载在根下的设备名
查看文件类型,可以加上 -s 参数看到其文件系统是XFS类型的文件系统
给新加的卷格式化文件系统’mkfs -l xfs /dev/xvdf’,mkdir /data
,mount /dev/xvdf /data
,进行挂载,df -h
查看成功即可
扩充根卷大小
进入左侧导航栏的volumes,选中根卷,actions–> modifty volume,在弹出的窗口中修改大小即可。此时再进入实例输入lsblk
,此时可以看到它整体卷的大小已经是12G,但是其挂载的根卷依旧是8G,此时需要挂载文件系统也增加到12G
输入growpart /dev/xvda 1
即可,此时再去lsblk
查看,挂载文件系统也是12G;但是输入df -h
,发现挂载的点显示的大小依旧是8G,可以输入xfs_growfs -d /
,再查看,其挂载大小变为12G
实验结束后,在系统将新卷的挂载umount,然后进入volume界面,选中该卷,actions–> force detach volume,然后再actions–>delete volume即可。(避免一些不必要的费用产生)
概念:快照就是EBS卷在某个时刻的状态,可以实现使用快照把EBS卷备份到上s3上;快照是增量备份,就是说最近一次快照备份之后更改的数据才会被备份起来;可以使用快照来创建一个EBS卷,这个新卷是原卷在快照当时的完全复制(可以用于迁移等操作)
特点:
创建快照的过程:当做出第一次快照后,其使用了10G,随着时间的变化,其中10G中有4G发生变化。再次快照成B,此时他会保存变化的那4G,而剩下的6G会沿用之前快照时那一部分,实际上快照A和B加起来一共占用了14G,以此类推
复制快照:通过快照的复制可以实现迁移、地理扩展、灾难扩展、加密、数据保留和审计要求等场景
卷/镜像迁移的步骤:
实验:
进入EC2界面,创建一台新的实例,在第三步advanced details处写入安装apahce的脚本;第六步时在安全组处选择第二个“选择一个已经存在的安全组”,开放80和22端口,注意区域的选择
当该实例创建完成后,找到其公有ip,复制到浏览器中进行访问,可以看到成功访问apahce的发布页面
点击左侧导航栏的snapshot,进入后可以看到刚才创建的快照,点击actions就可以在里面对快照进行一系列操作。例如actions–>copy 此时可以选择另一个区域,点击copy,完成后在右上角将区域切换到刚才所选中的复制区域,进入后就可以看到快照被复制过去。可以在该区域将快照做成一个镜像(在actions中),完成后在左侧导航栏找到AMIs,此时就可以看到该镜像。镜像创建好后,又可以用于创建实例,创建完成后,在浏览器输入该ip地址访问,就可以看到apache的index.html发布页面
完成后,需要再actions–>instance static–>terminate,然后点击yes;在左侧导航栏点击AMIs,点击actions–>deregister,将其去注册;在左侧导航栏点击snapshots,actions–>delete。清理完实验环境后,再将快照删除
EBS是持久性、高可用的块存储,而实例存储是临时性块存储
实例存储位于物理主机上附加的硬盘,而EBS是独立于物理主机的。【实例存储就相当于虚拟机里面存的东西,只要虚拟机在,里面存储的东西就在,一旦虚拟机删除那么其中存储的东西也将被删除】
EC2实例存储(Instance store volumes)是一种短暂性的存储,一旦您停止或者终止您的EC2实例,这个存储内的数据将永久消失
EBS存储(Amazon EBS volumes)是一种持续性的存储,不管EC2实例是什么状态,你都可以保留EBS存储内的数据。这种类型的存储对于进行数据盘的迁移非常方便,使用场景也比较多。
实例存储是理想的临时存储解决方案,适用于存储需要经常更新的信息,比如缓存、缓冲、临时数据或者从一组实例上复制的数据,如web服务器的负载均衡池;实例存储的虚拟设备为 ephemeral[0-23]
实例存储的生命周期:实例存储只能在某些实例启动时使用;该存储方式不能从一台EC2实例分离并附加到另一个实例;当EC2实例重启时,实力存储的数据时可以保留的,但是当实例stop或terminate(终止、结束),实例存储的数据会丢失,而EBS是可以选择数据保留或删除
实验:
首先进入EC2界面,在左侧导航栏处找到 security groups --> create security groups ,在弹出的窗口处输入自定义名和描述,点击左边的add rule,在type处的下拉菜单中选择nfs,在source处选择custom,后面要选择ssh的安全组,create
连接上两台实例,输入sudo -s
切换到root用户,再输入yum install -y amazon-efs-utils
, mkdir /efs
, mount -t efs 一串字符串(所创建efs的id):/ /efs
, 此时使用 df -T
就可以查看是否挂载成功
此时在一台实例的 /efs 目录下创建一个文件,去另一台实例查看,该文件也存在。也就说明两个实例访问的是同一个efs的文件系统
注意做完实验后清理实验环境,在efs界面,勾选efs后,点击actions,选择delete(需要将它的id输入以确认删除);在ec2界面,在左侧导航栏,找到安全组,将不需要的(efs)安全组删除;将两个实例 terminate
EC2服务总是尝试把实例分配到不同的底层硬件上,来最小化硬件故障带来的影响。而置放群组(PG)就是用来影响如何放置一组相互依赖的实例,以满足不同负载的要求的功能
分类【下面这三种类型可以理解为置放群组的三种不同分配方法(同分异构)】:
集群置放群组(cluster placement group):基于一个AV zone里的逻辑实例组,组里的所有节点以10G/s的宽带互联,适用于有低延迟和高宽带网络要求的应用。集群置放群组是将启动的EC2实例尽量放置在一起——同一机柜或者相邻机柜,减少实例间的物理距离,一般用于从低网络延迟和/或高网络吞吐量中受益的应用程序,以及在大部分网络流量处于该组中的实例之间的情况下,建议使用集群置放群组。
分区置放群组(partition placement group),Amazon EC2 将每个群组划分为多个逻辑段(称为“分区”)。Amazon EC2 确保置放群组中的每个分区具有自己的一组机架。每个机架具有自己的网络和电源。置放群组中的任何两个分区将不会分享相同的机架,从而让您可以在您的应用程序中隔离硬件故障的影响。在一个AV zone里面最多有7个分区,一个分区PG可以拥有在同个地区不同AZ的分区;每个分区使用相同或类似的实例类型,适用于大型分布式和复杂型的负载类型
下图是单个可用区中的分区置放群组简单的直观表示。它显示了放入到一个分区置放群组的实例,该置放群组具有三个分区 — 分区 1、分区 2 和 分区 3。每个分区均包含多个实例。一个分区中的实例不与其他分区中的实例共享机架,这使您可以将单一硬件故障的影响限定在相关的分区内。
分布置放群组(spread placement group):组里面的每个实例使用不同的机柜,网络和电源;组可以分布到一个地区的不同AZ,每群组每AZ最多7个运行实例;适用于混合不同的实例,以处理不同的应用类型
建议在具有少量应单独放置的重要实例的应用程序中使用分布置放群组。通过在分布置放群组中启动实例,可以降低在实例具有相同机架时同时发生故障的风险。分布置放群组可以访问不同的机架,因而适合混用不同类型的实例或随着时间的推移启动实例。
实验:
进入EC2的管理界面,在左侧导航栏处有一个 placement groups 点击进入。点击 create placement group 输入自定义名称,strategy处选择 spread ,点击create即可;可以再创建一个 partition类型的,在下面的数量处制定3个,点击create接口
此时就可以向放置群组里面放入实例了,创建3个实例,可以在第三步的 number of instance 处输入3;在下面有一个 placement group 勾选 添加实例到放置群组,在 placement group name 处勾选 添加已经存在的放置群组,然后先选择放入partition处,其他默认即可。
现在如果想要更改其中某一台实例的置放群组类型,要使用命令行的形式进行,首先需要将要换分区的实例停掉,在actions–>instance status --> stop,现在需要选择其中另外一台实例对其新建role,这个role的权限就是可以对这些实例操作的role , actions -->安全 --> attach/replace IAM role,create new role ,create role ,在进入的界面中选择 EC2,next,在进入的页面中的搜索中输入 ec2 来寻找可以赋予ec2管理权限的 fullaccess,next ,后面都是命名即可。然后将这个role指定给实例
登录到赋予ec2权限的实例,首先输入 aws configure
在第三行输入它所在的区域,进行简单的配置。将stop状态的实例id(选中该实例查看详细信息里就可以找到)复制 。 aws ec2 describe-instances --instance-id 实例id
可以查看该实例的事实变量。aws ec2 modify-instance-placement --instance-id 实例id --group-name spread的置放群组名
此时就可以将原本处于partition的实例改变到spread处。去实例去查询,可以看到其置放群组确实发生改变。