天天看點

虛拟機線上遷移總結虛拟機熱遷移其他遷移:

虛拟機熱遷移

虛拟機遷移是個很古老的技術,沒有什麼可講的,我之是以寫,是因為我太笨了,留着以後作紀念的。

1      遷移的類型

遷移虛拟機的方式有兩種:一種是動态遷移,一種是靜态遷移。

靜态遷移

靜态遷移:也叫做正常遷移、離線遷移(OfflineMigration)。就是在虛拟機關機或暫停的情況下從一台實體機遷移到另一台實體機。因為虛拟機的檔案系統建立在虛拟機鏡像上面,是以在虛拟機關機的情況下,隻需要簡單的遷移虛拟機鏡像和相應的配置檔案到另外一台實體主機上;如果需要儲存虛拟機遷移之前的狀态,在遷移之前将虛拟機暫停,然後拷貝狀态至目的主機,最後在目的主機重建虛拟機狀态,恢複執行。這種方式的遷移過程需要顯式的停止虛拟機的運作。從使用者角度看,有明确的一段停機時間,虛拟機上的服務不可用。這種遷移方式簡單易行,适用于對服務可用性要求不嚴格的場合。

動态遷移

動态遷移(Live Migration):也叫線上遷移(Online Migration)。就是在保證虛拟機上服務正常運作的同時,将一個虛拟機系統從一個實體主機移動到另一個實體主機的過程。該過程不會對最終使用者造成明顯的影響,進而使得管理者能夠在不影響使用者正常使用的情況下,對實體伺服器進行離線維修或者更新。與靜态遷移不同的是,為了保證遷移過程中虛拟機服務的可用,遷移過程僅有非常短暫的停機時間。遷移的前面階段,服務在源主機的虛拟機上運作,當遷移進行到一定階段,目的主機已經具備了運作虛拟機系統的必須資源,經過一個非常短暫的切換,源主機将控制權轉移到目的主機,虛拟機系統在目的主機上繼續運作。對于虛拟機服務本身而言,由于切換的時間非常短暫,使用者感覺不到服務的中斷,因而遷移過程對使用者是透明的。動态遷移适用于對虛拟機服務可用性要求很高的場合。

動态遷移需要将原有的虛拟機鏡像放在采用 SAN(storage area network)或 NAS(network-attached storage)之類的集中式共享外存裝置,這樣遷移的時候,不是遷移整個硬碟鏡象,而是遷移記憶體的資訊.是以遷移起來,速度比較快,停頓時間少。

動态遷移實際上是把虛拟機的配置封裝在一個檔案中,然後通過高速網絡,把虛拟機配置和記憶體運作狀态從一台實體機迅速傳送到另外一台實體機上,期間虛拟機一直保持運作狀态。現有技術條件下,大多虛拟機軟體如 VMware、Hyper-V、Xen 進行動态遷移都需要共享存儲的支援。典型的共享存儲包括 NFS 和 SMB/CIFS 協定的網絡檔案系統,或者通過 iSCSI 連接配接到 SAN 網絡。選用哪一種網絡檔案系統,需要根據具體情況而定。

2      實驗方式選擇NFS

在源主控端A和目标機B,進行操作,首先建立NFS共享檔案存儲的檔案夾。

2.1:安裝NFS àyum install nfs*

2.2:啟動NFSàservice nfs start

2.3:配置NFSàvi  /etc/exports

/opt/test 100.1.8.*(rw,sync,no_root_squash)

/opt/test 為要共享的檔案夾

 ro:共享目錄隻讀;

rw:共享目錄可讀可寫;

all_squash:所有通路使用者都映射為匿名使用者或使用者組;

no_all_squash(預設):通路使用者先與本機使用者比對,比對失敗後再映射為匿名使用者或使用者組;

root_squash(預設):将來訪的root使用者映射為匿名使用者或使用者組;

no_root_squash:來訪的root使用者保持root帳号權限;

anonuid=<UID>:指定匿名通路使用者的本地使用者UID,預設為nfsnobody(65534);

anongid=<GID>:指定匿名通路使用者的本地使用者組GID,預設為nfsnobody(65534);

secure(預設):限制用戶端隻能從小于1024的tcp/ip端口連接配接伺服器;

insecure:允許用戶端從大于1024的tcp/ip端口連接配接伺服器;

sync:将資料同步寫入記憶體緩沖區與磁盤中,效率低,但可以保證資料的一緻性;

async:将資料先儲存在記憶體緩沖區中,必要時才寫入磁盤;

wdelay(預設):檢查是否有相關的寫操作,如果有則将這些寫操作一起執行,這樣可以提高效率;不重新開機nfs服務應用更新,相關選項如下:

-a 全部挂載或解除安裝 /etc/exports中的内容

-r 重新讀取/etc/exports 中的資訊 ,并同步更新/etc/exports、/var/lib/nfs/xtab

-u 解除安裝單一目錄(和-a一起使用為解除安裝所有/etc/exports檔案中的目錄)

-v 在export的時候,将詳細的資訊輸出到螢幕上。

no_wdelay:若有寫操作則立即執行,應與sync配合使用;

