《云计算应用架构》样章连载3

2.2 Amazon EC2

Amazon EC2

大多数人想到Amazon云时,想到的都是Amazon EC2EC2是你的虚拟网络,里面运行着所有虚拟机。但是,EC2没法单独存在。用EC2时,需要用S3来存储EC2的机器映像(一会儿我们展开谈),也可以用S3来满足其他存储需求。如果你认为不需要了解S3而跳过了前面的章节,现在请翻回去补上。

2.2.1 EC2里的概念

EC2 Concepts

EC2S3复杂得多。图2-1不仅显示了构成Amazon EC2的所有概念,还展示了这些概念之间是如何关联的。

主要的概念有:

实例

EC2的实例是虚拟服务器,克隆自机器映像,实例上运行何种访客操作系统取决于机器映像。

Amazon机器映像(AMI)

服务器的一份原始拷贝,可以用它来启动任意数量的实例。如果你熟悉ghosting这个概念,机器映像代表的就是ghost出来的映像,从该映像可以创建任意数量的服务器。机器映像至少应包含操作系统这个核心部分,除此之外,可以再预装些常用的工具。如果开发策略允许,也可以预先在其上装好Web应用程序。Amazon提供了些现成的AMI,刚接触EC2时可以从它们开始。值得一提的是,有很多第三方提供的AMI。当然,也可以建立你自己的AMI

弹性IP地址

这是分配给你的静态IP地址(“弹性”这个词有点误导人,相信我,这个词指的就是静态地址,不是动态地址)。默认情况下,每个Amazon实例都有一个动态分配的IP地址,实例消亡后,该地址会分配给别的用户。弹性IP地址会为你保存下来,因此,对那些必须总是通过相同的静态IP地址来访问的实例来说很有意义。

地区

一组可用性区域,构成了单独一个地理上的集群。在本书出版时,Amazon EC2的服务水平协议(SLA)保证,在为期12个月的时间内,一个地区内至少有两个可用性区域,其可用性达到99.95%.

可用性区域

大致相当于数据中心。Amazon保证两个可用性区域不会有任何相同的故障点。当前,Amazon在美国有3个可用性区域,全都分布在东海岸。Amazon在欧洲有两个可用性区域。可用性区域还可以定义为:能启动实例,并能为应用程序创建某种地域冗余度的地方。

安全组

打个不太恰当的比方,安全组就相当于处于防火墙管理下的网段。实例启动后,可以加入安全组,安全组定义了谁能与新实例通话。

块存储卷

SAN在概念上相似,它提供了块级别的存储,能从EC2实例上挂载。可以按照你的喜好来格式化卷,向卷中写任意数据,甚至可以将多个卷放到一起组建虚拟RAID

快照

只要你愿意,任何时候都可以对块存储卷拍“快照”,用于备份或复制。这些快照存放在S3中,它们可以用来创建新的卷。

对比机器映像与实例

刚开始使用Amazon EC2进行云中的探索时,如果对机器映像(AMI)和实例的区别没法彻底弄明白,千万不要因此灰心。然而,弄清它们的区别非常重要,要想在云中获得长期收益,机器映像管理策略是关键。

机器映像是原型,根据它来创建虚拟服务器。要想对“什么是机器映像”获得直观的感觉,最好将它想象成服务器硬盘的拷贝,并且,只有新服务器启动时,该硬盘拷贝才被克隆过去。“新服务器”就是实例。每次启动一个实例,EC2都把机器映像拷贝到新实例的虚拟硬盘上,然后才开始启动实例。从一个机器映像可以创建任意数量的运行时实例。

用开发人员的术语来说,如果把机器映像想象成编程语言中的类,EC2实例就是对象实例。

2.2.2 访问EC2

EC2 Access

S3一样,主要通过Web Services API访问Amazon EC2。在Web Services API之上,Amazon还提供了许多交互式工具,如:

