2冷迁移

冷迁移有两种方式:

一种方式只能在同一个openstack集群中做,另一种可以再相同或者不同的集群中做

在做冷迁移之前记得把要迁移的实例关机


2.1方法1

把主机名为YUN-19上的实例迁移到YUN-20上,两个节点在同一个集群中,其中YUN-19是控制节点

2.1.1YUN-19上,修改数据库

(修改数据库必须要在控制节点上做)

# mysql

mysql> use nova;

mysql> update instances set host='YUN-20' where hostname='test1';


2.1.2实例文件拷贝

YUN-19上,把实例的文件拷贝到目的端

切换到/var/lib/nova/inctances目录

# scp -r a8814340-98d5-4ed3-b99b-32ee38cfb78f/ root@192.168.0.20:/var/lib/nova/instances/


2.1.3查看文件

YUN-20上可以看到拷贝过来的文件

[root@YUN-20 instances]# ll

total 20

drwxr-xr-x. 2 nova nova 4096 Apr 28 20:55 1c11a4b1-5df8-48f8-be5d-6e1c5efb7f99

drwxr-xr-x. 2 root root 4096 Apr 28 21:41 a8814340-98d5-4ed3-b99b-32ee38cfb78f

drwxr-xr-x. 2 nova nova 4096 Apr 28 20:55 _base

-rw-r--r--. 1 nova nova 29 Apr 28 21:28 compute_nodes

drwxr-xr-x. 2 nova nova 4096 Apr 23 23:49 locks


2.1.4新建与迁移的实例关联的网桥

切换到迁移过来实例的目录下

[root@YUN-20 a8814340-98d5-4ed3-b99b-32ee38cfb78f]# virsh define libvirt.xml

Domain instance-00000001 defined from libvirt.xml


[root@YUN-20 a8814340-98d5-4ed3-b99b-32ee38cfb78f]# virsh start instance-00000001

error: Failed to start domain instance-00000001

error: Cannot get interface MTU on 'qbr95221104-b9': No such device

通过上边的出错信息可以看到实例所绑定的网桥信息


新建网桥并查看

在新建网桥前,首先应该把YUN-19上的网桥删除

再删除之前首先关闭网桥

可以输入ifconfig命令查看到网桥信息


关闭网桥

[root@YUN-19 ~]# ifconfig qbr95221104-b9 down


删除网桥

[root@YUN-19 ~(keystone_admin)]# brctl delbr qbr95221104-b9


[root@YUN-20 a8814340-98d5-4ed3-b99b-32ee38cfb78f]# brctl addbr qbr95221104-b9

[root@YUN-20 a8814340-98d5-4ed3-b99b-32ee38cfb78f]# brctl show

bridge name bridge id STP enabled interfaces

qbr482b0524-26 8000.ea9b0ced7d50 no qvb482b0524-26

tap482b0524-26

qbr95221104-b9 8000.000000000000 no

show 8000.000000000000 no

virbr0 8000.525400d2ae89 yes virbr0-nic


[root@YUN-20 a8814340-98d5-4ed3-b99b-32ee38cfb78f]# virsh define libvirt.xml

Domain instance-00000001 defined from libvirt.xml

上边命令执行成功了


开启实例

[root@YUN-20 a8814340-98d5-4ed3-b99b-32ee38cfb78f]# virsh start instance-00000001

Domain instance-00000001 started

昨晚上面开启实例的操作后,在dash中并没有发现该实例启动,在dash中再点击“开启云主机”。


2.2方法2

YUN-11集群中的实例迁移到YUN-19所在的集群


要迁移的实例选择linux的系统,在系统中创建目录、编辑文件,迁移后查看创建的目录和修改的文档是否正常

迁移之前关闭要迁移的实例

关闭之后把实例所在的目录做下备份,目录是2dccde39-31a4-48d5-8f62-0f963ffec481_copy


YUN-17是YUN-11所在集群上的一个计算节点

进入拷贝后的目录

[root@YUN-17 2dccde39-31a4-48d5-8f62-0f963ffec481_copy]# ll

total 6896

-rw-r-----. 1 root root 1 Apr 30 10:18 console.log

-rw-r--r--. 1 root root 7536640 Apr 30 10:18 disk

