我们来做一个简单的迁移demo,两台机器的环境都是Centos7,虚拟化组件都是系统默认;步骤如下:
使用NFS做一个共享存储,setup nfs方法如下:
On server
service rpcbind start
service nfs start
service nfslock start
/foo 10.1.10.100(rw,sync,no_root_squash,no_subtree_check,insecure)
exportfs -a
On client
service rpcbind start
firewall-cmd --add-service=nfs
firewall-cmd --add-service=rpc-bind
firewall-cmd --add-service=mountd
在迁移的两台机器上,创建相同的目录,例如:/media/nfs,然后分别进行挂载;
注意:我在测试的时候,其中一台作为nfs server,另外一台作为nfs client;做nfs server的那台使用了 127.0.0.1进行了挂载,如果直接使用本地目录,libvirt会报错:
error: Unsafe migration: Migration without shared storage is unsafe
创建虚拟机命令如下:
name=will1
virt-install --name=$name --ram=$((16<<10)) --vcpus=8 \
--location=/media/disk0/VMs/CentOS-7-x86_64-DVD-2207-02.iso \
--os-type=linux \
--disk path=/media/disk1/VMs/${name}_sda.qcow2,format=qcow2,size=64 \
--console pty,target_type=serial --extra-args 'console=ttyS0,115200n8 serial' \
--network bridge=virbr0 --network user --graphics none
但是,在执行迁移时,报了如下错误:
error: Unsafe migration: Migration may lead to data corruption if disks use cache != none or cache != directsync
所以,使用virsh edit加入了cache=none
<driver name='qemu' type='qcow2' cache='none'/>
执行迁移的命令为:
virsh migrate will1 qemu+ssh://192.168.60.154/system tcp://192.168.60.154 --live --verbose
注意,如果没有tcp://192.168.60.154,在我的环境里回报错:
error: Unable to resolve address 'xxxxx' service '49152': Name or service not known
迁移成功之后:
virsh migrate will1 qemu+ssh://10.18.60.154/system tcp://10.18.60.154 --live --verbose
root@192.168.60.154's password:
Migration: [100 %]
virsh list --all
Id Name State
----------------------------------------------------
- will0 shut off
- will1 shut off
在另外一台机器上:
virsh list --all
Id Name State
----------------------------------------------------
32 will1 running
- rocky9.2 shut off
- test0 shut off
- test1 shut off