subtree_check(預設) :若輸出目錄是一個子目錄,則nfs伺服器将檢查其父目錄的權限;

no_subtree_check :即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的權限,這樣可以提高效率

2.4:不重新開機NFS時:exportfs  -rv:

-a 全部挂載或解除安裝 /etc/exports中的内容

-r 重新讀取/etc/exports 中的資訊,并同步更新/etc/exports、/var/lib/nfs/xtab

-u 解除安裝單一目錄(和-a一起使用為解除安裝所有/etc/exports檔案中的目錄)

-v 在export的時候,将詳細的資訊輸出到螢幕上。

2.5:檢查共享目錄情況

showmount -e #查詢本機nfs共享目錄情況

showmount -e 源主控端IP #查詢目标機和主控端的nfs共享目錄情況

2.6:挂載目錄:

mount –t nfs IP(共享目錄):/NFS共享目錄/ /共享目錄

2.7:起動虛拟機

啟動主控端/usr/libexec/qemu-kvm–had  /共享目錄/XXX.img  ………

啟動目标機/usr/libexec/qemu-kvm–had  /共享目錄/XXX.img –incomingtcp:0:8888

注意:(1)NFS 挂載目錄必須一緻 (2)“-incomingtcp:0:8888”參數表示在 6666 端口建立一個 TCP socket 連接配接用于接收來自源主機的動态遷移的内容,其中 0 表示運作來自任何主機的連接配接。“-incoming“使 qemu-kvm 程序進入到監聽模式,而不是真正以指令行中的檔案運作客戶機。

(3)在源主控端的客戶機的 QEMUmonitor 中,使用指令 ” migrate tcp:主控端IP:6666" 即可進入動态遷移的流程。

問題解決:

1,挂載nfs出現問題

當去mount遠端的nfs伺服器,出現問題了.

mount.nfs: access denied by server whilemounting 211.87.***.53:/mnt/nfs

解決:原來發現,在/etc/exports中,沒有将/mnt/nfs添加進去,隻能将裡面有的檔案夾才能mount到本機來.

可以先umoutn /mnt/nfs ,然後在mount看看能否成功

2.出現Permission denied

暫時未知

3.遷移需要FQDN

解決:ssh進入到dest host機器,運作hostname domain 就好了.其中domian是一個域名.将接下來就可以進行遷移了.

其他遷移:

一、虛拟機備份

使用save/restore方法

備份:

virsh save --bypass-cache vm_test/opt/vmtest_save –running

将vm_test的目前狀态儲存到/opt/vm2_save檔案中

-runing: 參數表示下次restore回來的時候能夠自動啟動vm_test

這個指令會導緻vm_test被關閉

還原:

virsh restore /opt/vm2_save --bypass-cache--running 

二、 虛拟機線上遷移(基于NFS共享存儲)(帶快照)

快照的檢視、建立、删除

(qemu) info snapshots

(qemu) delvm snapshots_name

(qemu) savevm snapshots_name

帶快照的遷移指令:

Qemu:

源主控端上啟動虛拟機:

# qemu-system-x86_64 –hda /挂載目錄/XXX.img –m 1024 –monitorstdio –net nic –net tap,ifname=tap0,script=no,downscript=no –vnc :3

目标機上啟動虛拟機:

# qemu-system-x86_64 –hda /挂載目錄/XXX.img –m 1024 –monitorstdio –net nic –net tap,ifname=tap0,script=no,downscript=no –vnc :3 –incomingtcp:0:8888     

在主控端的qemu monitor下使用指令,遷移虛拟機到目标機

(qemu) migrate –d tcp:目标機IP:8888

Virsh:

# virsh start vmtest

# virsh migrate --live GuestNameDestinationURI  

GuestName指虛拟機名稱,DestinationURI:目的主機的URI。

舉例:# virsh  migrate --live vmtestqemu+ssh://192.168.1.1/system

遷移的要求是:需要目的主機和源主機有相同的環境,包括hypervisor

三、 檢視虛拟機遷移進度

在主控端qemu monitor下檢視虛拟機遷移情況:

(qemu)info migrate(檢視虛拟機遷移資訊)

(qemu)info status(檢視虛拟機狀态)

四、         虛拟機存儲熱遷移(不跨主機)

1.虛拟機yt運作時,執行鏡像操作:

virsh qemu-monitor-command --hmp  yt  ’info block’ (查詢虛拟機的塊裝置)

virsh qemu-monitor-command --hmp yt  'drive_mirror -fdrive-ide0-0-0(block_device) /data/test/yt-mirror.img'

檢視完成狀态:

virsh qemu-monitor-command --hmp yt 'infoblock-jobs'

3.當mirror-img的大小與原大小相同時,執行complete操作:

virsh qemu-monitor-command --hmp yt'block_job_complete  drive-ide0-0-0'

4.檢視block-jobs,已經沒有活動的job:

virsh qemu-monitor-command --hmp yt  'info block-jobs'

5.執行如下指令,檢視block的資訊,yt的系統鏡像已經指向yt-mirror.img鏡像。

