基于QMP實(shí)現(xiàn)對qemu虛擬機(jī)進(jìn)行交互_第1頁
基于QMP實(shí)現(xiàn)對qemu虛擬機(jī)進(jìn)行交互_第2頁
基于QMP實(shí)現(xiàn)對qemu虛擬機(jī)進(jìn)行交互_第3頁
基于QMP實(shí)現(xiàn)對qemu虛擬機(jī)進(jìn)行交互_第4頁
基于QMP實(shí)現(xiàn)對qemu虛擬機(jī)進(jìn)行交互_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基于QMP實(shí)現(xiàn)對qemu虛擬機(jī)進(jìn)行交互本文詳解QMP,包含qmp、hmp、qemu-guest-agent的介紹、工作原理、配置方法、范例目錄?QMP介紹

?QMP語法

?單獨(dú)使用qemu,啟用QMP

?通過libvirt啟動qemu,啟用QMP

?qemu-guest-agent(qemu-ga)

?官方參考文檔QMP介紹qemu對外提供了一個socket接口,稱為qemumonitor,通過該接口,可以對虛擬機(jī)實(shí)例的整個生命周期進(jìn)行管理,主要有如下功能?狀態(tài)查看、變更

?設(shè)備查看、變更

?性能查看、限制

?在線遷移

?數(shù)據(jù)備份

?訪問內(nèi)部操作系統(tǒng)通過該socket接口傳遞交互的協(xié)議是qmp,全稱是qemumonitorprotocol,這是基于json格式的協(xié)議在繼續(xù)往下講之前,需要先了解qemu、kvm、libvirt之間的區(qū)別(因?yàn)橛泻芏嗤瑢@三者的理解是混亂的)?qemu:虛擬機(jī)仿真器。通過軟件模擬出cpu、內(nèi)存、磁盤、主板、網(wǎng)卡等設(shè)備

?kvm:高性能的cpu仿真器。由于軟件模擬的cpu性能很差,因此出現(xiàn)了kvm,這是通過硬件與內(nèi)核的支持實(shí)現(xiàn)接近native性能的cpu仿真器,可以理解為虛擬機(jī)里的cpu任務(wù)直接交給物理機(jī)cpu完成。

?libvirt:虛擬機(jī)管理平臺。能納管qemu、lxc、esx等虛擬化軟件,通過編寫xml實(shí)現(xiàn)對虛擬機(jī)、存儲、網(wǎng)絡(luò)等進(jìn)行配置和管理上面只描述最核心的功能,另有一些高級功能,以及互相重疊的功能在這里不做描述,否則容易混淆QMP語法#不帶參數(shù)的指令{"execute":"XXX"}#帶參數(shù)的指令{"execute":"XXX","arguments":{...}}單獨(dú)使用qemu,啟用QMP啟動qemu虛擬機(jī)#qemumonitor采用tcp方式,監(jiān)聽在上,端口為4444/usr/libexec/qemu-kvm-qmptcp::4444,server,nowait#qemumonitor采用unixsocket,socket文件生成于/opt/qmp.socket/usr/libexec/qemu-kvm-qmpunix:/opt/qmp.socket,server,nowait連接qemumonitor#tcp可以通過telnet進(jìn)行連接,方法如下>telnet4444Trying...Connectedto.Escapecharacteris'^]'.{"QMP":{"version":{"qemu":{"micro":0,"minor":12,"major":2},"package":"qemu-kvm-ev-2.12.0-18.el7_6.1.1"},"capabilities":[]}}#unixsocket可以通過nc-U進(jìn)行連接,方法如下>nc-Uqmp.socket{"QMP":{"version":{"qemu":{"micro":0,"minor":12,"major":2},"package":"qemu-kvm-ev-2.12.0-18.el7_6.1.1"},"capabilities":[]}}按照上面執(zhí)行完命令后,不會退出而是繼續(xù)等待輸入,但這個時候還無法使用,接著,需要輸入一條qmp指令才可以{"execute":"qmp_capabilities"}此時屏幕會輸出以下內(nèi)容,表示從"capabilitiesnegotiation模式"進(jìn)入了"command"模式{"return":{}}接下來,就可以執(zhí)行qmp的指令了,qmp指令非常多,由于篇幅有限,這里僅舉幾個例子(更多內(nèi)容請參考官方文檔,本文最后附上網(wǎng)址)#查看支持哪些qmp指令{"execute":"query-commands"}#虛擬機(jī)狀態(tài){"execute":"query-status"}#虛擬機(jī)暫停{"execute":"stop"}#磁盤查看{"execute":"query-block"}#磁盤在線插入{"execute":"blockdev-add","arguments":{"driver":"qcow2","node-name":"drive-virtio-disk1","file":{"driver":"file","filename":"/opt/data.qcow2"}}}{"execute":"device_add","arguments":{"driver":"virtio-blk-pci","drive":"drive-virtio-disk1"}}#磁盤完整備份{"execute":"drive-backup","arguments":{"device":"drive-virtio-disk0","sync":"full","target":"/opt/backuptest/fullbackup.img"}}除了使用telnet、nc從外部連接,還可以在qemu啟動時候進(jìn)入一個交互的cli界面,直接輸入指令,只不過這個時候輸入的是hmp(humanmonitorprotocol),而不是qmp。hmp簡化了qmp的使用,但實(shí)際在底層依然是轉(zhuǎn)化為qmp進(jìn)行操作的,配置方法如下/usr/libexec/qemu-kvm-qmptcp::4444,server,nowait-monitorstdio此時會出現(xiàn)交互界面,輸入help,就可以看到hmp支持的所有命令(qemu)help使用hmp不需要輸入類似qmp的{"execute":"qmp_capabilities"}這里列出幾個范例#直接輸入info回車,可以看到所有查詢類的指令使用方法(qemu)info#查看塊設(shè)備www.f-1.cc(qemu)infoblock#在線增加磁盤(qemu)drive_add0file=/opt/data.qcow2,format=qcow2,id=drive-virtio-disk1,if=none(qemu)device_addvirtio-blk-pci,scsi=off,drive=drive-virtio-disk1通過libvirt啟動qemu,啟用QMP有2種方法:1.xml里不做任何額外配置,默認(rèn)就會啟用QMP,但通過這種方法啟用的QMP,只能通過libvirt接口(比如virsh命令或libvirtapi)來進(jìn)行QMP指令的輸入,而不能通過telnet、nc之類的,因?yàn)槟J(rèn)啟用的QMP,只會生成unixsocket(位于/var/lib/libvirt/qemu/domain-xx-DOMAIN/monitor.sock),而該socket被libvirtd始終連接占用著。此時通過psaux命令可以看到qemu進(jìn)程參數(shù),和之前有點(diǎn)不太一樣,不是-qmp,而是如下-chardevsocket,id=charmonitor,fd=36,server,nowait\-monchardev=charmonitor,id=monitor,mode=controlqemu命令參數(shù)支持2種方法配置qmp,即-qmp和-mon這里通過virsh做個簡單示范virshqemu-monitor-commandDOMAIN--pretty'{"execute":"query-block"}'使用--pretty是為了讓json的輸出具有換行縮進(jìn)的格式化效果,而不是打印在一行里