-rw-r--r--. 1 root root 79 Apr 30 10:18 disk.info

-rw-r--r--. 1 root root 1635 Apr 30 10:18 libvirt.xml


2.2.1转换镜像格式

[root@YUN-17 2dccde39-31a4-48d5-8f62-0f963ffec481_copy]# qemu-img convert -O raw disk disk3

[root@YUN-17 2dccde39-31a4-48d5-8f62-0f963ffec481_copy]# ll

total 807664

-rw-r-----. 1 root root 1 Apr 30 10:18 console.log

-rw-r--r--. 1 root root 7536640 Apr 30 10:18 disk

-rw-r--r--. 1 root root 21474836480 Apr 30 10:25 disk3

-rw-r--r--. 1 root root 79 Apr 30 10:18 disk.info

-rw-r--r--. 1 root root 1635 Apr 30 10:18 libvirt.xml

2.2.2查看镜像信息

[root@YUN-17 2dccde39-31a4-48d5-8f62-0f963ffec481_copy]# qemu-img info disk

image: disk

file format: qcow2

virtual size: 20G (21474836480 bytes)

disk size: 6.7M

cluster_size: 65536

backing file: /var/lib/nova/instances/_base/0872411ded8842738a2265ea3e670ff330ab475f


[root@YUN-17 2dccde39-31a4-48d5-8f62-0f963ffec481_copy]# qemu-img info disk3

image: disk3

file format: raw

virtual size: 20G (21474836480 bytes)

disk size: 782M

转换格式的命令说明:

本来应该是这样的

qemu-img convert -f raw -O qcow2 test.raw test.qcow2

-f后面跟的是转变之前的格式,这个系统自己会识别,所以不添加也可以

-O后面是要转变的格式,注意o是大写


从上面可以看出,修改镜像格式之后变得很大


2.2.3几种镜像格式的比较:

raw格式

最简单,就是一个直接给虚拟机进行读写的文件。raw不支持动态增长空间,必须一开始就指定空间大小。所以相当的耗费磁盘空间。但是对于支持稀疏文件的文件系统(如ext4)而言,这方面并不突出。


cow格式

cow格式和raw一样简单,也是创建时分配所有空间,但cow有一个bitmap表记录当前哪些扇区被使用,所以cow可以使用增量镜像,也就是说可以对其做外部快照。但cow也没有其他功能,其特点就是简单。


qcow格式

qcow在cow的基础上增加了动态增加文件大小的功能,并且支持加密,压缩。qcow通过2级索引表来管理整个镜像的空间分配,其中第二级的索引用了内存cache技术,需要查找动作,这方面导致性能的损失。qcow现在基本不用,一方面其优化和功能没有qcow2好,另一方面,读写性能又没有cowraw好。


qcow2格式

qcow2是集各种技术为一体的超级镜像格式,支持内部快照,加密,压缩等一系列功能,访问性能也在不断提高。但qcow2的问题就是过于臃肿,把什么功能都集于一身。


raw格式的话,速度稍微快点,在高版本的qemu-kvm中,几乎不比qcow2的格式快,而qcow2格式节省空间,可动态增长,在公有云中广泛使用,建议使用qcow2


可以使用下面的命令对镜像进行扩展和收缩

qemu-img resize disk3 +100M 扩展

qemu-img resize disk3 -- -100M 收缩


2.2.4注意事项

两个命令参数的区别

qcow和qcow2格式的镜像只能扩展,不能收缩

[root@YUN-17 2dccde39-31a4-48d5-8f62-0f963ffec481_copy]# qemu-img convert -O qcow disk disk4

[root@YUN-17 2dccde39-31a4-48d5-8f62-0f963ffec481_copy]# qemu-img resize disk4 -- -10M

This image format does not support resize

[root@YUN-17 2dccde39-31a4-48d5-8f62-0f963ffec481_copy]# qemu-img resize disk -- -10M

This image format does not support resize


2.2.5把镜像disk4拷贝到YUN-19上

添加镜像

[root@YUN-19 ~(keystone_admin)]# glance add name=test1 is_public=true container_format=bare disk_format=raw < /root/disk4

Added new image with ID: 3573cf89-7697-48cd-b07c-51344f416156