virsh qemu-monitor-command --hmp yt  'info block'

6.檢視虛拟機鏡像檔案及mirro生成檔案大小

ll /data/test/

7.連接配接虛拟機yt,進入後執行一個dd寫入操作:

dd if=/dev/sda  of=test.img bs=1MB count=512

8.檢視虛拟機鏡像檔案及mirro生成檔案:

ll /data/test/

   可以看到,虛拟機yt的原系統鏡像大小沒有發生變化,但mirror鏡像大小增加了512MB,既block_job_complete操作實際上切換了vm的系統鏡像,可以實作虛拟機的線上存儲遷移,并且block_job_complete操作,可以連續切換系統鏡像。

五、虛拟機存儲冷遷移(不跨主機)

1.虛拟機yt挂起不關閉,執行鏡像操作:

virsh suspend yt

virsh qemu-monitor-command --hmp yt  'drive_mirror -f drive-ide0-0-0  /data/test/yt-mirror.img'

2.檢視完成狀态:

virsh qemu-monitor-command --hmp yt 'infoblock-jobs'

3.當mirror-img的大小與原大小相同時,執行complete操作:

virsh qemu-monitor-command --hmp yt'block_job_complete  drive-ide0-0-0'

4.檢視block-jobs,已經沒有活動的job:

virsh qemu-monitor-command --hmp yt  'info block-jobs'

5.執行如下指令,檢視block的資訊,yt的系統鏡像已經指向yt-mirror.img鏡像。

virsh qemu-monitor-command --hmp yt  'info block'

6.啟動虛拟機

virsh qemu-monitor-command --hmp yt  'c'

7.檢視虛拟機鏡像檔案及mirro生成檔案大小

ll /data/test/

8.連接配接虛拟機yt,進入後執行一個dd寫入操作:

dd if=/dev/sda  of=test.img bs=1MB count=512

9.檢視虛拟機鏡像檔案及mirro生成檔案:

ll /data/test/

   可以看到,虛拟機yt的原系統鏡像大小沒有發生變化,但mirror鏡像大小增加了512MB,既block_job_complete操作實際上切換了vm的系統鏡像,可以實作虛拟機的存儲冷遷移。

在虛拟機關閉的狀态下,直接複制虛拟機鏡像,然後更改虛拟機磁盤路徑在重新開機虛拟機。

六、虛拟機磁盤熱添加

虛拟機添加硬碟有兩種方法:

1、通過virsh attach-disk指令添加一塊硬碟到系統中,即時生效。(熱添加)

2、通過修改虛拟機配置檔案進行添加,永久生效。(冷添加)

方法一、通過virsh attach-disk指令添加硬碟

首先在客戶機中看看在未添加新硬碟系統的分區情況。

從上圖我們可以看到目前系統中隻有一塊硬碟sda,而且被分成2個分區,其中sda1為系統啟動分區。

下面開始添加硬碟:

先使用 qemu-img添加一塊新的硬碟

qemu-img create -f qcow2 testdisk.img 20G

現在開始使用virsh attach-disk指令把新硬碟添加到虛拟機上。

virsh attach-disk ytvm testdisk.img vda

通過virsh attach-disk添加硬碟時,隻能是虛拟機運作時才能添加,而且是即時生效的。然後,對vda進行格式化,

#mkfs.ext4 /dev/vda

接下來,建立一個目錄用來挂載新的硬碟

#mkdir /test

#mount /dev/vda /test

最後,将該挂載添加到開機啟動中

#blkid /dev/vda          //擷取硬碟的UUID

/dev/vdb: UUID="19fc1d1d-7891-4e22-99ef-ea3e08a61840"TYPE="ext4"

#vim /etc/fstab            //添加開機加載,在最後一行加入

UUID=19fc1d1d-7891-4e22-99ef-ea3e08a61840/test ext4 defaults        1 2

使用virsh detach-disk ytvm --target vda 也可以解除安裝。(注意修改/etc/fstab裡面的内容,不然會影響虛拟機的啟動)

七、 虛拟機磁盤冷添加

直接在配置檔案中</disk>這之後,添加如下的代碼

<disk type='file' device='disk'>

<driver name='qemu' type='qcow2'cache='none'/>

<source file='/testdisk.img'/>

<target dev='vda' bus='virtio'/>

</disk>

注意其中type表示硬碟的格式

file表示硬碟所在的路徑

dev表示硬碟在系統中顯示的硬碟名稱

然後,對vda進行格式化,

#mkfs.ext4 /dev/vda

接下來,建立一個目錄用來挂載新的硬碟

#mkdir /test

#mount /dev/vda /test

最後,将該挂載添加到開機啟動中

#blkid /dev/vda          //擷取硬碟的UUID

/dev/vdb:UUID="19fc1d1d-7891-4e22-99ef-ea3e08a61840" TYPE="ext4"

#vim /etc/fstab            //添加開機加載,在最後一行加入

UUID=19fc1d1d-7891-4e22-99ef-ea3e08a61840/test ext4 defaults        1 2

關閉虛拟機重新修改配置檔案或使用virsh detach-disk ytvm --target vda 可以解除安裝。