我们在关于虚拟专用服务器(VPS)的第一篇文章中探讨了为什么采用VPS,本文介绍安装和运行VPS方面的一些详细内容。
你可能想到了,要体验VPS得先有个帐户。无论你需要什么样的服务,先要建立一个帐户。即使信用卡号码已得到了核实,有些主机服务商还是要求另外核实身份。此举显然是为了防止垃圾邮件发送者、网络钓鱼攻击者和黑客使用窃取(但还没有被失主挂失或发觉)的信用卡来设置VPS。
比如说,Rackspace表示,它会在帐户建立后的15分钟之内联系你,核实身份。不过我在建立两个帐户的过程中,对方都没有联系我。
帐户建立好后,你接下来要设置实例大小。大多数主机服务商提供一份标准设置菜单供你选择:几家服务提供让你可以像点菜那样选择更多的选项。由于设置虚拟化主机服务器的方式所限,添加更多内容或硬盘存储空间常常要支付看似高得离谱的费用。那是由于变化可能使得服务商无法在同一机器上提供完整的额外服务器。
作为设置实例的一部分,你几乎总是要选择使用哪个Linux发行版。一些VPS服务商还提供Windows Server选择,收取的费用常常比同类的Linux平台贵约5%至10%。 虽然每个主机在支持哪些Linux发行版方面各不相同,但大多包括CentOS、Debian、Fedora、红帽和Ubuntu。ArchLinux、Slackware及其他发行版出现在特别的主机服务商,有些发行版只出现在由某一家公司运行的某些数据中心。在一些情况下,你还可以在32位和64位的虚拟机及操作系统之间作一选择。(我使用了多年的红帽,现在改用了CentOS。改换过程很容易。没错,我知道你所用的Linux/BSD比CentOS好得多,但我可以轻松使用该发行版,处理我想要处理的任何任务。)
标准的发行版镜像装入到虚拟机上,你安装的实例立即变得有持续性。另一方面,就算你在除亚马逊外的任何服务上关闭了实例,照样要为此支付每小时费用。必须删除了实例,服务商才不会继续收费。对于从持续性卷启动的暂停实例,亚马逊不收费。如果使用一些服务,你可以将运行中实例或暂停实例的镜像写到存储区域上(为此需要每月按每GB付费,才能使用),以后可以从该镜像还原。(亚马逊一向是个例外,它让你既可以从非持续模板镜像来启动——可以定制镜像,但是关闭镜像后,就被删除,也可以从保留所有费用的持续性卷来启动。你还可以从常规的非持续性镜像启动,指定可以挂载不同持续性卷的脚本。)
实例包括了一个公众联系得到的IP地址,但你可以添加更多地址,只需支付月费。如果你使用版本较老的Apache(支持SSL/TLS),通常只需要一个额外的IP地址。专用IP地址也可以设置,一般是免费的。这些专用IP地址(如前文所述)允许由主机服务商运行的单一数据中心里面的实例之间通讯,不另外收费。如果你在自己的运营系统之间需要频繁地来回传送数据,这极其有用。
在我看到的所有情况下,实例可以在防火墙开启的情况下创建,有时只允许SSH远程访问。连SSH访问都可能要求使用更复杂的基于密钥的验证——亚马逊就是这样,而不是只需要用户名和密码。你要执行的需要最高根用户权限的任务是在命令行配置防火墙,开启需要远程访问的服务。(不过亚马逊和另一些服务商有基于Web的防火墙配置向导。)
大多数Linux发行版随带相关的更新服务,比如Fedora和CentOS随带的 yum,Debian和Ubuntu随带的apt。由于我的一些硬件服务器运行了好几年,需要大量定制才能正常运行,所以我很少享受到自动化更新带来的便利。你应该享受得到。
我的发行版架构唯一遇到问题的地方是SSL/TLS和Apache。Apache的CentOS 5.5发行版并不包括对服务器名称指示(SNI)的支持,该功能让多台SSL/TLS Web服务器可以共用同一个IP地址。我只好卷起袖子,动手编译更新版本的openSSL和Apache。问题迎刃而解,但的确失去了不需要编译自身软件的一点乐趣。目前我在等待MySQL 5.5,该版本现在已有,但还不是CentOS 5.5更新发行版的一部分。
你甚至可以安装升级后的内核,或者甚至干脆换掉内核。不过这么做有危险。VPS主机对于你运行的逻辑机器通常只提供有限的支持;即使那样,也只是针对服务商提供的标准发行版。如果你升级内核或者转换操作系统,又出了什么差错,你可能只好回到之前保存的镜像。
一旦你设置了合自己心意的机器,几乎总是会有保存镜像的选项:这有时与单独计费或按需备份的系统联系在一起。保存镜像是服务器的精确克隆版本,被大多数主机用来创建新的实例。如果你有理由要转换或建立冗余机制,镜像通常还可以在同一家公司运行的多个数据中心之间迁移。
实例创建并运行起来后,可能会出现什么差错呢?会出好多差错。但是运行得当的VPS主机能够在很大程度上抵消潜在问题。
#p# 通过仪表板的远程操作
使用VPS的目的是不用太担心硬件。对于我和我所了解的同事来说,确实是这么回事。但可以减少顾虑,并不意味着运行VPS的所有硬件根本不会出问题。有时候,硬件会出故障。好的主机在现场备有数量众多的冗余硬件,以更换难免出现故障的主机和驱动器。(想详细了解提供商们如何构建服务器的驱动器,参阅下面的备份部分。)
如果虚拟化主机出了故障——我完全改用VPS主机后没过几星期,就摊上了这档事,服务提供商转移或重新指向驱动器阵列,假如阵列没有损坏的话;或者迁移镜像,即把镜像拷贝到其他服务器上未预留、未使用的空间。以我的情况为例,我的服务器拷贝过去,在新的主机上重新启动,服务只受到短暂影响。IP地址及其他特性自然保持一样。
但是如果硬件完好,虚拟机方面遇到了问题,可以求助于仪表板(dashboard)。服务提供商提供了众多仪表板,包括得到广泛支持的开源前端、内部开发的Web应用程序以及采用商业许可证的软件。基本仪表板可以显示服务器的运行状况,让你控制参数(包括升级),提供关于使用情况的图表及其他统计数字,以及提供恢复、还原和备份实例的功能。
仪表板的远程访问功能在几种情况下很关键。首先,如果你联系不上实例,如果能够建立基于Web的Java或AJAX终端会话,直接通过主机硬件获得访问,就能起到很大帮助。这让我好几回得以弄清楚根源出在路由问题上,而不是实例坏掉。如果你愚蠢地禁用了接口,或为适配器设置了无法联系的IP地址,也可以使用这项基于Web的访问功能来解决网络接口问题(实不相瞒,我就没有配置好远程网络适配器。)
你还可以在采取下一步之前,使用远程访问功能,弄清楚你的实例处于多糟糕的状况。我分析了自己直接使用的服务和图表中调查的那些服务后,发现恢复是四种服务之一。
软重启。摁一下Web按钮,即可重启暂停所有进程的虚拟镜像,其行为就像物理机器上的软重启。如果机器完全陷入停顿或者无法联系上,你也无法通过SSH会话来联系,有时软重启必不可少。近几个星期我在调试Apache时,只好使用软重启:我们根本没有为VPS分配足够多的内存,Apache老是卡住。能够软重启(或有时通过基于Web的终端,暂停、重启Apache)让我们不至于抓狂。
硬重启。这个选项用来模拟断电上电。现有镜像的内存减少了,虚拟机从存储镜像重新装入。这有时是致命的,具体取决于出现的问题;这时可能少不了日志或其他磁盘恢复。
恢复。Linode等一些主机服务商让你启动与你所用的发行版一模一样的未改动发行版,把受损实例作为一个驱动器挂载到启动磁盘上。然后,你可以试图修复引起这个问题的故障,或者如果看起来无法作为启动系统来恢复,将数据传输出去。
还原。要是别的所有办法都失灵,你可以选择之前创建的磁盘镜像备份来还原,清除在此期间所作的任何变化,有助于返回到可以使用的实例。
要是你非得面对存放在托管数据中心或者甚至在你自己办公室的自有硬件,可以考虑采用上述操作中的某一种。每种操作需要打电话给提供商,或者使用远程断电上电设备。从镜像来恢复或还原需要数小时,也很麻烦,包括需要另外的硬件帮助恢复。
最后要介绍的是备份,这恰恰表明了VPS实例有多健壮,并且可以帮助你应对可能出现的其他问题。
#p# 备份、备份、备份
我不是存心把你搞糊涂,但你一定要为备份、备份的备份、备用备份的备份,可能还有更多的备份而操心。
我得坦白承认,在改用VPS主机的过程中,我差点儿抓狂。我迁移了所有系统,更换了DNS,突然觉得自己缺乏安全保障。于是我作了更多的备份,还因而安排了更多的方法,以便可以始终访问自己的数据。
VPS把你的所有鸡蛋都放在一只篮子里。你的文件、程序和操作系统都放在划分成几部分的磁盘上,只有借助虚拟化管理软件才能联系上磁盘。 大多数服务依靠RAID10来获得冗余机制(RAID10是RAID1+0,一组组双驱动器经过镜像和条带化处理。这增强了性能。RAID10系统中每一个镜像组中的一个驱动器出现故障后,数据不会丢失。)
有些服务商不断地增量备份RAID10系统,那样即使出现了灾难性故障(任意镜像组中的两个驱动器同时出现故障),也有可能还原到最近的备份点。不是所有服务商都提供这种机制,连提供这种机制的那些服务商也可能面临漫长的恢复过程。
几乎所有服务商都提供VPS镜像功能,采用两种定价方式中的一种。备份镜像是运行中系统的完整快照,这意味着数据库和文件在备份时可能打开着。不过,它是完全可以恢复的镜像。对于大多数提供商来说,镜像备份在夜间执行,通常是在设定的周期性时间或设定的时间段内进行。这种情况下,为每周和每月保留了一份夜间备份;随后进行的备份成功执行后,最旧(通常是八天前)的数据被丢弃。你还可以经常手动创建一个或多个额外的快照。一些提供商让你可以根据需要进行备份,但并不使这个过程自动化。
顺便说一下,这些镜像通常用于从同一个起始点创建新的VPS。你可以创建一个样板发行版,为它添加必要的文件或脚本,然后可以根据需要创建和停用。这些镜像似乎无法在不同的VPS主机之间完全移植,因为不同的主机可能调整了虚拟化主机软件,或者采用全然不同的架构。(除非你有一个极其非典型的基本架构,否则你常常只能拷贝数据、调整一些配置文件以及恢复运行。)
一些主机服务商按GB量确定备份费用:根据虚拟磁盘里面存储的实际数据,而不是某个VPS磁盘的全部容量,你只要为保留的备份支付存储费就行。除了自动化的每夜、每周和每月备份外,你还可以保留许多镜像备份,或者一个备份都不保留。如果你存储大量数据,这么费用很高。如果保留VPS的五个备份,使用的存储空间为100GB,Rackspace收取的费用将是每月75美元(15美元乘5)。
其他主机服务商收取统一的备份费用。比如在Linode,备份费用与VPS的大小有关,包括四种快照:每日快照、每周快照、每月快照和按需快照。费用是每分配给一个实例256MB内存,每月收费2.50美元,费用从512MB服务器5美元到4GB服务器40美元不等。
这是层次相当多的备份,是不是?RAID 10中的镜像驱动器可能单独备份,还有多个磁盘镜像用于还原,以防驱动器出现灾难性故障以及备份驱动器出现故障。
一个问题是:这些都在同一个数据中心。同时出现故障的可能性很小,但是要考虑地震、天然气爆炸、炸弹、严重雷电以及导致灭火系统失灵的火灾,等等。
凡是对你来说很重要的数据,你都要有异地备份,最好妥善放在远离数据中心的地方。对于VPS来说有几个方案的效果很好。亚马逊和Rackspace等一些提供商在多个数据中心提供了“云文件”存储,并且让你可以访问镜像,在数据中心之间拷贝文件,只要支付传输费以及每月在其他地方的存储费。
你还可以在虚拟机里面运行脚本或软件,直接从文件系统提取和备份数据。FUSEOverAmazon(https://code.google.com/p/s3fs/wiki/FuseOverAmazon)这个项目提供的脚本让你可以将亚马逊的S3存储作为FUSE驱动器来挂载;FUSE允许非典型的存储或系统看起来就像是系统上的另一个挂载驱动器。然后,任何本地备份脚本都可以写到S3上,好像它是本地存储。(当然,平常的S3传输、存储和处理等费用照收不误!)
我还试用了Jungle Disk(https://www.jungledisk.com/)和CrashPlan(http://www.crashplan.com/),目前仍在使用。Jungle Disk的服务器版(Server Edition)其费用标准是每个机器每月5美元,存储费用另外收取。你可以安装Linux或Windows服务,但不需要在配置的服务器上有GUI,只需要命令行。安装完成后,可以使用面向Mac、Windows或Linux的管理界面,用来远程配置和监控。
Jungle Disk执行增量备份,仅仅发送需要上传、以便还原变化数据的那部分文件。这使得传输费和存储费比较低。软件可与亚马逊S3 或Rackspace(Jungle Disk母公司)的Cloud Files协同运行。就你选择的服务而言,Jungle Disk每月提供10GB的免费存储空间。亚马逊的费用通常是每上传1GB收费0.10美元(每下载1GB收费0.15美元,下载用于还原及其他信号交换),每月存储1GB照收0.14美元。
Rackspace完全放弃了传输费,每月每存储1GB收费0.15美元。(不过如果你选Rackspace为主机服务商,要付VPS传输费。)
CrashPlan的各项服务方案都提供没有限制的存储空间,每月收费5美元起。CrashPlan的Linux软件可以通过Linux GUI或者进行一番调整(网上有介绍)来配置,可通过在Mac或Windows平台下的公共IP地址来远程访问。CrashPlan可以将同样文件备份到自己的托管存储空间,也可以备份到归你控制的计算机上。我们备份到CrashPlan的服务器上,还备份到用户内部的硬盘上,进一步增强安全。
结束语
我在文章开头讲到了到底为什么我们需要拥有服务器硬件。我在从物理机改换到虚拟机的过程中,只是遇到了几个小障碍,但没一个让我产生后悔的念头。改用主机服务商的目的应该是提高资源潜力,消除或减少资金开支,以及杜绝将时间浪费在管理设备上的任何现象。
这一切自然是需要付出费用的,但是目前市场竞争激烈,这带来了优惠的价格,但不是价格战。你也不需要价格战,因为那样的话,你喜欢的提供商可能因抢不到业务而倒闭,或者收入太少,因而无法处理大批新业务。相反,价格看起来很公道。
对于合适的公司或个人来说,我觉得VPS能够满足你大约99%的需要;而VPS减小管理负担和开支的优点,加上出色的备份方案,足以掩盖其瑕疵。
原文链接:http://arstechnica.com/business/news/2011/02/the-abcs-virtual-private-servers-part-2-getting-started.ars