|
大家好,我是徐安,一位虛擬化老兵。2010年開(kāi)始在世紀(jì)互聯(lián)(云快線(xiàn))接觸云計(jì)算和虛擬化技術(shù),應(yīng)該算是國(guó)內(nèi)較早的一批人吧。目前在漢柏科技有限公司,負(fù)責(zé)服務(wù)器虛擬化以及桌面虛擬化產(chǎn)品的技術(shù)工作。 我將從虛擬化的主流技術(shù)介紹,前沿技術(shù)介紹,Docker技術(shù)介紹,MixSAN技術(shù)介紹四個(gè)方面展開(kāi)今天的分享。由于筆者水平和知識(shí)所限,難免有理解不正確的地方,請(qǐng)各位大牛批評(píng)指正。 首先讓我們看看主流虛擬化技術(shù)有哪些,無(wú)非就是CPU虛擬化,內(nèi)存虛擬化,網(wǎng)卡虛擬化,磁盤(pán)虛擬化。 KVM是目前最主流的虛擬化技術(shù),自L(fǎng)inux 2.6.20之后集成在各主要Linux發(fā)行版本中。KVM分為四個(gè)模式,分別是客戶(hù)(虛擬機(jī))用戶(hù)模式,客戶(hù)(虛擬機(jī))內(nèi)核模式,Host Linux用戶(hù)模式,Host Linux內(nèi)核模式。虛擬機(jī)的用戶(hù)模式和內(nèi)核模式與虛擬化之前的操作系統(tǒng)對(duì)應(yīng),沒(méi)有什么好解釋的。Qemu-kvm是一個(gè)Host Linux用戶(hù)態(tài)程序,就是一個(gè)進(jìn)程,代表著一個(gè)虛擬機(jī)。Qemu-kvm主要負(fù)責(zé)為虛擬機(jī)模擬硬件,Qemu-kvm通過(guò)ioctl控制KVM內(nèi)核模塊。 一個(gè)虛擬機(jī)就是一個(gè)進(jìn)程,那一個(gè)vCPU就是一個(gè)線(xiàn)程,它被Main線(xiàn)程創(chuàng)建。這么設(shè)計(jì)的好處是無(wú)需單獨(dú)設(shè)計(jì)vCPU的調(diào)度算法了,就用Linux的線(xiàn)程調(diào)度即可。所以,對(duì)于一個(gè)vCPU來(lái)說(shuō),它就是拼了老命runing,看圖可以見(jiàn)到兩個(gè)while循環(huán),第二個(gè)while就是讓KVM內(nèi)核運(yùn)行該vCPU的上下文,一旦KVM內(nèi)核運(yùn)行不下去了,就看看是什么原因,qemu-kvm根據(jù)原因執(zhí)行下一步動(dòng)作,比如需要讀寫(xiě)磁盤(pán)了,那就用qemu-kvm去打開(kāi)該磁盤(pán)對(duì)應(yīng)的文件,執(zhí)行read,write操作。 整個(gè)虛擬機(jī)的虛擬地址到實(shí)際物理內(nèi)存地址的訪(fǎng)問(wèn)(轉(zhuǎn)換)過(guò)程為:GVA(虛擬機(jī)虛擬地址),通過(guò)VM頁(yè)表轉(zhuǎn)換為GPA(虛擬機(jī)物理地址),然后通過(guò)一個(gè)數(shù)據(jù)結(jié)構(gòu)映射為HVA(物理機(jī)虛擬地址),再通過(guò)Host頁(yè)表,轉(zhuǎn)換為HPA(物理機(jī)物理地址)。 從上頁(yè)可以看出,這么轉(zhuǎn)換太慢了,需要加速。有兩個(gè)辦法來(lái)加速上一頁(yè)的翻譯過(guò)程。1)影子頁(yè)表,2)EPT功能。那KVM使用哪個(gè)呢?如CPU支持EPT功能,那就走EPT。 EPT是利用硬件自動(dòng)翻譯GPA到HPA的地址映射:在構(gòu)建VM的頁(yè)表時(shí),EPT硬件把翻譯好的HPA地址反饋給VM頁(yè)表,VM直接使用物理地址。 利用軟件“欺騙VM”直接構(gòu)建GVA到HPA的頁(yè)表,VM還正常走頁(yè)表翻譯的流程,當(dāng)需要加載頁(yè)表的物理內(nèi)存時(shí),KVM接管起來(lái),然后把頁(yè)表里的內(nèi)容直接替換成真實(shí)的HPA地址即可。 左邊是普通網(wǎng)卡的虛擬化,首先qemu-kvm會(huì)模擬”E1000″的物理網(wǎng)卡,Guest OS通過(guò)模擬的中斷和DMA操作與E1000交互,E1000在Qemu-kvm內(nèi)用內(nèi)部調(diào)用把這些請(qǐng)求轉(zhuǎn)發(fā)到”tap代理”上,tap代理實(shí)際是open的Host OS的一個(gè)tap設(shè)備,所以收發(fā)包的流程就轉(zhuǎn)換為針對(duì)tap設(shè)備的read,write操作。tap設(shè)備連接在bridge上,再通過(guò)TCP/IP協(xié)議棧或bridge上的物理網(wǎng)卡把網(wǎng)絡(luò)包收發(fā)起來(lái)。 右邊是virtio網(wǎng)卡,與普通網(wǎng)卡不同的地方在DMA模擬操作變成了內(nèi)存共享。 這是具體的函數(shù)調(diào)用過(guò)程,強(qiáng)調(diào)一下:tap的操作都會(huì)經(jīng)過(guò)Qemu-kvm進(jìn)程的poll處理。左邊的是收包過(guò)程,右邊的是發(fā)包過(guò)程。 這是virtio-net收發(fā)包的調(diào)用流程。 vrio-blk與網(wǎng)卡虛擬化類(lèi)似,首先模擬一個(gè)硬件設(shè)備,對(duì)硬件設(shè)備的讀寫(xiě)操作都轉(zhuǎn)換為磁盤(pán)代理的讀寫(xiě)操作。這個(gè)磁盤(pán)代理可能是一個(gè)文件,一個(gè)塊設(shè)備,一個(gè)網(wǎng)絡(luò)設(shè)備,或者僅僅是一個(gè)模擬。 有興趣的可以私下討論,時(shí)間關(guān)系先過(guò)。 這個(gè)講起來(lái)有點(diǎn)復(fù)雜,總之可設(shè)定虛擬機(jī)某個(gè)磁盤(pán)的緩沖策略,write-back,none,write-thru。實(shí)際上就是qemu-kvm打開(kāi)文件的類(lèi)型不同。write-back的意思是數(shù)據(jù)寫(xiě)入page cache中就不管了,none的話(huà)會(huì)寫(xiě)入buffer cache(設(shè)備緩沖中),write-thru那么設(shè)備緩沖也要跨過(guò),直接寫(xiě)入設(shè)備中。 所謂前沿技術(shù),只是個(gè)人的認(rèn)識(shí),不一定正確,請(qǐng)批評(píng)指正。 所謂的FT技術(shù)就是建立兩個(gè)VM,一主一備。隔一段時(shí)間主VM暫停下,做一個(gè)checkpoint,然后恢復(fù)VM,在下一次checkpoint點(diǎn)之前,把上兩次checkpoint之間的差異(CPU,內(nèi)存)數(shù)據(jù)傳遞給備份VM,備份VM同步更新這些差異數(shù)據(jù)。 這里的困難點(diǎn)就是checkpoint之間的時(shí)間間距盡量短,如果這段時(shí)間內(nèi)存數(shù)據(jù)變化比較大,那傳輸?shù)臄?shù)據(jù)流就會(huì)巨大,那對(duì)主備之間的網(wǎng)絡(luò)帶寬壓力就會(huì)比較大。 三級(jí)緩沖是這樣的,以Widows系統(tǒng)舉例,把C盤(pán)的母盤(pán)放在內(nèi)存中,C盤(pán)的link clone出來(lái)的子盤(pán)放在SSD中,D盤(pán)放入機(jī)械硬盤(pán)中。這樣的VM啟動(dòng)速度,我們測(cè)試的結(jié)果是60個(gè)桌面,90秒內(nèi)可啟動(dòng)完。 預(yù)讀機(jī)制是指,虛擬機(jī)讓我讀取1k的數(shù)據(jù),我自動(dòng)幫你讀1M的數(shù)據(jù)讓在內(nèi)存中。 如果還嫌VM啟動(dòng)太慢了,那還有辦法,我們看一個(gè)虛擬機(jī)啟動(dòng)的過(guò)程無(wú)非是這樣的:CPU轉(zhuǎn)起來(lái),讀取Disk里的數(shù)據(jù)放入內(nèi)存中。那啟動(dòng)多個(gè)一模一樣虛擬機(jī)的時(shí)候能不能不走這個(gè)流程呢,直接把內(nèi)存和CPU的數(shù)據(jù)從虛擬機(jī)A拷貝到虛擬機(jī)B,那理論上虛擬機(jī)B的啟動(dòng)速度等于內(nèi)存對(duì)拷的時(shí)間。還可以再加速,如果虛擬機(jī)基本差不多,有些內(nèi)存數(shù)據(jù)根本不會(huì)變化,那內(nèi)存拷貝的時(shí)候能不能只是做一個(gè)link鏈接,當(dāng)子內(nèi)存某一塊有變化時(shí),再?gòu)哪竷?nèi)存中copy on write即可。 網(wǎng)卡性能加速第一方向是使用vhost-net,網(wǎng)絡(luò)數(shù)據(jù)包轉(zhuǎn)發(fā)可拋掉qemu-kvm,直接走到vhost設(shè)備,在內(nèi)核中轉(zhuǎn)發(fā)到tap設(shè)備,然后走h(yuǎn)ost內(nèi)核的bridge走出去。說(shuō)的直白點(diǎn),在創(chuàng)建VM時(shí),給qemu-kvm的網(wǎng)卡設(shè)備文件是vhost的。DPDK可加速交換模塊OVS的轉(zhuǎn)發(fā)效率,這部分我們還沒(méi)有深入研究,就一筆帶過(guò)了。 針對(duì)KVM的vGPU方案還比較少,時(shí)間關(guān)系,也一筆帶過(guò)了。 關(guān)于Docker,我們也是剛剛開(kāi)始研究,算是學(xué)習(xí)筆記吧。有說(shuō)的不對(duì)的地方,請(qǐng)各位大牛批評(píng)指正。 左邊是常用的對(duì)比圖,可以明顯看出Docker少了Guest OS Kernel這一層,所以它的密度更高,啟動(dòng)速度更快。但用戶(hù)使用Docker和虛擬機(jī),不會(huì)直接使用命令,一般是使用一個(gè)系統(tǒng)。所以,正確的對(duì)比辦法是對(duì)比它們的系統(tǒng)。右邊是從這么幾個(gè)方面我認(rèn)識(shí)到的對(duì)比??梢悦黠@看出,Docker在啟動(dòng)速度,密度,更新管理上占有比較大的優(yōu)勢(shì),其他方面,比如對(duì)Windows的支持行,穩(wěn)定性,安全性,監(jiān)控成熟度,高可用性,管理平臺(tái)成熟度上來(lái)看,都低于虛擬化技術(shù)。當(dāng)然,再次強(qiáng)調(diào)這個(gè)是我個(gè)人的認(rèn)識(shí),不一定正確。歡迎批評(píng)指正。 可以看出,這是個(gè)群雄涿鹿的時(shí)代,主要有OpenStack、Mesos、Kubernetes、Docker公司(社區(qū))四個(gè)玩家。它們爭(zhēng)奪的當(dāng)然是云時(shí)代,開(kāi)源平臺(tái)的份額,也就是云時(shí)代的控制權(quán)。 筆者一直認(rèn)為,云消費(fèi)者并不關(guān)心,你這個(gè)服務(wù)商使用的是虛擬化技術(shù)還是Docker,更不關(guān)心你自己寫(xiě)的還是基于開(kāi)源平臺(tái)改的。他關(guān)心的是你的服務(wù)是否可靠,是否穩(wěn)定,是否便宜,是否安全。所以,根據(jù)你團(tuán)隊(duì)的特點(diǎn),選擇你們自己最擅長(zhǎng)的技術(shù),為云消費(fèi)者提供有競(jìng)爭(zhēng)力的服務(wù),才是未來(lái)我們能否立足的核心。 筆者認(rèn)為融合了Docker與虛擬化的云平臺(tái)應(yīng)該包括三個(gè)層次:資源管理層,虛擬化層,服務(wù)層。當(dāng)然docker與虛擬化會(huì)共用大部分模塊,這也是筆者認(rèn)為要構(gòu)筑融合平臺(tái)的好處。資源管理層至少包括:計(jì)算資源管理,存儲(chǔ)資源管理,網(wǎng)絡(luò)管理,安全管理。虛擬化層肯定包括:虛擬化引擎(一般情況下就是KVM),容器引擎(一般情況下就是Docker)。服務(wù)層至少包括:高可用性,編排管理,容災(zāi)備份,服務(wù)發(fā)現(xiàn),應(yīng)用發(fā)布,應(yīng)用升級(jí),自感擴(kuò)容,編排管理,平臺(tái)高可用性,生命周期管理,用戶(hù)權(quán)限認(rèn)證,監(jiān)控報(bào)警,日志審計(jì),負(fù)載均衡,鏡像管理,系統(tǒng)維護(hù)等模塊。 Kubernetes的優(yōu)勢(shì)在于它是第一個(gè)Docker集群管理平臺(tái),第一個(gè)提出并實(shí)現(xiàn)了Pod,Replication,Services Discovery等概念。關(guān)于技術(shù)細(xì)節(jié),筆者在此不做過(guò)多介紹,請(qǐng)自行百度,Google,或者自己搭建平臺(tái)體驗(yàn)。下面的其他方案也相同。 Swarm是Docker在2014年12月份新發(fā)布的Docker集群管理工具。Swarm可管理Docker集群,管理和分配計(jì)算資源,也包含服務(wù)發(fā)現(xiàn)(可以選用etcd、ZooKeeper、Consul),容器編排等功能。Swarm的優(yōu)勢(shì)是與Docker接口API統(tǒng)一。 Mesos的目標(biāo)是下一代數(shù)據(jù)中心操作系統(tǒng)(DCOS),其最核心功能在于集群管理,計(jì)算資源管理,任務(wù)分發(fā),原本用作Hadoop等分布式任務(wù)管理。從0.20版開(kāi)始,Mesos支持Docker形式的任務(wù)調(diào)度(主要看中Docker的任務(wù)隔離,資源限制,隨鏡像發(fā)布)。在Mesos之上,Marathon可以用作為Docker編排和生命周期管理。 為保證云計(jì)算領(lǐng)域的領(lǐng)先地位,2015年5月份溫哥華峰會(huì)上,OpenStack提出了“集成引擎”的思路。其實(shí)說(shuō)白了就是在Kubernetes、Swarm和Mesos的上面套一層,用OpenStack Magnum的接口來(lái)管理它們。OpenStack的優(yōu)勢(shì)在于在虛擬化上積累的多租戶(hù),編排,存儲(chǔ)以及網(wǎng)絡(luò)能力。筆者認(rèn)為這個(gè)方案有點(diǎn)另類(lèi),OpenStack不會(huì)甘心僅僅做個(gè)”集成商”的。筆者大膽猜測(cè),憑借強(qiáng)大的內(nèi)生能力,OpenStack Magnum一定會(huì)慢慢學(xué)習(xí)和消化Kubernetes、Swarm和Mesos的優(yōu)勢(shì),并最終替代它們變成另一個(gè)”Nova”,這個(gè)”Nova”操作和管理Docker。 對(duì)四種方案進(jìn)行全方位的比較,按照0(沒(méi)有此項(xiàng)功能),1(有,但不完善),2(有,且比較完善)。結(jié)果是Kubernets稍稍勝出,個(gè)人認(rèn)識(shí),不一定正確。 關(guān)于存儲(chǔ)
關(guān)于網(wǎng)絡(luò)
服務(wù)發(fā)現(xiàn)可以讓一個(gè)應(yīng)用或者組件發(fā)現(xiàn)其運(yùn)行環(huán)境以及其它應(yīng)用或組件的信息。當(dāng)一個(gè)服務(wù)啟動(dòng)時(shí),注冊(cè)自身信息,例如,一個(gè)MySQL數(shù)據(jù)庫(kù)服務(wù)會(huì)在這注冊(cè)它運(yùn)行的ip和端口。負(fù)載均衡的策略可根據(jù)負(fù)載在Ngnix和DNS上體現(xiàn),不如發(fā)現(xiàn)某個(gè)負(fù)載太高,就Ngnix或者DNS到另外的Docker Server上。
一個(gè)Set跑一個(gè)業(yè)務(wù),由多個(gè)Docker組成,支持灰度升級(jí),如果監(jiān)控到負(fù)載太高,也可在Set內(nèi)增加Docker數(shù)量。 這里說(shuō)的MixSAN就是Ceph。 Ceph是一種為優(yōu)秀的性能、可靠性和可擴(kuò)展性而設(shè)計(jì)的統(tǒng)一的(同時(shí)提供對(duì)象存儲(chǔ)、塊存儲(chǔ)和文件系統(tǒng)存儲(chǔ)三種功能)、分布式的存儲(chǔ)系統(tǒng)(高可靠性;高度自動(dòng)化;高可擴(kuò)展性)。 RADOS的系統(tǒng)邏輯結(jié)構(gòu)如右圖所示:
左圖可以明顯看出,一次寫(xiě)會(huì)寫(xiě)三次,所以有寫(xiě)放大的問(wèn)題。 讀的話(huà)分為幾種算法,一種是只去找primary,一種是在三個(gè)osd上隨機(jī)找一個(gè)去讀,另一個(gè)是盡可能靠近自己去讀。 這種情況我們?cè)谌f(wàn)兆情況下,測(cè)試出來(lái)的性能等同于萬(wàn)兆iSCSI存儲(chǔ)性能。 這么做的好處:冷熱數(shù)據(jù)分離,用相對(duì)快速/昂貴的存儲(chǔ)設(shè)備如SSD盤(pán),組成一個(gè)Pool來(lái)作為Cache層,后端用相對(duì)慢速/廉價(jià)的設(shè)備來(lái)組建冷數(shù)據(jù)存儲(chǔ)池。 tier Cache策略有兩種模式:
我們使用的Cache策略是write-back模式。 我們的虛擬機(jī)在分配時(shí),考慮Ceph的第一個(gè)object的primary Node,通過(guò)計(jì)算,發(fā)現(xiàn)這種方式比不指定情況下的速度提升30%左右。主要是一個(gè)object中存儲(chǔ)了qcow2的表頭數(shù)據(jù)。 該圖是osd的狀態(tài)遷移圖,大致看下就會(huì)發(fā)現(xiàn)巨復(fù)雜,我們也發(fā)現(xiàn)有很多坑,目前正在填。 Q:虛機(jī)遷移是否有涉及?不論是負(fù)載觸發(fā)還是容災(zāi)觸發(fā)或者業(yè)務(wù)邏輯觸發(fā)。
Q:KVM的Host內(nèi)核參數(shù)開(kāi)啟IP轉(zhuǎn)發(fā) 作用是啥,如果使用的是橋接網(wǎng)絡(luò)是否一樣需要開(kāi)啟?
Q:容器化取代虛擬化真的只是時(shí)間問(wèn)題嗎?
Q:請(qǐng)問(wèn)桌面虛擬化有什么痛點(diǎn),或者難點(diǎn)么?
Q:KVM虛擬化中Linux內(nèi)核的兩個(gè)模塊kvm和kvm_intel具體起到什么作用?
@Container容器技術(shù)大會(huì)正在火熱報(bào)名中,知名公司的Docker、Kubernetes、Mesos應(yīng)用案例,點(diǎn)擊下圖可查看大會(huì)具體內(nèi)容。 |
|
|
來(lái)自: xiaowei035 > 《文件夾1》