




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 OpenStack 針對特定場景的高級特性介紹 目 錄 TOC o 1-3 h z u HYPERLINK l _Toc66484496 OpenStack 針對特定場景的高級特性介紹 PAGEREF _Toc66484496 h 1 HYPERLINK l _Toc66484497 1 虛擬機軟刪除 PAGEREF _Toc66484497 h 3 HYPERLINK l _Toc66484498 2 CPU拓撲以及核綁定 PAGEREF _Toc66484498 h 4 HYPERLINK l _Toc66484499 3 虛擬化嵌套 PAGEREF _Toc66484499 h 11
2、HYPERLINK l _Toc66484500 4 使用virtio-scsi驅(qū)動 PAGEREF _Toc66484500 h 12 HYPERLINK l _Toc66484501 5 使用qemu-guest-agent PAGEREF _Toc66484501 h 14 HYPERLINK l _Toc66484502 6 網(wǎng)卡多隊列 PAGEREF _Toc66484502 h 16 HYPERLINK l _Toc66484503 7 watchdog PAGEREF _Toc66484503 h 17 HYPERLINK l _Toc66484504 8 GPU虛擬化 PAGE
3、REF _Toc66484504 h 17 HYPERLINK l _Toc66484505 9. 參考文獻 PAGEREF _Toc66484505 h 18本文將介紹OpenStack的幾個高級特性,這里所謂的高級特性,不是指那些人人都需要的OpenStack通用默認配置,而是專門針對一些特定場景需求設定的。1 虛擬機軟刪除通常情況下,當用戶刪除虛擬機時,虛擬機會立即從hypervisor底層刪除,不可撤回。為了防止人為誤操作,Nova支持開啟軟刪除(soft delete)功能,或者稱為延遲刪除,延遲刪除時間通過Nova配置項 /etc/nova/nova.conf 的 reclaim_
4、instance_interval項指定,如下:此時虛擬機執(zhí)行普通刪除操作時,nova不會立即刪除虛擬機,而是會等待兩分鐘的時間,在此時間間隔內(nèi),管理員可以隨時恢復虛擬機,只有在超過120秒后虛擬機才會真正執(zhí)行刪除操作,不可恢復。為了演示該功能,我們刪除一臺虛擬機 int32bit-test-2:通過nova list命令并指定 -deleted 選項可以列出已刪除的所有虛擬機實例:通過 nova restore 命令可以恢復虛擬機:可見,剛剛刪除的虛擬機已經(jīng)恢復了。注意如果管理員通過 nova force-delete 命令強制刪除虛擬機,虛擬機會立即從底層刪除而無視延遲時間。需要注意的是,
5、由于這個功能早期設計的缺陷,開啟虛擬機軟刪除功能必須保證所有計算節(jié)點和API節(jié)點配置一樣并且時間同步,并且所有節(jié)點的延遲時間不可動態(tài)修改,這非常不靈活。我在我們內(nèi)部私有云二次開發(fā)中改善了該功能,延時時間不再通過配置文件指定,而是通過虛擬機的 admin metadata 指定,這樣就不再依賴于各個節(jié)點的配置項的同步與更新,并且可隨時調(diào)整延時時間。2 CPU拓撲以及核綁定2.1 概述OpenStack K版本引入了許多CPU高級特性功能,不僅支持自定義CPU拓撲功能,支持設置虛擬機CPU的socket、core、threads等,還支持CPU pinning功能,即CPU核綁定,甚至能夠配置虛擬
6、機獨占物理CPU,虛擬機的vCPU能夠固定綁定到宿主機的指定pCPU上,在整個運行期間,不會發(fā)生CPU浮動,減少CPU切換開銷,提高虛擬機的計算性能。除此之外,OpenStack還支持設置threads policy,能夠利用宿主機的SMT特性進一步優(yōu)化虛擬機的性能。接下來簡單介紹下如何配置OpenStack的CPU高級特性。2.2 規(guī)劃CPU和內(nèi)存在配置之前,首先需要規(guī)劃計算節(jié)點的CPU和內(nèi)存,哪些CPU分配給虛擬機,哪些CPU給宿主機本身的進程預留,預留多少內(nèi)存等。為了性能的最優(yōu)化,還需要考慮宿主機CPU的NUMA架構(gòu)。在Linux環(huán)境下可以通過以下命令查看CPU信息:由以上信息可知,該宿
7、主機一共兩個CPU(socket),每個CPU 10核(core),每個核可以開啟兩個超線程(thread),即一共有40個邏輯CPU,包含兩個NUMA node,其中node0包括0,2,4,.,38,node1包括1,3,5,.,39。預留CPU個數(shù)和內(nèi)存需要根據(jù)實際情況調(diào)整,比如若計算節(jié)點和存儲節(jié)點融合,則需要預留更多的CPU來保證存儲服務的性能。本例子僅作為測試使用,測試環(huán)境預留了4個邏輯CPU(1-3)和4GB物理內(nèi)存給宿主機,剩下的資源全部分配給虛擬機使用。配置虛擬機使用的CPU集合(cpuset)是通過計算節(jié)點的 vcpu_pin_set 配置項指定,目前支持以下三種語法格式:1
8、,2,3 # 指定CPU號,逗號隔開。2-15, 18-31 # 使用-表示連續(xù)CPU序列,使用逗號分隔。0,1,2,3 # 使用表示排除的CPU號,剩下的全部作為虛擬機使用。以上三種語法格式可以組合使用。compute節(jié)點Nova參考配置如下:如果需要配置虛擬機CPU獨占,則還需要配置內(nèi)核參數(shù) isolcpu 來限制其他進程使用指定的CPU。比如我們需要把CPU 2,3,6,7作為CPU pinning給虛擬機獨占,設置如下:重新安裝grub:重啟宿主機,下次系統(tǒng)啟動時會默認添加如下內(nèi)核參數(shù):在nova-scheduler節(jié)點上,需要配置默認filter,filters中必須包含Aggreg
9、ateInstanceExtraSpecFilter和NUMATopologyFilter這兩個filter:配置完重啟所有的nova-scheduler服務:2.3 創(chuàng)建主機集合在實際環(huán)境中肯定不是所有的計算節(jié)點都開啟這些高級功能,并且CPU特性也有差別,我們可以通過主機集合(host aggregate)把所有相同的CPU配置放到一個集合中,通過主機集合(host aggregate)區(qū)分哪些計算節(jié)點開啟CPU核綁定功能,哪些不開啟。首先創(chuàng)建pinned-cpu主機集合:增加metadata區(qū)分pinned:把配置開啟了CPU核綁定功能的兩個host加到該主機集合中:此時nova sche
10、duler只要接收到包含pinned=true元數(shù)據(jù)的請求就會自動從包含pinned=true元數(shù)據(jù)的主機中調(diào)度。2.4 創(chuàng)建flavor目前Nova并不支持啟動時直接指定主機集合的metadata(hint只支持指定server group),需要通過flavor的extra specs配置,并與主機集合的metadata匹配,不匹配的主機將被過濾掉,不會被選擇作為候選主機。flavor支持很多內(nèi)置的extra specs,通過內(nèi)置extra specs,可以配置虛擬機的CPU拓撲、QoS、CPU pinning策略、NUMA拓撲以及PCI passthrough等,更詳細的介紹可參考官方文
11、檔。這里我們只關(guān)心CPU拓撲和核綁定功能。如下是設置CPU topology的語法,自定義CPU的socket數(shù)量、core數(shù)量以及超線程數(shù)量:注意以上配置項不需要全部設置,只需要設置其中一個或者幾個,剩余的值會自動計算。CPU核綁定配置語法如下:其中CPU-POLICY合法值為shared、dedicated,默認為shared,即不進行CPU核綁定,我們需要把這個值設置為dedicated。CPU-THREAD-POLICY和SMT有關(guān),合法值為:prefer: 宿主機不一定需要符合SMT架構(gòu),如果宿主機具備SMT架構(gòu),將優(yōu)先分配thread siblings。isolate: 宿主機SM
12、T架構(gòu)不是必須的,如果宿主機不具備SMT架構(gòu),每個vCPU將綁定不同的pCPU,如果宿主機是SMT架構(gòu)的,每個vCPU綁定不同的物理核。require: 宿主機必須滿足SMT架構(gòu),每個vCPU在不同的thread siblins上分配,如果宿主機不具備SMT架構(gòu)或者core的空閑thread siblings不滿足請求的vCPU數(shù)量,將導致調(diào)度失敗。通常設置成默認值prefer或者isolate即可。接下來開始創(chuàng)建flavor,設置為8個CPU、2GB內(nèi)存以及20GB磁盤空間:設置CPU Policy:添加pinned相關(guān)的extra specs用于匹配主機集合metadata,保證調(diào)度時只選
13、擇開啟了核綁定的宿主機:配置CPU拓撲為2 sockets * 2 cores * 2 threads:查看flavor的extra specs信息:2.5 功能驗證使用新創(chuàng)建的Flavor創(chuàng)建虛擬機:使用 nova show 命令查看虛擬機所在的宿主機,在該宿主機上查看虛擬機的xml文件:其中306abd22-28c5-4f91-a5ce-0dad03a35f4為虛擬機的uuid。在xml文件中可以看到如下內(nèi)容:即vCPU與pCPU的綁定關(guān)系。進入虛擬機中查看CPU信息結(jié)果如下:和我們配置的結(jié)果一樣(2 sockets * 2 cores * 2 threads)。在虛擬機上執(zhí)行高密度計算,
14、測試的Python腳本如下:使用shell腳本同時跑50個進程,保證CPU滿載運行:使用sar命令查看宿主機CPU使用情況:結(jié)果如下:從CPU使用情況看宿主機的pCPU 4-5,8-9,24-25,28-29使用率100%,并且整個過程中沒有浮動,符合我們的預期結(jié)果,說明CPU核綁定成功。3 虛擬化嵌套3.1 開啟虛擬化嵌套默認情況下我們創(chuàng)建的KVM虛擬機的CPU特性中沒有包含vmx,這意味著不能在虛擬機中再創(chuàng)建開啟KVM硬件加速的虛擬機,即不支持虛擬化嵌套。值得慶幸的是,目前除了VirtualBox(題外話:VirtualBox在9年前就有人提出要支持嵌套,只是一直沒有實現(xiàn),參考ticket
15、#4032),主流的hypervisor比如VMware、KVM、Xen都支持已經(jīng)虛擬化嵌套。也就是說,我們可以實現(xiàn)在支持KVM的宿主機創(chuàng)建同樣支持KVM的虛擬機。這里以KVM為例,首先查看系統(tǒng)是否開啟了KVM嵌套功能:如果輸出為N則表明沒有開啟KVM嵌套功能,可以通過修改/etc/modprobe.d/kvm-intel.conf配置文件開啟該功能:重新加載kvm-intel內(nèi)核模塊:3.2 配置計算節(jié)點OpenStack支持虛擬化嵌套,修改計算節(jié)點的nova配置文件/etc/nova/nova.conf,設置cpu_mode = host-passthrough,然后重啟nova-comp
16、ute服務即可。需要注意的是,使用host-passthrough的虛擬機遷移功能受限,只能遷移到相同配置的宿主機。4 使用virtio-scsi驅(qū)動4.1 virtio-blk VS virtio-scsi虛擬機的虛擬硬盤默認使用半虛擬化驅(qū)動virt-blk,此時硬盤在虛擬機的設備名稱形如/dev/vda、/dev/vdb等。事實上,virt-blk有點老了,其本身也存在許多問題,比如:virt-blk的存儲設備和PCI設備一一對應,而我們知道系統(tǒng)中至多可以有32個PCI總線,這說明虛擬機最多可以掛32個虛擬硬盤。virt-blk的設備名稱為vda-z,而現(xiàn)代的物理機通常都會使用SCSI控制
17、器,設備名稱為sda-z,這意味著物理機遷移到虛擬機中可能存在問題,比如fstab中使用的設備名掛載而不是uuid,系統(tǒng)就會起不來。如WIKI所言,virt-blk實現(xiàn)的指令不是標準的,并且可擴展差,實現(xiàn)一個新的指令,必須更新所有的guest。云計算架構(gòu)模式下,為了節(jié)省存儲空間,用戶更傾向于使用精簡置備(thin provision),virtio-blk不支持discard特性,關(guān)于discard特性后面講。因此,建議使用virtio-scsi半虛擬化驅(qū)動代替virtio-blk,這是因為:實現(xiàn)的是標準的SCSI指令接口,不需要額外實現(xiàn)指令,在虛擬機里看到的設備名稱和物理機一樣(sda-z)
18、,解決了前面提到的物理機和虛擬機設備名不一樣的問題。一個SCSI控制器可以接256個targets,而一個target可以接16384個LUNs,也就是說一個controller理論上可以掛載256 * 16384 = 4194304個虛擬機硬盤,這100%足夠了。virtio-scsi支持直通模式(passthrough),也就是說可以把物理機的硬盤直接映射給虛擬機。virtio-scsi支持前面提到的discard特性。4.2 塊設備的discard功能前面提到塊設備的discard特性,這個主要和精簡置備有關(guān),就拿Ceph RBD說,我們知道當我們分配一個20GB的image時,Ceph
19、并不會真正分配20GB的存儲空間,而是根據(jù)需要逐塊分配,這和Linux的sparse稀疏文件的原理是一樣的,這個特性節(jié)省了物理存儲空間,實現(xiàn)了硬盤的超售。然而,Ceph只知道上層文件系統(tǒng)需要空間時就分配,而并不知道上層文件系統(tǒng)如何使用存儲資源的(實際上也不關(guān)心)。而實際上,我們的文件系統(tǒng)肯定是頻繁創(chuàng)建文件、刪除文件的,刪除文件后按理說是可以釋放物理存儲資源的,然而Ceph并不知道,所以不會回收,占據(jù)的存儲空間會越來越多,直到空間達到真實的分配空間大小(20GB),而文件系統(tǒng)層可能并沒有真正使用那么多空間,這就造成了存儲空間利用率下降的問題。比如,我們創(chuàng)建了一個5GB的文件,Ceph底層會分配5
20、GB的空間,此時我們把這個5GB的文件刪除,分配的這5GB空間并不會釋放。好在Linux支持fstrim,如果塊設備支持discard特性,文件系統(tǒng)會發(fā)送flush通知給底層塊設備(RBD),塊設備會回收空閑資源。Sbastien Han寫了一篇博客關(guān)于ceph discard的,參考ceph and krbd discard。正如前面所言,virt-blk是不支持discard的,而virt-scsi支持,所以如果關(guān)心底層存儲的空間利用率,建議使用virt-scsi,并在掛載設備中指定discard參數(shù)(或者寫到fstab中):但是需要注意的是,任何事物都具有兩面性,既有優(yōu)點,也存在缺點:v
21、irio-scsi相對virtio-blkIO路徑會更復雜,性能可能會有所下降,參考virtio-blk vs virtio-scsi。通過mount命令掛載虛擬硬盤時開啟discard特性會降低文件系統(tǒng)的讀寫性能。4.3 OpenStack使用virtio-scsi驅(qū)動前面講了那么多關(guān)于virio-blk以及virtio-scsi,那怎么在OpenStack中使用virtio-scsi呢?很簡單,只需要設置Glance鏡像的property就可以了:通過這個配置不僅使根磁盤會使用virtio-scsi驅(qū)動,掛載新的Cinder volume也會默認使用virtio-scsi驅(qū)動。需要注意的是
22、,制作OpenStack鏡像時一定要保證initrd中包含virtio-scsi驅(qū)動,否則操作系統(tǒng)會由于在初始化時不識別SCSI塊設備導致啟動失敗:如果鏡像的initrd沒有virtio驅(qū)動,可以編輯/etc/sysconfig/kernel文件,配置INITRD_MODULES參數(shù):然后重新生成initrd文件:啟動虛擬機后,如果根硬盤的設備名稱為/dev/sda,則說明使用的是virtio-scsi驅(qū)動。5 使用qemu-guest-agent5.1 qemu-guest-agent簡介我們都知道OpenStack虛擬機啟動時是通過cloud-init完成初始化配置的,比如網(wǎng)卡配置、主機名
23、配置、注入用戶密碼等。而虛擬機啟動之后處于運行狀態(tài)時,外部如何與虛擬機通信呢,這就是qemu-guest-agent要完成的事,這其實在如何構(gòu)建OpenStack鏡像(該文可點擊到專欄閱讀)一文中已經(jīng)介紹過,這里直接搬過來。qemu-guest-agent是運行在虛擬機的一個daemon服務,libvirt會在宿主機本地創(chuàng)建一個unix socket,并模擬為虛擬機內(nèi)部的一個串口設備,從而實現(xiàn)了宿主機與虛擬機通信,這種方式不依賴于TCP/IP網(wǎng)絡。如下是開啟qemu-guest-agent的虛擬機xml配置信息:以上宿主機的socket文件為org.qemu.guest_agent.0.ins
24、tance-00003c2c.sock,在虛擬機內(nèi)部映射為/dev/virtio-ports/org.qemu.guest_agent.0。通過這種方式,宿主機只要發(fā)送指令到該socket文件中就會在虛擬機對應的串口設備中收到,虛擬機內(nèi)部的qemu-guest-agent會輪詢查看這個串行設備是否有指令,一旦接收到指令就可以執(zhí)行對應的腳本,從而實現(xiàn)了宿主機控制虛擬機執(zhí)行命令的功能,其中最常用的指令就是通過libvirt修改虛擬機密碼。更多關(guān)于qemu-guest-agent請參考官方文檔。5.2 在OpenStack中應用首先在制作鏡像時需要安裝qemu-guest-agent服務:在glan
25、ce鏡像中添加hw_qemu_guest_agentproperty:可以通過Nova的nova set-password 子命令驗證修改虛擬機的密碼功能。需要注意的是,Nova默認修改的是管理員用戶的密碼,Linux系統(tǒng)為root,Windows系統(tǒng)為Administrator,因此上傳鏡像時需要指明鏡像是什么操作系統(tǒng)類型:當然你也可以通過os_admin_user屬性配置修改其他用戶的密碼,比如配置修改密碼時指定用戶不是root,而是ubuntu用戶:6 網(wǎng)卡多隊列默認情況下網(wǎng)卡中斷由單個CPU處理,當有大量網(wǎng)絡包時單個CPU處理網(wǎng)絡中斷就可能會出現(xiàn)瓶頸。通過網(wǎng)卡多隊列技術(shù)可以把網(wǎng)卡的中斷
26、分攤到多個CPU中。阿里云官方文檔測試表明在網(wǎng)絡PPS和網(wǎng)絡帶寬的測試中,與1個隊列相比,2個隊列最多可提升50%到1倍,4個隊列的性能提升更大。OpenStack支持配置網(wǎng)卡多隊列(要求內(nèi)核版本大于3.0),配置方法如下:隊列長度固定為虛擬機的核數(shù)。創(chuàng)建虛擬機查看網(wǎng)卡信息:網(wǎng)卡信息表明支持的最大隊列(Combined)為2,目前設置為1,可以通過ethtool工具修改配置:為了保證中斷自動均衡到所有的CPU,建議開啟irqbalance服務:7 watchdog在一些分布式集群中,我們可能期望虛擬機crash時自動關(guān)機,防止出現(xiàn)集群腦裂?;蛘弋斬撦d過高時自動執(zhí)行重啟,使服務恢復正常。OpenStack支持配置虛擬watchdog,首先制作鏡像時需要安裝并開啟watchdog服務:配置如下glance image屬性:其中支持的action列表如下:rese
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國硼硅玻璃行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025年粉末靜電噴涂設備項目可行性研究報告
- 2025年空調(diào)洗滌劑項目可行性研究報告
- 2025年碘鎵燈燈具項目可行性研究報告
- 2025年江西省歐潭智慧生活服務有限公司招聘筆試參考題庫含答案解析
- 2025屆高考地理一輪復習非選擇題鞏固練習四新人教版
- 浙江專版2025版高考生物一輪復習第2講細胞概述細胞膜細胞壁原核細胞教案
- 小學數(shù)學教師心得做一個聰明的教師精彩語句摘錄
- 點云處理優(yōu)化-全面剖析
- 2025版高中生物3.3.1酶的發(fā)現(xiàn)酶是生物催化劑及酶的催化效率學案浙科版必修1
- 二甲雙胍恩格列凈片(Ⅲ)-臨床用藥解讀
- 2024帶病體保險創(chuàng)新研究報告
- 3.28百萬農(nóng)奴解放紀念日演講稿1500字2篇
- 員工節(jié)能環(huán)保培訓課件
- 《精益生產(chǎn)培訓》課件
- 學校招生工作培訓方案
- 訪談記錄表模板
- 初高中物理的區(qū)別以及如何學好高中物理課件
- 工程結(jié)構(gòu)靜力試驗
- MQL4命令中文詳解手冊
- 國家開放大學《人文英語3》章節(jié)測試參考答案
評論
0/150
提交評論