l   Amazon Web Services控制台(http://cosole.aws.amazon.com;见图2-2)。

l   ElasticFox火狐插件。

l   Amazon命令行工具。

一旦用熟了Amazon,你可能会选用一些更健壮的基础设施管理工具,如enStratusRightScale。然而,刚开始时,可以多用用Amazon提供的各种工具。本章剩余部分的例子集中讨论命令行工具,该工具可从http://developer.amazonwebservices.com/connect/entry. jspa?externalID=351下载。下载完工具后,其他事情就简单了。不管最终用怎样的工具,命令行工具总是需要的。

2.2.3 建立实例

Instance Setup

EC2里面,最简单的事就是启动一个实例。该动作动态地建立一台服务器,使其进入可用状态。

实例从存储在S3中的AMI启动。Amazon提供了一些预先建立好的机器映像,还可以买到一些商业映像。一旦用熟了EC2,甚至可以创建和注册自己的机器映像。

警告

由于机器映像存储在S3中,所以,如果Amazon S3无法访问,则无法启动新EC2实例。

可以通过命令行工具来查看有哪些机器映像已经准备就绪,可以使用:

ec2-describe-images -o amazon

-o amazon这个选项告诉命令行工具,寻找Amazon拥有的所有机器映像。刚开始时,你可能会选一个Amazon或别的供应商提供的标准映像来用。可以对这些标准映像进行定制,创建自己的映像并注册到Amazon中。要查看自己注册了哪些映像,可键入:

ec2-describe-images

输出大致会是:

IMAGE    ami-225fba4b    ec2-public-images/fedora-core4-apache-mysql-

v1.07.manifest.xml   amazon     available    public        i386   machine

输出的第二部分是映像ID。在所有其他场合中,不管用命令行工具还是用Web Services API,都要用这个值来代表映像。

第三部分是个S3对象,代表了机器映像的清单文件。清单文件向EC2描述了机器映像,ec2-public-images是存储映像的桶,fedora-core4-apache-mysqlv1.07.manifest.xml是代表映像清单文件的对象。

第四部分是机器映像的所有者在此是Amazon。第五部分描述了映像的状态。第六部分标出映像是公开还是私有的。

第七部分,i386,标识了映像的目标架构。Amazon目前支持两种架构:Intel 32位(i386)和Intel 64位(x86_64)。

最后一部分标出了该映像的类型:机器、内存盘还是内核。目前我们只关心机器映像。

选择AMI

EC2中选一个初学者使用的映像曾经很容易。现在的情况有所变化,有很多Amazon建立的AMI、第三方建立的AMI,你拥有广泛的选择空间。要说出哪个AMI名声好,哪个是垃圾,哪个又可能有木马或后门,这还真是件难事。幸运的是,Amazonhttp://aws.amazon. com/amis上给出了一个目录,附带着评论和评级。通常会从选择你喜欢的Linux开始(虽然现在也可以选其他类型,如Unix,甚至是Windows)。需要先找一个由别人建立的AMI,它工作在你所希望的架构上,小巧精悍,只包含所需的最小特性集,同时又久经考验。这样一个AMI可以作为你进一步定制的基础。我个人喜欢由Eric Hammond创建的Ubuntu AMI

不管选了什么,都应该从尽可能基本的东西开始,逐渐安装别的工具和服务。新工具和服务应该是支撑Web应用程序所必须的。在忙着安装东西之前,应该用诸如Bastillehttp://www.bastille-unix.org)之类的工具加固服务器(译注1),安完定制的应用程序后,应再次加固。有关Amazon实例安全方面的细节,请参见第5章。

选好机器映像之后,下一步是启动基于机器映像的虚拟服务器实例:

ec2-run-instances AMI_ID

例如:

$ ec2-run-instances ami-1fd73376

EC2要么返回失败信息,要么返回新实例的“预订”信息:

RESERVATION    r-3d01de54    1234567890123    default

INSTANCE    i-b1a21bd8    ami-1fd73376           pending        0

    m1.small   2008-10-22T16:10:38+0000    us-east-1a    aki-a72cf9ce

    ari-a52cf9cc

在这个例子中,情况很简单,预订和实例的区别体现得不明显,因为我只启动了一个实例。当启动实例时,不是只能一次启动一个可以指定实例的最大和最小值。命令返回的预订信息中,描述了本次请求实际可以启动多少个实例。

例如,当到达一天的业务高峰时,可以启动新应用服务器来分散网站的压力。如果想启动10个实例来应对增加的负荷,有可能在你请求的那个特定时刻,哪个可用性区域中都没有足够支撑10个实例的资源。如果在没有10个实例资源的时候请求10个实例,请求会失败。然而,可以请求最小5个,最大10个实例。只要有足够支撑5个实例的资源,命令就能成功。预订信息会提供成功启动了的实例信息。

实例描述信息中,如下一些东西很重要,值得关注。

i-b1a21bd8
    这是实例ID。在其他命令和Web Services API中,用这个来代表实例。

ami-1fd73376
   
AMI的机器映像ID,用来启动实例。

pending(挂起)
    实例当前状态。其他可能的值还有running(运行中)、shutting down(关闭中)和terminated(终止)。

m1.small

运行的是哪类EC2实例。实例类型表明为实例分配了多少随机存取内存、磁盘空间和CPUm1.small类型是最基本的类型。

us-east-1a

实例在哪个可用性区域中启动。因为我们在命令行上没有指定可用性区域,因此,EC2根据当前使用的状况挑选最合适的可用性区域。本章后面我会更深入地讲可用性区域。

现在的任务是等待。可能要过10分钟实例才能用。在等待的时候,Amazon在忙着为实例分配资源,然后启动实例。可以用ec2-describe-instance命令来检查实例的状态。

ec2-describe-instances [INSTANCE_ID]

例如:

$ ec2-describe-instances i-b1a21bd8

RESERVATION  r-3d01de54   1234567890123   default

INSTANCE i-b1a21bd8  ami-1fd73376 ec2-75-101-201-11.compute-1.amazonaws.com

   domU-12-31-38-00-9D-44.compute-1.internal    running        0

   m1.small    2008-08-11T14:39:09+0000    us-east-1c    aki-a72cf9ce

   ari-a52cf9cc

这个输出显示,实例现在已经处于“运行中”状态了。换句话说,可以访问它了,但是,还有一点小问题:你没有机器上的用户账号。

在听我告诉你如何取得机器的一个外壳账户之前,让我们先来看看,关于这个运行中的实例,你还应该了解些什么信息。

ec2-describe-instances命令的输出与ec2-run-instances的输出几乎完全相同。不同之处在于,因为实例现在处于“运行中”状态,所以,它还提供了实例的公共IP地址和私有IP地址。当实例启动时,Amazon会为其动态分配一个公共IP地址、一个私有IP地址。应该用公共IP地址来从云外访问实例,用私有IP地址在云内访问实例。



译注1:加固软件会基于用户的选择和配置,加强操作系统各方面的安全性,使其不易被攻破。

posted @ 2010-08-27 10:56  博文视点  阅读(479)  评论(1编辑  收藏  举报