Azure上運行Linux——小企鵝能否適應(yīng)?
譯文Linux狂熱者可能會認為在微軟Azure平臺上運行Linux虛擬機就好像是在撒哈拉沙漠里找企鵝一樣。在微軟云上如何運行Linux?
為什么會有人想在微軟服務(wù)器上運行Linux呢?對于有此愛好的人而言,這和喜歡攀登珠峰的人一樣,不需要理由。對于商業(yè)用戶而言,在微軟框架中運行Linux虛擬機,是把開源技術(shù)與現(xiàn)有微軟Azure服務(wù)結(jié)合起來的機會。而對于云市場而言,更多競爭對消費者來講是個好消息。
云市場
以虛擬私有服務(wù)器(VPSes)形式存在的虛擬機已經(jīng)推出市場有十年之久,供應(yīng)商們利用的虛擬化技術(shù)大多都是Xen,Virtuozzo/OpenVZ 和KVM等。這些供應(yīng)商將一個物理服務(wù)器分化成多個小型虛擬服務(wù)器。用戶可以享有分配好的內(nèi)存,磁盤和網(wǎng)絡(luò)帶寬,按月使用服務(wù)。
之后的供應(yīng)商,如Amazon,Rackspace和微軟,則通過一種更精細化的協(xié)定提供相同服務(wù)。用戶可以以小時為單位使用虛擬機,按流量支付帶寬費用,并且還可以使用更多高級特性,如私有網(wǎng)絡(luò),類似SAN的存儲特性,卸載的數(shù)據(jù)庫引擎等。
多樣化的服務(wù)形式對終端用戶而言是好消息。2002年,一臺128MB的VPS每月收費100美金。2006年,一臺RAM為512M的VPS每月收費為40美金?,F(xiàn)在,這種級別的VPS每月收費不到5美金,或是每小時幾美分而已。
微軟進入市場
Amazon依靠彈性云計算(EC2)享受著早期的成功,其他廠商如Rackspace也開始很快效仿。微軟最初選擇了一種更復(fù)雜的云戰(zhàn)略。Azure最初是作為PaaS產(chǎn)品創(chuàng)建起來的,目的是讓程序員可以寫出將不同的任務(wù)與Azure APIs對話的應(yīng)用。理論上,這可以讓程序員把注意力放在代碼上,而不是擔(dān)心底層的硬件架構(gòu)。
在實踐中,程序員被迫編寫以Azure為核心的應(yīng)用,其推廣速度也很緩慢。許多企業(yè)使用Windows/Linux混合環(huán)境的后發(fā)現(xiàn),把自助管理的服務(wù)器托管到Amazon和其他云環(huán)境中比花時間調(diào)試應(yīng)用要方便得多。
2012年,微軟增加了IaaS(虛擬機)產(chǎn)品,允許用戶運行和管理他們直接控制的Windows和Linux虛擬機。
Azure 虛擬機仍然是“社區(qū)預(yù)覽”版,微軟稱之為測試版。論壇為其提供的支持也有限。你可能注意到,該產(chǎn)品還需要磨合。盡管如此,在試用該服務(wù)兩個月后,筆者發(fā)現(xiàn)Azure上運行Linux是穩(wěn)定且易于使用的。
別有一番云滋味
基于云的服務(wù)以多種形式呈現(xiàn)給用戶,主要取決于需要什么。
SaaS:供應(yīng)商運行一個應(yīng)用并向公開接口給用戶。這僅僅是使用基于Web的應(yīng)用程序。如,Saleforce.com,NetSuite和37 Signals 的Basecamp。
PaaS:供應(yīng)商提供一個平臺,用戶可以使用這個平臺創(chuàng)建應(yīng)用。用戶編寫并提供代碼,代碼在硬件和軟件服務(wù)上運行。如微軟Azure最初的產(chǎn)品,甲骨文Fusion或谷歌的App Engine。
IaaS:供應(yīng)商提供虛擬機和其他架構(gòu)組件,用戶可以按需進行配置。如Amazon EC2,Rackspace Cloud,Google Compute和微軟Azure。虛擬私有服務(wù)器也是使用不同收費模式的IaaS產(chǎn)品。#p#
比較Azure與Amazon EC2
Azure的主要競爭對手是Amazon EC2,不難看出,在Amazon取得成功后,微軟也開始確立自己IaaS產(chǎn)品的模式。
和EC2一樣,Azure也是按時收費,并且費率也是相同的。社區(qū)預(yù)覽版比通用版稍微便宜一點。按時收費的虛擬機的真實價格取決于雙方約定的服務(wù)使用時長。例如,Amazon提供現(xiàn)成實例和預(yù)付費實例[v1] , 而微軟會為長期合同打折。在存儲和帶寬的價格上兩家也是很也類似。通常,在Azure和EC2上運行一臺虛擬機的成本差不多,而這或許正是微軟計劃的。
EC2能提供微軟尚不具備的特性。例如,存儲虛擬機磁盤(彈性塊存儲,EBS),可以以快照形式在S3存儲。但是,許多Amazon服務(wù)在Azure中都可以找到類似的服務(wù)。例如,Amazon的SimpleDB與Azure的Tables類似。兩個供應(yīng)商都提供了復(fù)雜的網(wǎng)絡(luò)特性,緩存,監(jiān)控和內(nèi)容分發(fā)網(wǎng)絡(luò)選項。不論是哪個環(huán)境,虛擬機都可以放到美洲,歐洲或亞洲,使用全球CDN節(jié)點。
Azure的價值理念并非“我們的云服務(wù)更好”,而是“使用Azure平臺的同時,你能享有和EC2一樣的功能”。對于部署了較多微軟產(chǎn)品的公司,Azure的早期使用者或是想要在Azure平臺上開發(fā)應(yīng)用的公司而言,新的IaaS產(chǎn)品是將具有吸引力。
運行Azure
使用微軟Azure需要一個免費的Windows Live賬號和一張信用卡,用來開充值賬號。如果你的員工已經(jīng)加入了微軟MSDN項目,你可能已經(jīng)具備每月享用一定量的免費使用權(quán)。賬戶創(chuàng)建成功后,就可以進入管理頁面,開始添加服務(wù)。
Azure控制面板非常簡單?;蛟S漂亮的控件并不是云服務(wù)的賣點,但Azure界面的交互體驗令人驚奇。創(chuàng)建服務(wù)后,屏幕下方會出現(xiàn)“正在操作中”的提示信息。性能圖表和歷史都會顯示出來,面板更像是一個桌面應(yīng)用,而不像一個“點擊-提交-等待”的Web界面。
圖一 Azure管理界面易于使用,設(shè)計感強。
圖二 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用戶不會有這種產(chǎn)品。
圖三:創(chuàng)建一臺虛擬機的時候,有五個不同的Linux選項
在這篇文章中,筆者創(chuàng)建了一個名為penguin1的CentOS 6.2虛擬機。系統(tǒng)在cloudapp.net域里面為虛擬機自動創(chuàng)建了一個域名,如果你有自己的域,也可以自定義名稱。
圖四 在Azure上安裝penguin 1
虛擬機不會直接暴露到互聯(lián)網(wǎng),而是被賦予一個10.x的IP地址。在Azure面板上面,用戶可以配置端點開放防火墻端口,并對其進行映射。例如,創(chuàng)建一個Web服務(wù)器,有必要創(chuàng)建一個端口80(或許是443)的端點,這個端點可以映射到虛擬機所需的任何端口。
圖五 添加一個網(wǎng)絡(luò)端點以創(chuàng)建一個Web服務(wù)器
網(wǎng)絡(luò)防火墻是一個很好的安全特性。默認情況下,只有端點22 (SSH)會被配置。如果你打算改變默認的SSH端口,就需要改變Azure管理界面的端點。你還可以在管理界面對其進行改變,然后將其映射到虛擬機上的端點22。
創(chuàng)建“From Gallery”可以給你很多創(chuàng)建選擇。提供名稱和尺寸等基本信息后,就可以立即開始創(chuàng)建,耗時大約十分鐘。#p#
Root密碼是什么?
其他VPS系統(tǒng)的用戶或許想知道他們需要在哪里指定Root密碼。答案很簡單:你無需指定。你指定的賬戶都可以獲取sudo權(quán)限進行root:
[andrew@penguin1 ~]$ sudo su -
[sudo] password for andrew:
[root@penguin1 ~]#
從這點說,如果你想要密碼就可以設(shè)置root密碼。
存儲
Linux虛擬機有三類存儲。
第一類是擁有一個30G的root量。存儲在本地比較冗余,視情況,也可以選擇地理冗余,不過成本要增加33%。遺憾的是,創(chuàng)建自己的模板時,如果你喜歡不一樣的文件系統(tǒng)布局或是想減少每個月的存儲費用,是無法對這30G的配置進行修改的。Root容積數(shù)據(jù)重啟依然會存在,而且在Azure存儲中是永久BLOB。如果你刪除一個虛擬機,是可以保留其root容積的,然后,再在另一個系統(tǒng)上安裝或是將其作為新虛擬機的root容積。
你還可以盡你所能地創(chuàng)建更多容積。這就像Azure存儲中的BLOB一樣,具有持久性。它們的功能和SAN Volume相仿,可以讓你創(chuàng)建并將其附著到一個虛擬機上,然后減小,再附著到另一個上面。遺憾的是,沒有辦法對這些容積的大小進行調(diào)整,這是讓人比較失望的地方。雖然你可以創(chuàng)建更大的容積,然后轉(zhuǎn)移數(shù)據(jù),刪除原來的空間,但這顯然不是一種可擴展的方法。
當(dāng)你創(chuàng)建一個新磁盤的時候,可以把磁盤附著到虛擬機上,它就像一個新的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門戶上刪除這個磁盤,操作會失敗,除非你首先運行unmount命令。
最終,虛擬機會出現(xiàn)大量本地存儲。這種存儲并不存在于Azure云中,而是通過真實的物理節(jié)點提供。如果Azure架構(gòu)中有硬件錯誤或其他錯誤,而你的虛擬機又要轉(zhuǎn)移到新的主機上,那么此處保留的數(shù)據(jù)會丟失。這個文件系統(tǒng)原本是用于狀態(tài)信息,臨時抓取的數(shù)據(jù)和其他臨時文件。在Linux映像上,它以/mnt/資源的形式顯示出來。小型虛擬機可接收70G的文件系統(tǒng),而且其大小會隨虛擬機的擴展而增長,Extra Large 虛擬機可達800G的容量。
筆者經(jīng)歷過Azure上的硬件錯誤。當(dāng)時,筆者的虛擬機關(guān)閉后,轉(zhuǎn)移到了一個新的硬件主機上,并在新服務(wù)器上啟動運行。故障之前定義的服務(wù)都正常出現(xiàn),所有的網(wǎng)絡(luò)端點都被順利轉(zhuǎn)移,重新對磁盤進行mount,虛擬機運行正常。不過,之前/mnt/資源處的抓取數(shù)據(jù)丟失了,文件系統(tǒng)也是空的。#p#
不足之處
CentOS映像可以使用一些改進。OpenLogic提供的有些東西還真是讓筆者抓耳撓腮:
1. 雖然配置了交換分區(qū),但卻沒出現(xiàn)在/etc/fstab中。創(chuàng)建了交換分區(qū)但不能用的話,那它就沒什么意義,這是一個疏忽的地方。
2. 有些默認服務(wù)會毫無理由地運行。例如,為什么需要CUPS?筆者并非想在云中打印。只是RAID冗余是通過Azure存儲層提供,不需要軟件RAID,那么為什么啟動時要運行mdmonitor?
3. 筆者會周期性地接收到來自fprintd的崩潰報告。移除這個服務(wù)是比較直接的做法,為什么要創(chuàng)建CentOS映像在一個虛擬的云環(huán)境中支持指紋生物驗證呢?
4. iptables由一條單獨的規(guī)則啟用,目的是接受bootp,盡管INPUT輸入鏈存在默認的ACCEPT策略。
希望這些事情會隨著Linux入住Azure而得到糾正。
性能
通常,I/O性能很贊。但看過ioping后,筆者發(fā)現(xiàn)此前創(chuàng)建的/data磁盤平均延遲為6ms,雖然/mnt/資源延時為0.4ms。Root磁盤是18ms,但是正如微軟在其文檔中解釋的,它優(yōu)化了I/O性能:
操作系統(tǒng)磁盤和數(shù)據(jù)磁盤有一個主機緩沖設(shè)定,這個設(shè)定可以在一些情況下啟用改進的性能。但是,這些設(shè)定會影響其他環(huán)境下的性能,具體要看使用的什么應(yīng)用。默認狀態(tài)下,用于數(shù)據(jù)磁盤讀寫操作的主機緩沖[v2] 是關(guān)閉的,而用于操作系統(tǒng)磁盤讀寫操作的主機緩沖是開啟的。在大多數(shù)情況下,這些應(yīng)該都不會出現(xiàn)什么問題。推薦用戶把數(shù)據(jù)密集型操作放到與OS磁盤分離開的數(shù)據(jù)磁盤上。
圖六: Azure門戶性能一覽圖
運算的性能取決于你選擇的虛擬機大小。在我們的示例中,微軟使用的是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é)
可能有些人會說,在Azure上運行Linux的好處在于這樣可以給Amazon和谷歌帶來競爭。而對于終端用戶來說,其性能和價格差不多,企業(yè)管理者或許會有能力將Linux和Windows以及Azure專用的部署結(jié)合起來使用,增加自己的優(yōu)勢。雖然在Azure云中運行Linux好似一只小企鵝企圖在炙熱的Mordor地帶安營扎寨,但是多一個有競爭力的選手對大家來說是好消息。