Azure上運(yùn)行Linux——小企鵝能否適應(yīng)?
譯文Linux狂熱者可能會(huì)認(rèn)為在微軟Azure平臺(tái)上運(yùn)行Linux虛擬機(jī)就好像是在撒哈拉沙漠里找企鵝一樣。在微軟云上如何運(yùn)行Linux?
為什么會(huì)有人想在微軟服務(wù)器上運(yùn)行Linux呢?對(duì)于有此愛(ài)好的人而言,這和喜歡攀登珠峰的人一樣,不需要理由。對(duì)于商業(yè)用戶而言,在微軟框架中運(yùn)行Linux虛擬機(jī),是把開(kāi)源技術(shù)與現(xiàn)有微軟Azure服務(wù)結(jié)合起來(lái)的機(jī)會(huì)。而對(duì)于云市場(chǎng)而言,更多競(jìng)爭(zhēng)對(duì)消費(fèi)者來(lái)講是個(gè)好消息。
云市場(chǎng)
以虛擬私有服務(wù)器(VPSes)形式存在的虛擬機(jī)已經(jīng)推出市場(chǎng)有十年之久,供應(yīng)商們利用的虛擬化技術(shù)大多都是Xen,Virtuozzo/OpenVZ 和KVM等。這些供應(yīng)商將一個(gè)物理服務(wù)器分化成多個(gè)小型虛擬服務(wù)器。用戶可以享有分配好的內(nèi)存,磁盤和網(wǎng)絡(luò)帶寬,按月使用服務(wù)。
之后的供應(yīng)商,如Amazon,Rackspace和微軟,則通過(guò)一種更精細(xì)化的協(xié)定提供相同服務(wù)。用戶可以以小時(shí)為單位使用虛擬機(jī),按流量支付帶寬費(fèi)用,并且還可以使用更多高級(jí)特性,如私有網(wǎng)絡(luò),類似SAN的存儲(chǔ)特性,卸載的數(shù)據(jù)庫(kù)引擎等。
多樣化的服務(wù)形式對(duì)終端用戶而言是好消息。2002年,一臺(tái)128MB的VPS每月收費(fèi)100美金。2006年,一臺(tái)RAM為512M的VPS每月收費(fèi)為40美金。現(xiàn)在,這種級(jí)別的VPS每月收費(fèi)不到5美金,或是每小時(shí)幾美分而已。
微軟進(jìn)入市場(chǎng)
Amazon依靠彈性云計(jì)算(EC2)享受著早期的成功,其他廠商如Rackspace也開(kāi)始很快效仿。微軟最初選擇了一種更復(fù)雜的云戰(zhàn)略。Azure最初是作為PaaS產(chǎn)品創(chuàng)建起來(lái)的,目的是讓程序員可以寫出將不同的任務(wù)與Azure APIs對(duì)話的應(yīng)用。理論上,這可以讓程序員把注意力放在代碼上,而不是擔(dān)心底層的硬件架構(gòu)。
在實(shí)踐中,程序員被迫編寫以Azure為核心的應(yīng)用,其推廣速度也很緩慢。許多企業(yè)使用Windows/Linux混合環(huán)境的后發(fā)現(xiàn),把自助管理的服務(wù)器托管到Amazon和其他云環(huán)境中比花時(shí)間調(diào)試應(yīng)用要方便得多。
2012年,微軟增加了IaaS(虛擬機(jī))產(chǎn)品,允許用戶運(yùn)行和管理他們直接控制的Windows和Linux虛擬機(jī)。
Azure 虛擬機(jī)仍然是“社區(qū)預(yù)覽”版,微軟稱之為測(cè)試版。論壇為其提供的支持也有限。你可能注意到,該產(chǎn)品還需要磨合。盡管如此,在試用該服務(wù)兩個(gè)月后,筆者發(fā)現(xiàn)Azure上運(yùn)行Linux是穩(wěn)定且易于使用的。
別有一番云滋味
基于云的服務(wù)以多種形式呈現(xiàn)給用戶,主要取決于需要什么。
SaaS:供應(yīng)商運(yùn)行一個(gè)應(yīng)用并向公開(kāi)接口給用戶。這僅僅是使用基于Web的應(yīng)用程序。如,Saleforce.com,NetSuite和37 Signals 的Basecamp。
PaaS:供應(yīng)商提供一個(gè)平臺(tái),用戶可以使用這個(gè)平臺(tái)創(chuàng)建應(yīng)用。用戶編寫并提供代碼,代碼在硬件和軟件服務(wù)上運(yùn)行。如微軟Azure最初的產(chǎn)品,甲骨文Fusion或谷歌的App Engine。
IaaS:供應(yīng)商提供虛擬機(jī)和其他架構(gòu)組件,用戶可以按需進(jìn)行配置。如Amazon EC2,Rackspace Cloud,Google Compute和微軟Azure。虛擬私有服務(wù)器也是使用不同收費(fèi)模式的IaaS產(chǎn)品。#p#
比較Azure與Amazon EC2
Azure的主要競(jìng)爭(zhēng)對(duì)手是Amazon EC2,不難看出,在Amazon取得成功后,微軟也開(kāi)始確立自己IaaS產(chǎn)品的模式。
和EC2一樣,Azure也是按時(shí)收費(fèi),并且費(fèi)率也是相同的。社區(qū)預(yù)覽版比通用版稍微便宜一點(diǎn)。按時(shí)收費(fèi)的虛擬機(jī)的真實(shí)價(jià)格取決于雙方約定的服務(wù)使用時(shí)長(zhǎng)。例如,Amazon提供現(xiàn)成實(shí)例和預(yù)付費(fèi)實(shí)例[v1] , 而微軟會(huì)為長(zhǎng)期合同打折。在存儲(chǔ)和帶寬的價(jià)格上兩家也是很也類似。通常,在Azure和EC2上運(yùn)行一臺(tái)虛擬機(jī)的成本差不多,而這或許正是微軟計(jì)劃的。
EC2能提供微軟尚不具備的特性。例如,存儲(chǔ)虛擬機(jī)磁盤(彈性塊存儲(chǔ),EBS),可以以快照形式在S3存儲(chǔ)。但是,許多Amazon服務(wù)在Azure中都可以找到類似的服務(wù)。例如,Amazon的SimpleDB與Azure的Tables類似。兩個(gè)供應(yīng)商都提供了復(fù)雜的網(wǎng)絡(luò)特性,緩存,監(jiān)控和內(nèi)容分發(fā)網(wǎng)絡(luò)選項(xiàng)。不論是哪個(gè)環(huán)境,虛擬機(jī)都可以放到美洲,歐洲或亞洲,使用全球CDN節(jié)點(diǎn)。
Azure的價(jià)值理念并非“我們的云服務(wù)更好”,而是“使用Azure平臺(tái)的同時(shí),你能享有和EC2一樣的功能”。對(duì)于部署了較多微軟產(chǎn)品的公司,Azure的早期使用者或是想要在Azure平臺(tái)上開(kāi)發(fā)應(yīng)用的公司而言,新的IaaS產(chǎn)品是將具有吸引力。
運(yùn)行Azure
使用微軟Azure需要一個(gè)免費(fèi)的Windows Live賬號(hào)和一張信用卡,用來(lái)開(kāi)充值賬號(hào)。如果你的員工已經(jīng)加入了微軟MSDN項(xiàng)目,你可能已經(jīng)具備每月享用一定量的免費(fèi)使用權(quán)。賬戶創(chuàng)建成功后,就可以進(jìn)入管理頁(yè)面,開(kāi)始添加服務(wù)。
Azure控制面板非常簡(jiǎn)單。或許漂亮的控件并不是云服務(wù)的賣點(diǎn),但Azure界面的交互體驗(yàn)令人驚奇。創(chuàng)建服務(wù)后,屏幕下方會(huì)出現(xiàn)“正在操作中”的提示信息。性能圖表和歷史都會(huì)顯示出來(lái),面板更像是一個(gè)桌面應(yīng)用,而不像一個(gè)“點(diǎn)擊-提交-等待”的Web界面。
圖一 Azure管理界面易于使用,設(shè)計(jì)感強(qiáng)。
圖二 Azure界面顯示了任務(wù)消息和狀態(tài)。
Azure 提供了若干Linux版本:CentOS 6.2,Ubuntu 12.04,SUSE Linux 企業(yè)服務(wù)器和OpenSUSE 12.1。Azure可以讓Linux用戶上傳自己的影像,但是這要求使用微軟Hyper-V服務(wù)器產(chǎn)品,而一般Linux用戶不會(huì)有這種產(chǎn)品。
圖三:創(chuàng)建一臺(tái)虛擬機(jī)的時(shí)候,有五個(gè)不同的Linux選項(xiàng)
在這篇文章中,筆者創(chuàng)建了一個(gè)名為penguin1的CentOS 6.2虛擬機(jī)。系統(tǒng)在cloudapp.net域里面為虛擬機(jī)自動(dòng)創(chuàng)建了一個(gè)域名,如果你有自己的域,也可以自定義名稱。
圖四 在Azure上安裝penguin 1
虛擬機(jī)不會(huì)直接暴露到互聯(lián)網(wǎng),而是被賦予一個(gè)10.x的IP地址。在Azure面板上面,用戶可以配置端點(diǎn)開(kāi)放防火墻端口,并對(duì)其進(jìn)行映射。例如,創(chuàng)建一個(gè)Web服務(wù)器,有必要?jiǎng)?chuàng)建一個(gè)端口80(或許是443)的端點(diǎn),這個(gè)端點(diǎn)可以映射到虛擬機(jī)所需的任何端口。
圖五 添加一個(gè)網(wǎng)絡(luò)端點(diǎn)以創(chuàng)建一個(gè)Web服務(wù)器
網(wǎng)絡(luò)防火墻是一個(gè)很好的安全特性。默認(rèn)情況下,只有端點(diǎn)22 (SSH)會(huì)被配置。如果你打算改變默認(rèn)的SSH端口,就需要改變Azure管理界面的端點(diǎn)。你還可以在管理界面對(duì)其進(jìn)行改變,然后將其映射到虛擬機(jī)上的端點(diǎn)22。
創(chuàng)建“From Gallery”可以給你很多創(chuàng)建選擇。提供名稱和尺寸等基本信息后,就可以立即開(kāi)始創(chuàng)建,耗時(shí)大約十分鐘。#p#
Root密碼是什么?
其他VPS系統(tǒng)的用戶或許想知道他們需要在哪里指定Root密碼。答案很簡(jiǎn)單:你無(wú)需指定。你指定的賬戶都可以獲取sudo權(quán)限進(jìn)行root:
[andrew@penguin1 ~]$ sudo su -
[sudo] password for andrew:
[root@penguin1 ~]#
從這點(diǎn)說(shuō),如果你想要密碼就可以設(shè)置root密碼。
存儲(chǔ)
Linux虛擬機(jī)有三類存儲(chǔ)。
第一類是擁有一個(gè)30G的root量。存儲(chǔ)在本地比較冗余,視情況,也可以選擇地理冗余,不過(guò)成本要增加33%。遺憾的是,創(chuàng)建自己的模板時(shí),如果你喜歡不一樣的文件系統(tǒng)布局或是想減少每個(gè)月的存儲(chǔ)費(fèi)用,是無(wú)法對(duì)這30G的配置進(jìn)行修改的。Root容積數(shù)據(jù)重啟依然會(huì)存在,而且在Azure存儲(chǔ)中是永久BLOB。如果你刪除一個(gè)虛擬機(jī),是可以保留其root容積的,然后,再在另一個(gè)系統(tǒng)上安裝或是將其作為新虛擬機(jī)的root容積。
你還可以盡你所能地創(chuàng)建更多容積。這就像Azure存儲(chǔ)中的BLOB一樣,具有持久性。它們的功能和SAN Volume相仿,可以讓你創(chuàng)建并將其附著到一個(gè)虛擬機(jī)上,然后減小,再附著到另一個(gè)上面。遺憾的是,沒(méi)有辦法對(duì)這些容積的大小進(jìn)行調(diào)整,這是讓人比較失望的地方。雖然你可以創(chuàng)建更大的容積,然后轉(zhuǎn)移數(shù)據(jù),刪除原來(lái)的空間,但這顯然不是一種可擴(kuò)展的方法。
當(dāng)你創(chuàng)建一個(gè)新磁盤的時(shí)候,可以把磁盤附著到虛擬機(jī)上,它就像一個(gè)新的SCSI設(shè)備,你可以安裝文件系統(tǒng)并且分區(qū)。在Azure界面創(chuàng)建了新的20G磁盤后,penguin1的dmesg顯示如下信息:
scsi 4:0:0:0: Direct-Access Msft Virtual Disk 1.0 PQ: 0 ANSI: 4
sd 4:0:0:0: Attached scsi generic sg3 type 0
sd 4:0:0:0: [sdc] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB)
sd 4:0:0:0: [sdc] Write Protect is off
sd 4:0:0:0: [sdc] Mode Sense: 0f 00 10 00
sd 4:0:0:0: [sdc] Write cache: enabled, read cache: enabled,
supports DPO and FUA
sdc: unknown partition table
sd 4:0:0:0: [sdc] Attached SCSI disk
然后可以分區(qū),安裝文件系統(tǒng):
[root@penguin1 ~]# fdisk /dev/sdc
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):
Using default value 2610
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@penguin1 ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5241198 blocks
262059 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736,
1605632, 2654208, 4096000
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@penguin1 ~]# mkdir /data
[root@penguin1 ~]# mount /dev/sdc1 /data
[root@penguin1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
28G 2.0G 24G 8% /
tmpfs 872M 0 872M 0% /dev/shm
/dev/sda1 485M 86M 374M 19% /boot
/dev/sdb1 69G 180M 66G 1% /mnt/resource
/dev/sdc1 20G 172M 19G 1% /data
如你所愿,如果你原本想在Azure門戶上刪除這個(gè)磁盤,操作會(huì)失敗,除非你首先運(yùn)行unmount命令。
最終,虛擬機(jī)會(huì)出現(xiàn)大量本地存儲(chǔ)。這種存儲(chǔ)并不存在于Azure云中,而是通過(guò)真實(shí)的物理節(jié)點(diǎn)提供。如果Azure架構(gòu)中有硬件錯(cuò)誤或其他錯(cuò)誤,而你的虛擬機(jī)又要轉(zhuǎn)移到新的主機(jī)上,那么此處保留的數(shù)據(jù)會(huì)丟失。這個(gè)文件系統(tǒng)原本是用于狀態(tài)信息,臨時(shí)抓取的數(shù)據(jù)和其他臨時(shí)文件。在Linux映像上,它以/mnt/資源的形式顯示出來(lái)。小型虛擬機(jī)可接收70G的文件系統(tǒng),而且其大小會(huì)隨虛擬機(jī)的擴(kuò)展而增長(zhǎng),Extra Large 虛擬機(jī)可達(dá)800G的容量。
筆者經(jīng)歷過(guò)Azure上的硬件錯(cuò)誤。當(dāng)時(shí),筆者的虛擬機(jī)關(guān)閉后,轉(zhuǎn)移到了一個(gè)新的硬件主機(jī)上,并在新服務(wù)器上啟動(dòng)運(yùn)行。故障之前定義的服務(wù)都正常出現(xiàn),所有的網(wǎng)絡(luò)端點(diǎn)都被順利轉(zhuǎn)移,重新對(duì)磁盤進(jìn)行mount,虛擬機(jī)運(yùn)行正常。不過(guò),之前/mnt/資源處的抓取數(shù)據(jù)丟失了,文件系統(tǒng)也是空的。#p#
不足之處
CentOS映像可以使用一些改進(jìn)。OpenLogic提供的有些東西還真是讓筆者抓耳撓腮:
1. 雖然配置了交換分區(qū),但卻沒(méi)出現(xiàn)在/etc/fstab中。創(chuàng)建了交換分區(qū)但不能用的話,那它就沒(méi)什么意義,這是一個(gè)疏忽的地方。
2. 有些默認(rèn)服務(wù)會(huì)毫無(wú)理由地運(yùn)行。例如,為什么需要CUPS?筆者并非想在云中打印。只是RAID冗余是通過(guò)Azure存儲(chǔ)層提供,不需要軟件RAID,那么為什么啟動(dòng)時(shí)要運(yùn)行mdmonitor?
3. 筆者會(huì)周期性地接收到來(lái)自fprintd的崩潰報(bào)告。移除這個(gè)服務(wù)是比較直接的做法,為什么要?jiǎng)?chuàng)建CentOS映像在一個(gè)虛擬的云環(huán)境中支持指紋生物驗(yàn)證呢?
4. iptables由一條單獨(dú)的規(guī)則啟用,目的是接受bootp,盡管INPUT輸入鏈存在默認(rèn)的ACCEPT策略。
希望這些事情會(huì)隨著Linux入住Azure而得到糾正。
性能
通常,I/O性能很贊。但看過(guò)ioping后,筆者發(fā)現(xiàn)此前創(chuàng)建的/data磁盤平均延遲為6ms,雖然/mnt/資源延時(shí)為0.4ms。Root磁盤是18ms,但是正如微軟在其文檔中解釋的,它優(yōu)化了I/O性能:
操作系統(tǒng)磁盤和數(shù)據(jù)磁盤有一個(gè)主機(jī)緩沖設(shè)定,這個(gè)設(shè)定可以在一些情況下啟用改進(jìn)的性能。但是,這些設(shè)定會(huì)影響其他環(huán)境下的性能,具體要看使用的什么應(yīng)用。默認(rèn)狀態(tài)下,用于數(shù)據(jù)磁盤讀寫操作的主機(jī)緩沖[v2] 是關(guān)閉的,而用于操作系統(tǒng)磁盤讀寫操作的主機(jī)緩沖是開(kāi)啟的。在大多數(shù)情況下,這些應(yīng)該都不會(huì)出現(xiàn)什么問(wèn)題。推薦用戶把數(shù)據(jù)密集型操作放到與OS磁盤分離開(kāi)的數(shù)據(jù)磁盤上。
圖六: Azure門戶性能一覽圖
運(yùn)算的性能取決于你選擇的虛擬機(jī)大小。在我們的示例中,微軟使用的是AMD設(shè)備,由/proc/cpuinfo顯示:
processor : 1
vendor_id : AuthenticAMD
cpu family : 16
model : 8
model name : AMD Opteron(tm) Processor 4171 HE
stepping : 1
cpu MHz : 2094.702
cache size : 512 KB
小結(jié)
可能有些人會(huì)說(shuō),在Azure上運(yùn)行Linux的好處在于這樣可以給Amazon和谷歌帶來(lái)競(jìng)爭(zhēng)。而對(duì)于終端用戶來(lái)說(shuō),其性能和價(jià)格差不多,企業(yè)管理者或許會(huì)有能力將Linux和Windows以及Azure專用的部署結(jié)合起來(lái)使用,增加自己的優(yōu)勢(shì)。雖然在Azure云中運(yùn)行Linux好似一只小企鵝企圖在炙熱的Mordor地帶安營(yíng)扎寨,但是多一個(gè)有競(jìng)爭(zhēng)力的選手對(duì)大家來(lái)說(shuō)是好消息。