不需要在執(zhí)行其他指令前執(zhí)行{"execute":"qmp_capabilities"}2.在xml里額外增加2段配置,注意看下面這個xml的第一行,需要增加一個xmlns:qemu,另外在<domain>里增加<qemu:command><domaintype='kvm'xmlns:qemu='/schemas/domain/qemu/1.0'>...<devices>...</devices><qemu:commandline><qemu:argvalue='-qmp'/><qemu:argvalue='unix:/tmp/qmp-sock,server,nowait'/></qemu:commandline></domain>接著通過libvirt啟動qemu(比如virshstartxxx),就創(chuàng)建了2個qmp通道,一個是libvirt默認(rèn)創(chuàng)建的,可以依然使用libvirt接口來執(zhí)行QMP指令,另一個就是自定義的qmp,可以通過上面提到的nc來使用nc-U/tmp/qmp-socklibvirt也支持hmp:virshqemu-monitor-commandDOMAIN--hmp'infoblock'qemu-guest-agent(qemu-ga)通過qmp還可以對虛擬機(jī)內(nèi)的操作系統(tǒng)進(jìn)行RPC操作,其原理是:1.先在xml里配置channel段,然后啟動虛擬機(jī),會在宿主機(jī)上生成一個unixsocket,同時在vm里生成一個字符設(shè)備,生成的unixsocket和字符設(shè)備可以理解為一個channel隧道的兩端

2.虛擬機(jī)里要啟動qemu-guest-agent守護(hù)進(jìn)程,該守護(hù)進(jìn)程會監(jiān)聽字符設(shè)備

3.然后可以在宿主機(jī)上將虛擬機(jī)里的qemu-guest-agent所支持的RPC指令經(jīng)過channel發(fā)送到虛擬機(jī)里,虛擬機(jī)里的qemu-guest-agent從字符設(shè)備收到數(shù)據(jù)后,執(zhí)行指令,比如讀寫文件、修改密碼等等若要使用qemu-guest-agent需要滿足以下條件1.xml里配置channel,范例:<domaintype='kvm'>...<devices>...<channeltype='unix'><sourcemode='bind'path='/tmp/channel.sock'/><targettype='virtio'name='org.qemu.guest_agent.0'/></channel></devices></domain>注意,path可以自定義,但name需要保持org.qemu.guest_agent.0,因?yàn)檫@會影響虛擬機(jī)里字符設(shè)備的文件名,而虛擬機(jī)里的qemu-guest-agent服務(wù)默認(rèn)讀取的是對應(yīng)org.qemu.guest_agent.0的字符設(shè)備,如果改了name,那么qemu-guest-agent的配置文件也要跟著改,改成對應(yīng)name的路徑2.虛擬機(jī)內(nèi)的操作系統(tǒng)內(nèi)核需要支持(linux、windows均支持)3.虛擬機(jī)里要安裝并啟動qemu-ga的服務(wù)(比如centos可以yuminstallqemu-ga&&systemctlstartqemu-guest-agent,windows通過導(dǎo)入virtio-win的iso,該iso里包含有qemu-ga程序)當(dāng)按照上述配置好后,可以在宿主機(jī)上進(jìn)行RPC操作#測試虛擬機(jī)里的qemu-guest-agent是否可用virshqemu-agent-commandDOMAIN--pretty'{"execute":"guest-ping"}'#查看支持的qemu-guest-agent指令virshqemu-agent-commandDOMAIN--pretty'{"execute":"guest-info"}'#獲得網(wǎng)卡信息virshqemu-agent-commandDOMAIN--pretty'{"execute":"guest-network-get-interfaces"}'#執(zhí)行命令,這是異步的,第一步會返回一個pid,假設(shè)為797,在第二步需要帶上這個pidvirshqemu-age

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論