KVM的driver_mirror功能相關實驗
阿新 • • 發佈:2019-02-03
mirror相關實驗1【mirror功能基本測試】:
vm執行時,執行映象操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'drive_mirror -f xxxblock_device /data/xxxxxx-mirror.img'
檢視完成狀態:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
在mirror映象過程中,vnc、ssh、console連線到vmxxxxxxx,執行一些touch檔案、建立目錄、刪除目錄、dd寫入資料的操作
當mirror-img的大小與原大小相同時,執行取消mirro操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'block_job_cancel xxxblock_device'
以上過程完成後,使用/data/xxxxxx-mirror.img建立虛擬機器,進入新建立的虛擬機器,檢視mirror建立過程中的檔案目錄建立、刪除、寫入操作是否被同步。
實驗結論:
mirror過程中關於檔案、目錄的建立、刪除、寫入操作均被同步的儲存到新建立的mirror-img中。
mirror相關實驗2【mirror過程中踢出儲存服務】:
host1: 開啟nfs服務,設定共享路徑為/data/mirror
host2: mount掛載host1的nfs共享儲存路徑到本地的 /data/mirror
再host2上vm執行時,執行映象操作,mirror-img儲存到/data/mirror路徑下:
virsh qemu-monitor-command --hmp vmxxxxxxx 'drive_mirror -f xxxblock_device /data/mirror/xxxxxx-mirror.img'
檢視完成狀態:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
在mirror映象過程中,在host1中執行service nfs stop服務,將nfs共享儲存斷開
在host2上多次執行檢視mirror狀態的操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
mirror映象狀態保持停止
連線到vmxxxxxxx,執行一些touch檔案、建立目錄、刪除目錄、dd寫入資料的操作
在host1中執行service nfs start服務,將nfs共享儲存開啟
在host2上多次執行檢視mirror狀態的操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
mirror映象狀態從停止狀態(持續了一段時間)變成進行狀態
檢視完成狀態,直到mirror-img的大小與原大小相同時,執行取消mirro操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'block_job_cancel xxxblock_device'
以上過程完成後,使用/data/xxxxxx-mirror.img建立虛擬機器,進入新建立的虛擬機器,檢視mirror建立過程中的檔案目錄建立、刪除、寫入操作是否被同步。
實驗結論:
mirror過程可以被中斷,mirror過程中關於檔案、目錄的建立、刪除、寫入操作均被同步的儲存到新建立的mirror-img中。
stop/commit相關實驗1【stop狀態下執行commit操作的物件】:
vm執行時,執行如下操作掛起:
virsh qemu-monitor-command --hmp vmxxxxxxx 'stop'
檢視vm的系統映象:
ll /data/kvm/disk.img
檢視vm系統映象的back檔案路徑:
qemu-img info /data/kvm/disk.img
檢視back檔案的資訊:
ll /data/kvm/base/base.img
對塊裝置做commit操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'commit xxxblock_device'
完成後,檢視vm的系統映象:
ll /data/kvm/disk.img
檢視back檔案的資訊:
ll /data/kvm/base/base.img
實驗結論:
stop狀態下可以對block_device做commit操作,commit操作將vm系統中的產生的資料重新整理到base檔案中。
mirror相關實驗3【block_job_complete操作(執行時切換vm系統映象)】:
vm執行時,執行映象操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'drive_mirror -f xxxblock_device /data/xxxxxx-mirror.img'
檢視完成狀態:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
執行如下動作掛起vm:
virsh qemu-monitor-command --hmp vmxxxxxxx 'stop'
當mirror-img的大小與原大小相同時,執行complete操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'block_job_complete xxxblock_device'
執行如下動作取消vm掛起:
virsh qemu-monitor-command --hmp vmxxxxxxx 'c'
檢視block-jobs,已經沒有活動的job:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
執行如下命令,檢視block的資訊,vm的系統映象仍指向原映象
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block'
檢視虛擬機器映象檔案及mirro生成檔案:
ll /data/
連線vm,進入後執行一個dd寫入操作:
dd if=/dev/vda of=test.img bs=1MB count=512
檢視虛擬機器映象檔案及mirro生成檔案:
ll /data/
可以看到,vm的原系統映象大小沒有發生變化,但mirror映象大小增加了512MB既,block_job_complete操作實際上切換了vm的系統映象。
vm中執行shutdown操作
刪除剛建立的映象
rm -f /data/xxxxxx-mirror.img
再次執行vm,執行映象操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'drive_mirror -f xxxblock_device /data/xxxxxx-mirror.img'
當mirror-img的大小與原大小相同時,執行complete操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'block_job_complete xxxblock_device'
檢視block-jobs,已經沒有活動的job:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
執行如下命令,檢視block的資訊,vm的系統映象仍指向原映象
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block'
檢視虛擬機器映象檔案及mirro生成檔案:
ll /data/
連線vm,進入後執行一個dd寫入操作:
dd if=/dev/vda of=test.img bs=1MB count=512
vm中執行shutdown操作:
檢視虛擬機器映象檔案及mirro生成檔案:
ll /data/
可以看到,vm的原系統映象大小沒有發生變化,但mirror映象大小增加了512MB既,block_job_complete操作實際上切換了vm的系統映象。
實驗結論:
無論是否對vm做掛起操作,block_job_complete操作均會切換vm的系統映象到新生成的mirror映象
mirror相關實驗4【執行兩次drive_mirror和block_job_complete操作】:
繼續上一次的實驗環境
再次執行映象操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'drive_mirror -f xxxblock_device /data/mirror-xxxxxx-mirror.img'
完成後,檢視虛擬機器映象檔案及mirro生成檔案:
ll /data/
可以看到新生成的映象檔案與上一次執行的生成的mirror映象檔案大小相同,既映象的是切換後的映象檔案。
再次執行complete操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'block_job_complete xxxblock_device'
檢視虛擬機器映象檔案及mirro生成檔案:
ll /data/
連線vm,進入後執行一個dd寫入操作:
dd if=/dev/vda of=test__0000.img bs=1MB count=512
vm中執行reboot操作:
檢視虛擬機器映象檔案及mirro生成檔案:
ll /data/
可以看到,vm的原系統映象大小沒有發生變化,第一次mirror生成的映象大小也沒有發生變化,第二次mirro映象大小增加了512MB
實驗結論:
可以連續的執行block_job_complete操作,連續切換系統映象。
mirror相關實驗5【block_job_complete操作後,物理上移除原系統映象】
vm執行時,執行映象操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'drive_mirror -f xxxblock_device /data/xxxxxx-mirror.img'
檢視完成狀態:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
當mirror-img的大小與原大小相同時,執行complete操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'block_job_complete xxxblock_device'
執行mv操作將vm系統映象檔案mv到另外一個檔案系統
實驗結論:
block_job_complete操作後可以物理上移除原系統映象
mirror相關實驗6【mirror使用-n引數】
centso6.2的基礎映象base.img
qemu-img create -f qcow2 -o backing_file=/data/kvm/base.img /data/kvm/centos6.2-qcow2.img
qemu-img create -f qcow2 -o backing_file=/data/kvm/base.img /data/kvm/mirror-centos6.2.img
vm使用centos6.2-qcow2.img 為系統映象,啟動vm
進入vm,做寫入操作:
dd if=/dev/vda of=test.img bs=1MB count=1024
在host上檢視寫入的情況, centos6.2-qcow2.img不斷增長:
ll /data/kvm
host上執行映象操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'drive_mirror -n xxxblock_device /data/kvm/mirror-centos6.2.img'
在host上檢視寫入的情況, mirror-centos6.2.img不斷增長:
ll /data/kvm
檢視完成狀態:
virsh qemu-monitor-command --hmp vmxxxxxxx 'info block-jobs'
在mirror映象過程中,vnc、ssh、console連線到vmxxxxxxx,執行一些touch檔案、建立目錄、刪除目錄的操作
當mirror-img的大小與原大小相同時,執行取消mirro操作:
virsh qemu-monitor-command --hmp vmxxxxxxx 'block_job_cancel xxxblock_device'
以上過程完成後,使用mirror-centos6.2.img建立虛擬機器,進入新建立的虛擬機器,檢視mirror建立過程中的檔案目錄建立、刪除、寫入操作是否被同步。
實驗結論:
mirror過程中關於檔案、目錄的建立、刪除、寫入操作均被同步的儲存到新建立的mirror-centos6.2.img。
使用-n引數方法並以base.img映象為基礎,可以保證使用mirror功能儲存儘可能少的資料,並以最快的速度建立mirror映象。
總結:
1》以上實驗,基本驗證了使用mirror功能做快照的可行性,同時,針對系統盤和資料盤可採用不同的引數來進行快照,保證可用性。
2》對於qemu-kvm的drive,當指定cache為none模式時,理論上使用者系統只要做了寫入磁碟操作,均會被同步的寫入到映象檔案中,但對於使用者系統中沒有落入磁碟的檔案系統/資料修改,該方法不能保證資料的一致性。
3》在不對使用者系統做掛起操作的情況下,目前沒有手段可以保證資料100%一致。