1.规划节点


IP

主机名

节点

192.168.100.10

controller

OpenStack控制节点

192.168.100.20

compute

OpenStack计算节点

2.基础准备

使用OpenStack平台的两台节点,将OpenStack控制节点的资源加入计算资源,使192.168.100.10这个节点既是控制节点也是计算节点,然后使用这两台主机进行实验。节点规划表中的IP地址为作者的IP地址,在进行实操案例的时候,按照自己的环境规划网络与IP地址。

3.OpenStack手动迁移虚拟机

修改openrc.sh

把compute节点的IP和主机名改为controller节点的IP和主机名

运行iaas-install-nova-compute.sh

在控制节点运行iaas-install-nova-compute.sh

执行过程中需要确认登录controller节点和输入controller节点root用户密码。

注:这个.sh仅仅是一个环境认证产量,如果准备在哪个节点使用,就在哪个节点修改,所以该实验仅在controller节点进行了修改

3.1确认控制节点资源

登录http://192.168.100.10/adshboard界面,使用用户名密码登录,在左侧导航栏单击管理员--资源管理--虚拟机管理器查看

3.2创建虚拟机



# 登录
 controller # source /etc/keystone/admin-openrc.sh 
# 通过命令创建云主机 
 controller # nova boot --flavor m1.test --image centos7.5 --security-group test --nic net-name=int-net test

可以使用dashboard界面或者命令创建虚拟机,此处使用dashboard界面创建,创建了一个名为test的云主机,可以通过命令查看。

controller # nova show test 
...... 
| OS-EXT-AZ:availability_zone         | nova                                                     | 
| OS-EXT-SRV-ATTR:host                 | compute                                                 | 
| OS-EXT-SRV-ATTR:hostname             | test              | 
| OS-EXT-SRV-ATTR:hypervisor_hostname | compute                                                 | ......

可以看到虚拟机所在的物理节点为compute节点。

3.3查看虚拟机

随着云计算平台的使用,可能会出现compute节点的资源不够用了,需要将创建在compute节点的虚拟机迁移至controller节点。又或者是compute节点机器太老了,需要跟新,这个时候也需要将创建在compute节点的虚拟机进行迁移。

执行手动迁移虚拟机的过程有两步,需要将虚拟机实例目录进行转移,并修改数据库文件内容。具体如下。

首先找到虚拟机实例存放的位置,虚拟机存放在/var/lib/nova/instances/目录下,因为test虚拟机被创建在了compute节点,所以在compute节点上查看虚拟机实例。

compute # cd /var/lib/nova/instances/ 
compute # ll 
总用量 4  
drwxr-xr-x. 2 nova nova 54 6月  16 08:29 8c0a8f1d-7da1-447d-b96b-e48c0520c04d  
drwxr-xr-x. 2 nova nova 54 5月  31 03:47 _base  
-rw-r--r--. 1 nova nova 30 6月  25 11:20 compute_nodes  
drwxr-xr-x. 2 nova nova 93 6月   7 17:44 locks

8c0a8f1d-7da1-447d-b96b-e48c0520c04d目录即为虚拟机实例的目录,该目录名称与虚拟机的ID一致,查看该目录下内容:

compute # cd 8c0a8f1d-7da1-447d-b96b-e48c0520c04d  
compute # ll  
-rw-------. 1 root root     55270 6月  16 11:06 console.log  
-rw-r--r--. 1 root root 122355712 6月  16 11:06 disk  
-rw-r--r--. 1 nova nova        79 6月  16 08:29 disk.info

该目录下存放着虚拟机的磁盘文件及日志等。

3.4迁移虚拟机目录

在进行虚拟机迁移之前,先将,test虚拟机关机,然后将虚拟机目录整个移动到controller节点的/var/lib/nova/instances/目录下:

compute # scp -r /var/lib/nova/instances/8c0a8f1d-7da1-447d-b96b-e48c0520c04d/ root@192.168.100.10:/var/lib/nova/instances/  
compute # rm -rf /var/lib/nova/instances/8c0a8f1d-7da1-447d-b96b-e48c0520c04d/

到controller节点的/var/lib/nova/instances/目录下查看

controller # cd /var/lib/nova/instances/  
controller # ll  
总用量 0  
drwxr-xr-x. 2 root root 54 6月  25 11:37 8c0a8f1d-7da1-447d-b96b-e48c0520c04d

可以看到虚拟机目录已经在controller节点了,但是该目录的用户和用户组是root,需要修改成nova

controller # chown nova:nova 8c0a8f1d-7da1-447d-b96b-e48c0520c04d  
controller # ll   
总用量 4  
drwxr-xr-x. 2 nova nova 54 6月  25 11:37 8c0a8f1d-7da1-447d-b96b-e48c0520c04d  
-rw-r--r--. 1 nova nova 33 6月  25 11:41 compute_nodes  
drwxr-xr-x. 2 nova nova 40 6月  25 11:41 locks

至此前期的迁移工作准备完毕。

3.5修改数据库文件

在完成test虚拟机目录的迁移后,此时去启动虚拟机会报错,因为在数据库中记录了该虚拟机的宿主机名字,需要进入数据库,修改这一字段才能完成虚拟机的迁移

进入数据库:

controller # mysql -uroot -p000000 > use nova;  
> update instances set host='controller',node='controller' where uuid='8c0a8f1d-7da1-447d-b96b-e48c0520c04d';

修改完成后,重启nova-compute服务


controller # systemctl restart openstack-nova-compute


重启服务后启动虚拟机test并查看虚拟机的详细信息

controller # nova start 8c0a8f1d-7da1-447d-b96b-e48c0520c04d  
controller # nova list  
controller # nova show  
test ......  
| OS-EXT-AZ:availability_zone | nova |  
| OS-EXT-SRV-ATTR:host | controller |  
| OS-EXT-SRV-ATTR:hostname | test |  
| OS-EXT-SRV-ATTR:hypervisor_hostname | controller | ......

可以查看到test虚拟机成功启动,在查看test虚拟机的详细信息后,可以发现宿主机由原来的compute变成了controller。虚拟机手动迁移操作成功。