YUN-19的dash中从test1镜像启动一个云主机

启动成功,之后进入该系统的控制台,发现主机中的目录和文件保存完整

绑定浮动IP,外部主机也可以PING


把镜像dask3也做和dask4一样的操作,最后发现结果一样,正常

上面是以cirros的镜像启动的实例做的实验,下面以linux的实例启动的镜像作为对象


2.2.6linux实例做迁移

按照上边的操作把linux的实例处理

从镜像启动的实例在绑定浮动ip后,发现外部的机器PING不通

进入实例发现网卡是eth1,但是网卡配置文件时ifcfg-eth0,配置文件中没有MACIP的信息,只是BOOTPROTO=dhcp


对比正常的实例

正常的实例网卡是eth0,网卡配置文件是ifcfg-eth0,配置文件也中没有MACIP的信息,只是BOOTPROTO=dhcp


使用cirros镜像的实例所做的迁移,没有出现这样的情况,在绑定浮动IP后,外部机器可以PING


所做处理

在钱以后的实例上,修改网卡配置文件

# mv ifcfg-eth0 ifcfg-eth1

修改文件参数

# vi ifcfg-eth1

DEVICE=eth0


to


DEVICE=eth1


保存修改后重启网络


发现外部机器可以ping通该实例




2.2.7补充一

确定镜像文件在拷贝到远程的主机之前是否需要转换一下格式


2.2.7.1YUN-11所在的集群实例迁移到YUN-19所在集群


YUN-17上的实例做实验


以cirros的镜像创建的实例为例

直接把实例目录下的disk文件拷贝到远程主机上

然后添加镜像,镜像格式化为qcow2

之后在dash中从该镜像启动实例,结果失败,状态为“Error


在拷贝disk文件之前把镜像各是转换为qcow格式

拷贝后添加镜像,格式化为qcow2

之后再dash中从该镜像启动实例,结果启动成功,但是在随后绑定浮动IP后,结果在外部的机器可以PING通该实例的浮动IP



2.2.7.2YUN-11所在的集群内做迁移


直接把实例目录下的disk文件拷贝到远程主机上

然后添加镜像,镜像格式化为qcow2

之后再dash中从该镜像启动实例,结果失败,状态为“Error


把上面转换为qcow格式的镜像拷贝到YUN-11上,在做之后的操作,最后发现外部主机可以PING通浮动IP


事实证明的确需要装换镜像格式


2.2.8补充二

2.2.8.1环境说明

在两个网络配置相同的集群中迁移实例,YUN-11所在的集群和YUN-19所在的集群

实例选择YUN-11上的主机MDS_TESTMDS_TEST是客户测试环境的主机

MDS_TEST | 16GB 内存| 4 虚拟内核 | 200.0GB

[root@host-10-10-0-2 ~]# fdisk -l


Disk /dev/vda: 214.7 GB, 214748364800 bytes

255 heads, 63 sectors/track, 26108 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0008ffc5


   Device Boot      Start        End      Blocks    Id  System

/dev/vda1   *         1        1306    10484736  83  Linux

/dev/vda2          1306       5483    33556437+  82  Linux swap / Solaris

/dev/vda3          5484       26108   165670312+  5  Extended

/dev/vda5          5484       26108   165670281  83  Linux


[root@host-10-10-0-2 ~]# df  

Filesystem             1K-blocks      Used   Available   Use% Mounted on

/dev/vda1             10320184   8697816   1098132   89%  /

tmpfs                 8166272         72   8166200   1%  /dev/shm

/dev/vda5             163070836  5338004   149449320 4%  /home


[root@host-10-10-0-2 /]# du -sh

du: cannot access `./proc/1754/task/1754/fd/4': No such file or directory

du: cannot access `./proc/1754/task/1754/fdinfo/4': No such file or directory

du: cannot access `./proc/1754/fd/4': No such file or directory

du: cannot access `./proc/1754/fdinfo/4': No such file or directory

14G .

[root@host-10-10-0-2 /]# du -sh home

5.0G home


查看大小

关闭实例之前

[root@YUN-11 instances]# cd ffe795cd-529b-422f-82d0-550dfad0af8c/

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c]# du -sh

17G .

关机之后一样大


