你真的会 snapshot 吗? - 每天5分钟玩转 OpenStack(163)
?這是 OpenStack 實(shí)施經(jīng)驗(yàn)分享系列的第 13 篇。
?
instance snapshot 操作可用于備份或者將 instance 保存為新的 image。如果在生產(chǎn)系統(tǒng)中執(zhí)行 snapshot 操作,必須確保此操作快速且安全。這里有兩個(gè)關(guān)鍵點(diǎn):
?
快速。?
為保證數(shù)據(jù)的一致性,snapshot 時(shí)需要 pause instance,操作完后再 resume。在這個(gè)過(guò)程中 instance 是無(wú)法對(duì)外服務(wù)的,為了減少對(duì)業(yè)務(wù)的影響,我們希望 snapshot 越快越好。
?
安全。?
即數(shù)據(jù)一致性,snapshot 出來(lái)的 image 不能有沒(méi)落盤(pán)的數(shù)據(jù),能夠正常啟動(dòng)。所以通常在執(zhí)行 snapshot 前要 pause instance,暫停所有的 IO 操作。
?
默認(rèn)的 snapshot
?
默認(rèn)配置下的 snapshot 操作是否能滿足快速和安全這兩個(gè)條件呢?
?
snapshot 是對(duì) instance 的鏡像文件(系統(tǒng)盤(pán))做快照,鏡像文件位于計(jì)算節(jié)點(diǎn) /var/lib/nova/instances/<instance id>/disk。在第036篇中我們?cè)敿?xì)討論了 snapshot 的執(zhí)行步驟:
?
pause instance
?
執(zhí)行?qemu-img convert?命令復(fù)制 disk 文件,生成快照文件
?
resume instance
?
將快照文件上傳到 Glance
其中第 1 步保證了?安全,而是否?快速?取決于第 2 步要花多長(zhǎng)時(shí)間。qemu-img convert?的執(zhí)行時(shí)間取決于 disk 及其 backing 文件的大小,通常 instance 系統(tǒng)盤(pán)都以 G 為單位,所以第 2 步花費(fèi)的時(shí)間是分鐘級(jí)別的。
?
讓生產(chǎn)系統(tǒng)暫停幾分鐘通常是不能被接受的,所以默認(rèn)的 snapshot 操作沒(méi)法做到?快速。
?
解決方案是什么呢?
?
不靠譜的 live snapshot
?
Nova 很早就提出了 live snapshot 的替代方案,具體見(jiàn)官網(wǎng)?http://docs.openstack.org/ops-guide/ops-user-facing-operations.html#live-snapshots
?
live snapshot 的原理是:做快照時(shí)不 pause instance,直接執(zhí)行?qemu-img convert。也就是去掉第 1 和 第 3 步。
?
這樣雖然?快速?條件滿足了,業(yè)務(wù)不會(huì)受到影響。但由于沒(méi)有 pause instance,有可能出現(xiàn)快照過(guò)程中不斷有新數(shù)據(jù)寫(xiě)進(jìn) disk 文件的情況,很難保證數(shù)據(jù)的一致性,結(jié)果?安全?又成了問(wèn)題。
?
官網(wǎng)文檔建議:如果要做 live snapshot,用戶必須自己保證數(shù)據(jù)的一致性,比如做快照前確保所有數(shù)據(jù)已經(jīng)落盤(pán),并且不會(huì)有新數(shù)據(jù)寫(xiě)進(jìn)來(lái)。個(gè)人覺(jué)得,live snapshot 基本上沒(méi)法在生產(chǎn)中使用。
?
那到底有沒(méi)有既?安全?又?快速?的方案呢?
?
真正的解決方案
?
默認(rèn) snapshot 的問(wèn)題在于?qemu-img convert?耗時(shí)太長(zhǎng),而耗時(shí)太長(zhǎng)的原因是 instance 的系統(tǒng)盤(pán)是文件,拷貝文件本身就是一個(gè)耗時(shí)的操作。真正的解決方案是:
?
讓 instance 從 cinder volume 啟動(dòng),利用 storage provider 自己的 snapshot 技術(shù)實(shí)現(xiàn)快速?gòu)?fù)制。
?
現(xiàn)代存儲(chǔ)系統(tǒng)(無(wú)論開(kāi)源還是商業(yè)存儲(chǔ))基本上都提供了 volume 的 snapshot 功能,而這個(gè) snapshot 是基于指針的,不會(huì)真正拷貝數(shù)據(jù),所以非常快,通常一瞬間就完成,對(duì)業(yè)務(wù)幾乎沒(méi)有影響。所以如果 instance 是從 cinder volume 啟動(dòng)的,那么做快照的時(shí)候 OpenStack 就會(huì)使用 storage provider 的 snapshot 完成操作。這就實(shí)現(xiàn)了既?安全?又?快速。
?
下面我們使用流行的分布式存儲(chǔ)系統(tǒng) ceph 來(lái)演示這個(gè)過(guò)程。這里省略了 ceph 作為 cinder backend 的配置方法,如果有興趣可以參考官網(wǎng)?http://docs.ceph.com/docs/master/rbd/rbd-openstack/
?
boot from volume
?
部署 instance 時(shí)指定創(chuàng)建 volume。
?
?
?
?
這里我們選擇的 image 是 xenial(Ubuntu 16.04),大小為 2.20 GB。確保?Create New Volume?選項(xiàng)為?Yes。Volume Size?為?3(大于 image 2.20 GB)。執(zhí)行部署后,OpenStack 會(huì)完成如下工作:
?
在 ceph 中創(chuàng)建一個(gè) 3 GB 的 volume。
將 image 數(shù)據(jù)拷貝到該 volume。
instance 從該 volume 啟動(dòng)。
在 volume 管理界面可以看到這個(gè)新創(chuàng)建的 volume。
?
?
?
ubuntu-test?就是我們部署的 instance。接下來(lái)對(duì)?ubuntu-test?執(zhí)行 snapshot 操作。
?
?
?
?
?
操作瞬間完成!
?
?
?
注意到快照?snap-test?的 Size 是 0 字節(jié),這是因?yàn)樗嬲拇娣盼恢迷?cehp。通過(guò)?snap-test?部署出來(lái)的 instance 直接就是 boot from volume 的。
?
boot from volume 其實(shí)是 OpenStack 部署 instance 的最佳實(shí)踐,instance 的啟動(dòng)盤(pán)和數(shù)據(jù)盤(pán)都由 cinder 管理,而且做快照和做備份都很方便。
?
下期預(yù)告
?
到這里,實(shí)施經(jīng)驗(yàn)分享部分就先告一段落。按照之前的計(jì)劃,接下來(lái)是容器技術(shù)的內(nèi)容。不過(guò)最近收到很多同學(xué)的留言,希望講一講 cloud-init 的工作原理和相關(guān)應(yīng)用。
?
instance 定制化其實(shí)是個(gè)非常重要的內(nèi)容,在生產(chǎn)環(huán)境中的需求很大。目前最主流的方案就是 cloud-init,當(dāng)然僅僅 cloud-init 是不夠的,還得需要 OpenStack 服務(wù)的支持。前面之所以沒(méi)有討論,主要是因?yàn)檫@個(gè)主題會(huì)同時(shí)涉及 nova 和 neutron 兩大模塊,要求的知識(shí)和技能比較綜合,不過(guò)現(xiàn)在則是個(gè)非常好的時(shí)機(jī)。
?
接下來(lái) CloudMan 會(huì)系統(tǒng)講解 instance 定制化這個(gè)主題,從原理到實(shí)踐力求把它講透。只是容器部分不得不再多等一下了,見(jiàn)諒見(jiàn)諒。
?
總結(jié)
以上是生活随笔為你收集整理的你真的会 snapshot 吗? - 每天5分钟玩转 OpenStack(163)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《流浪地球2》看不懂?专业科普来了 刷完
- 下一篇: 哪些信用卡取现0手续费?