openstack 在线迁移(live-migration)的配置

来源:互联网 发布:上班签到软件 编辑:程序博客网 时间:2024/05/22 02:24

今天花了大概一天白天的时间把openstack的在线迁移(live-migration)配好了,效果非常不错,在迁移过程中基本没有出现暂停的过程。下面是我的配置过程,有问题的大家指出一下,一起学习学习。


首先得说明一下我的openstack集群环境,我的部署架构是参照一个国外的人的部署的架构部署的,不熟过程在我的上一篇blog上。以下是节点的IP地址:

controler(ubuntu 12.10):192.168.100.51(与集群中其他的节点通信),10.6.12.60(外部可访问的地址)

compute0(ubuntu 12.10)192.168.100.56

compute3(ubuntu 12.10)192.168.100.57

network(ubuntu 12.10)192.168.100.52

注意:确保每个节点都能用名称解析,即hosts文件中要有对应的IP与服务器名

1.安装NFS服务器

由于迁移(migrate)需要用到共享存储,所以我们必须得配置一个能够被compute节点共同使用的存储服务。共享存储服务有很多种,也不只限于NFS服务。但是考虑到NFS的方便性,我采用了NFS。我选择在controler节点上配置一个NFS服务,用apt-get安装:
apt-get install nfs-kernel-server

安装后,创建一个文件夹,将此文件夹作为后面nfs服务要挂载的目录,我是创建在这里的:
mkdir -p /var/nfs-storage

然后编辑/etc/exports文件,在上面配置好nfs的访问规则,我直接在上面添加了如下的一句话,便于学习测试,对于ip地址的限制等安全问题我就没设置了:
/var/nfs-storage  *(insecure,rw,sync,no_root_squash)

保存退出,重启nfs服务:
service nfs-kernel-server
这样就配置好了nfs服务。

2.在compute节点上挂载NFS目录

在controler节点上配置好NFS服务后,要在compute节点上挂载这个目录,但是挂载点是有要求的,一定要挂载在nova.conf的配置文件中所指的那个instances目录下。除非你已经修改了上面的默认配置。而且,在不同的compute节点上,这个路径必须一摸一样。默认的路径是
“/var/lib/nova/instances"。
由于原来的compute节点上就有instances目录,所以我把原来的更名,然后重新创建了一个新的instances目录。注意修改权限,下面是我的文件夹的权限(我用root创建的,但是把owner改成了nova),给大家作为参考:

改好权限后,再计算节点上安装nfs-common:
apt-get install nfs-common
然后用下面的命令挂载:
mount 192.168.100.51:/var/nfs-storage /var/lib/nova/instances

为了防止每次开机都要重新手动挂载可以把它添加到fstcb文件上,这样每次开机都会自动挂载:
192.168.100.51:/var/nfs-storage /var/lib/nova/instances   nfs   defaults   0    0

接着我们要修改passwd文件,允许su nova用户,vim /etc/passwd,找到下面的行:
改前:nova:x:109:116::/var/lib/nova:/bin/flase改后:nova:x:109:116::/var/lib/nova:/bin/bash或nova:x:109:116::/var/lib/nova:/bin/sh
前面的数字没关系的(各个compute的nova的ID要一致)

如果以前没有设置过nova账号的密码,切换到root下,用passwd nova设置一个密码,后面会用到。

在另外的compute节点上也同样的配置

3.让compute节点能够互相免密码ssh登录

先切换到nova用户,然后用ssh-keygen产生一个公钥一个私钥一路直接回车就行:
ssh-keygen
cd到~/.ssh/,并用scp命令将产生的公钥发送到另一台compute节点的.ssh/authorized_keys文件里面:
scp id_rsa.pub nova@192.168.100.57:~/.ssh/authorized_keys
如果你原来的authorized_keys里面有内容,请不要这么操作,先scp到另一个文件,然后再用cat添加公钥到末尾,注意权限问题,下面是我的文件权限(包括.ssh文件夹的权限):


在另一台compute节点上配置好权限后,用ssh尝试一下是否可以免密码登陆,可以则表示成功,否则失败。成功后,在另一台compute节点上按上面的教程重新配置(注意是在nova用户下),直到所有的compute节点能够互相面密码ssh登录。

4.配置libvirt的相关文件

每个compute节点都是同样的配置,我这里只配置一台。
修改/etc/libvirt/libvirtd.conf文件:
改前 : #listen_tls = 0改后 : listen_tls = 0改前 : #listen_tcp = 1改后 : listen_tcp = 1添加(有了的话,不需要添加): auth_tcp = "none"

修改/etc/init/libvirt-bin.conf文件:
改前 : env libvirtd_opts="-d "改后 :env libvirtd_opts="-d -l"

修改/etc/default/libvirt-bin:
改前 :libvirtd_opts=" -d"改后 :libvirtd_opts=" -d -l"

用uuidgen产生一个uuid号,
root@g-compute3:/var/lib/nova# uuidgen f4ef4243-1ad4-4818-a4cf-abfc1979a7ce

复制常生的uuid号,并修改/etc/libvirt/libvirtd.conf文档,将上面的host_uuid 改成刚刚产生的那个号,并把注释去掉。
现在重新启动libvirt-bin:
service libvirt-bin restart

5.修改nova.conf文件

到这里,基本就差不多了,现在要做的就是修改nova.conf文件,并添加如下的内容到nova.conf文件上。
live_migration_bandwidth=0live_migration_retry_count=30live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE

前三个在官方文档上说是可选的,但是我还是加上了,测试是正确的。
最后,重新启动nova服务

6.测试

现在你可以先启动一台虚拟机,然后再用nova-migration命令来迁移虚拟机,迁移过程中可以用ssh连山虚拟机,测试是否虚拟机会有暂停。我的测试结果是完全没感觉到被暂停了。

心得

live-migration默认是不支持的,因为有可能导致异常。但是可以通过添加live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE到nova.conf文件来启用。
在配置过程中遇到了挺多问题,但是还是解决了,步骤应该就是上面的这些,如果有问题请大家提出来(最好有日志),一起分享。
我的linux可能还不是很熟,忘大家多多指教。
得感谢“广州——大伟”指出的一些问题
原创粉丝点击