2.2.8.2拷贝文件

[root@YUN-11 instances]# cp -r ffe795cd-529b-422f-82d0-550dfad0af8c ffe795cd-529b-422f-82d0-550dfad0af8c_bak


[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# ll

total 15187156

-rw-r-----. 1 root root 3 May 1 15:56 console.log

-rw-r--r--. 1 root root 18232508416 May 1 15:58 disk

-rw-r--r--. 1 root root 79 May 1 15:56 disk.info

-rw-r--r--. 1 root root 1636 May 1 15:56 libvirt.xml

2.2.8.3镜像处理

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# qemu-img convert -O qcow disk disk1

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# ll

total 30976944

-rw-r-----. 1 root root 3 May 1 15:56 console.log

-rw-r--r--. 1 root root 18232508416 May 1 15:58 disk

-rw-r--r--. 1 root root 16168738816 May 1 16:08 disk1

-rw-r--r--. 1 root root 79 May 1 15:56 disk.info

-rw-r--r--. 1 root root 1636 May 1 15:56 libvirt.xml

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# du -sh disk1

16G disk1

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# qemu-img resize disk1 -- -10M

This image format does not support resize

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# qemu-img convert -O raw disk disk2


[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# ll

total 46734360

-rw-r-----. 1 root root 3 May 1 15:56 console.log

-rw-r--r--. 1 root root 18232508416 May 1 15:58 disk

-rw-r--r--. 1 root root 16168738816 May 1 16:08 disk1

-rw-r--r--. 1 root root 214748364800 May 1 16:18 disk2

-rw-r--r--. 1 root root 79 May 1 15:56 disk.info

-rw-r--r--. 1 root root 1636 May 1 15:56 libvirt.xml


看到镜像dask2过大,所以对镜像做处理

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# qemu-img resize disk2 -- -10G

Image resized.

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# du -sh disk2

15G disk2

发现镜像并没有收缩10G,这应该是镜像本身大小的限制


[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# scp disk1 root@192.168.0.19:/root

root@192.168.0.19's password:

disk1 100% 15GB 98.2MB/s 02:37

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# scp disk2 root@192.168.0.19:/root

root@192.168.0.19's password:

disk2 100% 200GB 58.5MB/s 58:22


2.2.8.4在目的端添加镜像并创建实例

[root@YUN-19 ~(keystone_admin)]# glance add name=test1 is_public=true container_format=bare disk_format=qcow2 < /root/disk1

Added new image with ID: 0106e819-32e2-4606-901d-5e58ebc83394

[root@YUN-19 ~(keystone_admin)]# glance add name=test2 is_public=true container_format=bare disk_format=qcow2 < /root/disk2

Added new image with ID: a69f8055-009b-4075-9200-a21dac4ccac2


以镜像test1启动的实例失败

选择20的硬盘空间


以镜像test2启动的实例25分钟后成功

新建一个300G硬盘的云主机类型,选择该类型创建实例

绑定浮动IP,外部机器可以PING通,在绑定之前PING不通

这里需要注意的是,因为是两个集群网络状态相同,所以要想迁移的实例可以和外部连通,必须要把源端的集群的控制节点关闭,使网络失效,这样才不会造成网络冲突。


2.2.8.5查看迁移后的实例

[root@host-10-10-0-5 ~]# fdisk -l


Disk /dev/vda: 322.1 GB, 322122547200 bytes

255 heads, 63 sectors/track, 39162 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0008ffc5


   Device Boot      Start        End      Blocks   Id  System

/dev/vda1   *         1       1306    10484736  83  Linux

/dev/vda2          1306       5483    33556437+  82  Linux swap / Solaris

/dev/vda3            5484     26108   165670312+  5  Extended

/dev/vda5            5484     26108   165670281  83  Linux


[root@host-10-10-0-5 ~]# df

Filesystem           1K-blocks      Used  Available  Use%  Mounted on

/dev/vda1           10320184   8698780   1097168  89%  /

tmpfs                7973248       224   7973024   1%  /dev/shm

/dev/vda5          163070836   5338004  149449320  4%  /home


[root@host-10-10-0-5 /]# du -sh

du: cannot access `./home/tomcat-sg': Input/output error

du: cannot access `./home/mds.war': Input/output error

du: cannot access `./proc/1886/task/1886/fd/4': No such file or directory

du: cannot access `./proc/1886/task/1886/fdinfo/4': No such file or directory

du: cannot access `./proc/1886/fd/4': No such file or directory

du: cannot access `./proc/1886/fdinfo/4': No such file or directory

13G .

[root@host-10-10-0-5 /]# du -sh home

du: cannot access `home/tomcat-sg': Input/output error

du: cannot access `home/mds.war': Input/output error

4.6G home

发现有丢失文件的情况,有可能是收缩镜像造成的


2.2.8.6再次在YUN-11上转变镜像格式

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# qemu-img convert -O raw disk disk3


[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# qemu-img convert -O raw disk disk3


[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# qemu-img convert -O qcow2 disk disk4


[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# ll

total 78063864

-rw-r-----. 1 root root 3 May 1 15:56 console.log

-rw-r--r--. 1 root root 18232508416 May 1 15:58 disk

-rw-r--r--. 1 root root 16168738816 May 1 16:08 disk1

-rw-r--r--. 1 root root 192199786496 May 1 16:21 disk2

-rw-r--r--. 1 root root 214748364800 May 1 18:46 disk3

-rw-r--r--. 1 root root 16171859968 May 1 20:53 disk4

-rw-r--r--. 1 root root 79 May 1 15:56 disk.info

-rw-r--r--. 1 root root 1636 May 1 15:56 libvirt.xml


镜像说明:

disk 原镜像

disk1 格式化为qcow格式

disk2 格式化为saw格式再收缩

disk3 格式化为saw格式

disk4 格式化为qcow2格式

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# du -sh disk3

16G disk3

2.2.8.7拷贝镜像、添加镜像、创建实例

[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# scp disk3 root@192.168.0.19:/root

root@192.168.0.19's password:

disk3 100% 200GB 58.5MB/s 58:22


[root@YUN-11 ffe795cd-529b-422f-82d0-550dfad0af8c_bak]# scp disk4 root@192.168.0.19:/root

root@192.168.0.19's password:

disk4 100% 15GB 50.9MB/s 05:03


[root@YUN-19 ~(keystone_admin)]# glance add name=test1 is_public=true container_format=bare disk_format=qcow2 < /root/disk4

Added new image with ID: d5176682-733c-4673-9ac4-b75c223e4f8c

考虑到dask3过大就没有创建实例,下面是以dask4为镜像创建的实例

云主机类型选择方面,需要注意的是,硬盘大小要与镜像大小相匹配

这里选择50G实例启动不来,选择300G可以


查看实例状态

[root@host-10-10-0-13 ~]# fdisk -l


Disk /dev/vda: 322.1 GB, 322122547200 bytes

255 heads, 63 sectors/track, 39162 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x0008ffc5


   Device Boot      Start         End      Blocks    Id  System

/dev/vda1   *          1        1306    10484736   83  Linux

/dev/vda2           1306        5483    33556437+  82  Linux swap / Solaris

/dev/vda3           5484       26108   165670312+   5  Extended

/dev/vda5           5484       26108   165670281   83  Linux


可以SSH连接

[root@host-10-10-0-13 ~]# df

Filesystem           1K-blocks      Used   Available  Use% Mounted on

/dev/vda1            10320184   8697816   1098132  89% /

tmpfs                 7973220        72   7973148  1% /dev/shm

/dev/vda5           163070836   5338004 149449320  4% /home


[root@host-10-10-0-13 ~]# cd /

[root@host-10-10-0-13 /]# du -sh

du: cannot access `./proc/1744/task/1744/fd/4': No such file or directory

du: cannot access `./proc/1744/task/1744/fdinfo/4': No such file or directory

du: cannot access `./proc/1744/fd/4': No such file or directory

du: cannot access `./proc/1744/fdinfo/4': No such file or directory

14G .

[root@host-10-10-0-13 /]# du -sh home

5.0G home

3参考文档

迁移

http://openstack.prov12n.com/convert-import-a-vmware-image-to-openstack-kvm/


KVM

×××linux/cainiaowanyunjisuanzhishier_KVMxunijigenggaidaxiao_652061_1381135035.html