虚拟化技术是云计算实现弹性计算的核心技术。在构建云计算平台中,虚拟机的安装是基础。常用的虚拟机工具很多,如VMware、XEN、KVM、Virtual PC等,这些工具使得用户可以在单台物理PC上(称为宿主机)虚拟出多个虚拟机VM(Virtual machine),由于在每个VM上可以安装与宿主机不同的操作系统。因而可以实现在一台物理PC上模拟出多台安装有不同操作系统的“PC”。在云计算中,用户可以向云平台申请租用虚拟机,虚拟机的配置,如CPU的核数、主频,内存,存储容量等可以根据需要自己设定,并可动态修改。现有虚拟机工具多支持这些功能,然而很多工具如VMware、XEN-Server等提供的免费测试工具多只提供GUI接口,用户只能通过图形界面实现虚拟机的创建和配置,无法实现动态的配置,以至于构建的云平台退化为不具有弹性的“虚拟机平台”。
Xen 是由剑桥大学开发的一款开放源代码虚拟机工具软件,支持虚拟机的各种配置和动态创建,最重要的是提供了丰富的用户管理接口。
在物理PC的Fedora上安装XEN,并登录XEN后,即进入虚拟机的宿主环境Domain0,用户可在Domain0的基础上创建DomainU虚拟机,并需要在DomainU虚拟机上安装新的操作系统。例如下图,在物理宿主机Host上安装Fedora12,然后在此基础上借助与XEN虚拟机管理工具创建两台Guest虚拟机,两台Guest也安装Fedora12(当然也可以安装其他的操作系统,如Ubuntu等)
Amazon EC2 占用的地理空间为美国东海岸3 个数据中心、西欧两个数据中心。你可以单独登录到Amazon 欧洲数据中心的账户上,但是,不能混搭使用美国环境和欧洲环境。在这些环境中,服务器运行的是高度定制化、使用准虚拟化技术的Open SourceXen 管理程序。该Xen 环境不但能够动态准备和撤销虚拟服务器,还能为访客服务器提供互相隔离的计算环境。
如果想在Amazon 环境中启动一台虚拟服务器,需要启动一个基于预定义Amazon 机器映像(Amazon machine image,AMI)的节点。AMI 包含了操作系统和所有其他预先建立好的软件。多数人开始时会选用一个标准AMI,上面带着他们喜欢的操作系统,然后对其进行定制,创建出一个新映像,最后,基于定制的映像启动服务器。
EC2 自己有两类存储方式:
绑定到节点上的临时存储,随着节点一起消失。
像 SAN 那样工作的块存储,能够长期保存。
亚马逊弹性云EC2虚拟机
亚马逊弹性云使用Xen虚拟化技术。每个虚拟机,又称作实例,能够运行小、大、极大三种能力的虚拟私有服务器。Amazon利用EC2 Compute Units去分配硬件资源。EC2系统提供以下的虚拟机实例类型:
微型实例:默认配置了613MB的存储器,一个虚拟核心上运行两个EC2 Compute Unit,免费试用一年
小型实例:默认配置了1.7GB的存储器,一个虚拟核心上运行一个EC2 Compute Unit
大型实例:默认配置了7.5GB的存储器,两个虚拟核心上各运行两个EC2 Compute Units
极大实例:默认配置了15GB的存储器,四个虚拟核心上各运行两个EC2 Compute Units
AMI(Amazon Machine Image)是Amazon虚拟机镜像文件,它是一个可以将用户的应用程序、配置等一起打包的加密机器镜像。用户创建好AMI后,部署在EC2平台上运行,称为一个EC2实例。每个实例自身包含一个本地存储模块(Instance Local Store),临时存放用户数据。如果EC2实例运行过程中出现故障或者实例被终止,存储在其中的数据将会丢失。因此,Amazon建议将重要的数据保存在EBS中以增强可靠性。
自动缩放
自动缩放(Auto Scaling)可以根据用户自定义的条件,自动调整EC2的计算能力。多个EC2实例组成一个自动缩放组(Auto Scaling Group),当组内的实例负载过高,比如CPU平均使用率超过70%时,可以定义缩放规则自动增加EC2实例;同样地,当组内的实例负载过低时,可以自动缩小EC2实例规模以降低成本。
EC2根据计算能力将实例分为多种类型,如下表:
资源 | Small | Large | Extra Large | High-CPU Medium | High-CPU Extra Large |
平台 | 32位 | 64位 | 64位 | 64位 | 64位 |
CPU | 1ECU | 4ECU | 8ECU | 5ECU | 20ECU |
内存 | 1.7GB | 7.5GB | 15GB | 1.7GB | 7GB |
存储容量 | 160GB | 850GB | 1690GB | 350GB | 1690GB |
EC2的一个计算单元称为一个ECU(EC2 Compute Unit),其计算能力相当于1个1.0GHz 2007 Xeon处理器。EC2平台不支持虚拟机实例在线迁移,如果用户需要调整实例类型,EC2内部实现时逻辑上分为两步:a) 终止原有的EC2实例;b) 根据一定的策略(比如负载)动态选择新的服务器节点启动新的EC2实例。自动缩放功能一般会配合弹性负载均衡功能一起使用,弹性负载均衡组件能够自动将流量转发给新实例。
网络路由
通过自动缩放技术,当EC2平台检测到某个实例出现故障时,将动态选择新的节点启动新实例,每个实例重新启动后它的公共IP地址都会发生变化。Internet用户通过域名访问EC2实例,然而,需要一段比较长的时间才能更新公共IP地址与DNS之间的映射关系。为了解决这个问题,EC2提供了两种方式:
-
弹性负载均衡:EC2新实例重启后通知弹性负载均衡组件,弹性负载均衡组件能够自动将流量切换到新实例。
-
弹性IP地址:弹性IP地址和用户账号而不是和某个特定的实例绑定,EC2用户可以将DNS域名设置为指向弹性IP地址。 新实例启动时,EC2用户只需要使用管理工具将弹性IP地址与新的实例关联起来,Internet用户感觉不到任何差异。
-
EC2存储
EC2本地存储是实例自带的磁盘空间,但它并不是持久的,也就是说这个实例所在的节点出现故障时,相应的磁盘空间也会随之清空,本地存储上的数据随时有丢失的风险。
为了解决本地存储不可靠问题,EC2推出了EBS,数据在EBS中自动在同一个可用区域内复制多份。EBS通过卷来组织数据,每个EBS卷只能挂载到一个EC2实例。EBS卷并不与实例绑定,而是与用户帐号绑定。当EC2实例发生故障时,用户可以在新启动的EC2实例上重新挂载EBS卷。另外,EBS能够以快照的形式将数据增量备份到S3,而S3的数据分布在多个可用区域,进一步增强了可靠性。EBS的设计原理如下:
如上图,EBS包含两个部分:EBS控制层(EBS control plane)及EBS存储节点。EBS客户端通过EBS control plane创建逻辑卷,获取逻辑卷每个副本所在的EBS存储节点位置,然后请求EBS存储节点读写逻辑卷数据。每个逻辑卷存储在多个EBS节点上,多个副本之间数据强同步,其中有一个副本为Primary,其它的为Secondary。当Primary往Secondary传输数据失败时,将请求EBS control plane选取新的EBS节点增加副本,这个过程称为重新镜像(re-mirroring)。EBS control plane负责每个逻辑卷的Primary副本选取,如果Primary出现故障,将选择某个Secondary副本为新的Primary。EC2实例通过EBS客户端访问EBS系统,它们之间遵守一定的协议,比如网络块设备(Network Block Device,NBD)协议,从而EC2实例访问远程EBS节点上的逻辑卷与访问本地的块设备没有差别。