其他分享
首页 > 其他分享> > OpenStack热迁移

OpenStack热迁移

作者:互联网

一些系统命令(和热迁移无关)

查看cpu核数信息
总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

查看物理CPU个数

cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

查看每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo| grep "cpu cores"| uniq

查看逻辑CPU的个数

cat /proc/cpuinfo| grep "processor"| wc -l

查看CPU信息(型号)

cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

查看内存信息

cat /proc/meminfo

热迁移配置

前提条件

目标物理服务器是有足够的内存,虚拟CPU,磁盘。cpu同类型,nova可登陆,计算节点之间免密登录。

more /proc/cpuinfo |grep 'model name'|uniq  查看CPU型号的。
dmidecode|grep -P 'Maximum\s+Capacity'    查看最大支持多大内存
dmidecode -t memory  查看内存型号,内存插槽等信息

说明:
网上说的用nfs用作共享存储演示,共有四个节点controller、 computer1、computer2。虚拟机从computer1动态迁移到computer2上。

本文用控制节点做nfs存储

controller : 192.168.140.5
computer1 : 192.168.140.6
computer2: 192.168.140.7

注意事项

每个计算节点一定要配置好自己和对方计算节点的dns解析,即/etc/hosts文件解析。否则热迁移失败。

配置nfs服务器 (任何服务器都可以)

1、安装nfs软件

yum install nfs* -y

2、创建共享目录,并赋予权限

其中id162为nova用户ID,查看nova的id命令为id nova,各节点nova的id要一样

mkdir /data
chown 162:162 /data
chmod 777 /data
echo '/data  192.168.140.0/24(rw,sync,all_squash,anonuid=162,anongid=162)' >/etc/exports

#注意(rw前不能有空格,否则挂载的目录只读

3、启动nfs服务

注意nfs在centos7中需要先启动rpcbind才能启动nfs

systemctl rpcbind start
systemctl nfs-server start
systemctl enable rpcbind
systemctl enable nfs-server

各个计算节点配置

1、配置nfs

mkdir /nova_data 
yum install nfs* -y
mount -t nfs 192.168.140.5:/data /nova_data

2、配置启动文件

说明:_netdev参数为nfs没启动情况下系统可正常启动。

echo '192.168.140.5:/data  /nova_data  nfs  _netdev,defaults,user,auto,noatime,intr   0 0' >>/etc/fstab

3、配置nova.conf

[DEFAULT]
instances_path=/nova_data

[libvirt]
live_migration_flag = VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_TUNNELLED,VIR_MIGRATE_UNSAFE

block_migration_flag = VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC
[vnc]
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 192.168.8.71
novncproxy_base_url = http://192.168.8.71:6080/vnc_auto.html
enabled = True

在[libvirt]选项中:一定要把

block_migration_flag==VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC 

中的 VIR_MIGRATE_TUNNELLED删除。

4、配置/etc/libvirt/qemu.conf

在文件末尾配置

vnc_listen = "0.0.0.0"
user = "root"
group = "root"
dynamic_ownership = 1

5、配置/etc/libvirt/libvirtd.conf

在文件末尾配置

listen_tls = 0
listen_tcp = 1
auth_tcp="none"
listen_addr = "0.0.0.0" 
tcp_port = "16509"

6、配置/etc/sysconfig/libvirtd

在文件末尾配置

LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
LIBVIRTD_ARGS="--listen"

7、重启服务

重启服务
CentOS 6

service libvirtd restart
service openstack-nova-compute restart

CentOS 7

systemctl restart libvirtd openstack-nova-compute

8、配置nova用户免密登录

说明:在各个计算节点之间配置
#查看nova用户状态

cat /etc/passwd|grep nova
nova:x:162:162:OpenStack Nova Daemons:/var/lib/nova:/sbin/nologin

/sbin/nologin说明此时nova用户无法登录bash
修改nova允许登录bash

usermod -s /bin/bash nova

查看修改后内容

cat /etc/passwd|grep nova
nova:x:162:162:OpenStack Nova Daemons:/var/lib/nova:/bin/bash

给nova用户创建密码

passwd nova

配置免密登录有两个方案,选择其中一个即可。

方案1

切换用户

su - nova

创建秘钥对

ssh-keygen
#一直回车

将公钥拷贝至其他计算节点

ssh-copy-id -i .ssh/id_rsa.pub nova@ip
ssh-copy-id -i .ssh/id_rsa.pub nova@ip

验证是否能免密码ssh到目标服务器

-bash-4.2$ ssh nova@ip
-bash-4.2$ ssh nova@ip

其他服务器重复以上过程

方案2

若节点过多以上过程工作量会很繁琐,且当有新节点加入时需要所有节点操作互信新节点,一种简单的方式是所有节点共用一套公钥、私钥
本示例共三个节点compute1、compute2、compute3
说明:以下步骤切换到nova用户操作
compute1生成公钥、私钥

su - nova
ssh-keygen

在compute1 /var/lib/nova/.ssh目录下创建config文件,内容如下

Host *
StrictHostKeyChecking no #首次ssh不会显示确认信息

在compute1生成authorized_keys文件

su - nova
ssh-copy-id nova@compute1

注意:这里输入的是nova的密码

将compute1上authorized_keys config id_rsa拷贝至其他节点,拷贝之前先在其他节点切换到nova用户建立.ssh目录
在其他节点操作

su - nova
mkdir  /var/lib/nova/.ssh

在有秘钥的节点操作

su - nova
cd /var/lib/nova/.ssh或 cd .ssh/
scp authorized_keys config id_rsa nova@compute2:~/.ssh/
scp authorized_keys config id_rsa nova@compute3:~/.ssh/

至此各节点已经完成互信,可以互相免密码访问,秘钥登录过程为:
发起方数据包经过私钥(id_rsa)加密->对端使用authorized_keys中的公钥解密,由于所有节点公钥秘钥对相同,所以能完成验证、互信。
验证过程中也发现authorized_keys中如果存在多个公钥,会像iptables规则一样逐个尝试解密。

9、测试

virsh -c qemu+tcp://服务器IP/system  #请在服务器IP处填写你的各个计算节点IP或主机名
[root@wuyeliang /]# virsh -c qemu+tcp://wuyeliang/system
Welcome to virsh, the virtualization interactive terminal.

Type:  'help' for help with commands
       'quit' to quit

到此为止,热迁移已经配置成功,接下来迁移即可,本文是用的命令做迁移,从dashboard上做迁移也可以。

热迁移的其他配置

1.5 实例迁移超时配置

nova配置

vim /etc/nova/nova.conf
[libvirt]
live_migration_completion_timeout = 10  #乘以实例内存为超时时间

重启nova服务

systemctl restart libvirtd.service openstack-nova-compute.service

动态迁移

1、创建虚拟机

略过

2、查看实例

source admin-openrc.sh 
nova list --all-te 
+--------------------------------------+--------+----------------------------------+--------+------------+-------------+----------------------+
| ID                                   | Name   | Tenant ID                        | Status | Task State | Power State | Networks             |
+--------------------------------------+--------+----------------------------------+--------+------------+-------------+----------------------+
| f3d749ba-98e1-4624-9782-6da729ad164c | demo-1 | 6aa0d6b0992042d8b116eeb40dd570d0 | ACTIVE | -          | Running     | public=216.168.10.15 |
| 8da00f69-05f6-4425-9a8a-df56b79a474f | demo-2 | 6aa0d6b0992042d8b116eeb40dd570d0 | ACTIVE | -          | Running     | public=216.168.10.14 |
+--------------------------------------+--------+----------------------------------+--------+------------+-------------+----------------------+

3、查看需要迁移虚拟机实例

nova show f3d749ba-98e1-4624-9782-6da729ad164c

4、查看可用的计算节点

[root@wuyeliang ~]# nova-manage service list 
No handlers could be found for logger "oslo_config.cfg"
Binary           Host                                 Zone             Status     State Updated_At
nova-cert        wuyeliang                            internal         enabled    :-)   2016-03-08 00:55:09
nova-scheduler   wuyeliang                            internal         enabled    :-)   2016-03-08 00:55:10
nova-consoleauth wuyeliang                            internal         enabled    :-)   2016-03-08 00:55:09
nova-conductor   wuyeliang                            internal         enabled    :-)   2016-03-08 00:55:09
nova-compute     wuyeliang                            nova             enabled    :-)   2016-03-08 00:55:01
nova-compute     computer1                            nova             enabled    :-)   2016-03-08 00:55:08
nova-compute     computer2                            nova             enabled    :-)   2016-03-08 00:55:08

5、查看目标节点资源

[root@wuyeliang ~]#  nova-manage service describe_resource  computer1
HOST                              PROJECT     cpu mem(mb)     hdd
computer1       (total)                         2    1840      17
computer1       (used_now)                      1    1024       1
computer1       (used_max)                      1     512       1
computer1                6aa0d6b0992042d8b116eeb40dd570d0       1     512       1

6、开始迁移,正常无任何回显

nova live-migration 8da00f69-05f6-4425-9a8a-df56b79a474f computer1

1.7 CPU类型不同导致OpenStack虚拟机热迁移失败

故障现象:虚拟机在不同类型CPU的服务器间热迁移时报错:

InvalidCPUInfo: Unacceptable CPU info: CPU doesn't have compatibility

故障原因:nova默认使用CPU的一些特性,热迁移时对CPU对比要求较高
解决办法:

1、修改/etc/nova/nova.conf文件,cpu_mode=None;
2、修改代码/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py,把driver.py文件中cpu对比的代码注释掉;
3、已经创建的虚拟机,要硬重启,重新生成xml配置文件。

热迁移检查cpu型号是否相同的代码

# Compare CPU
#        if not instance.vcpu_model or not instance.vcpu_model.model:
#            source_cpu_info = src_compute_info['cpu_info']
#            self._compare_cpu(None, source_cpu_info)
#        else:
#            self._compare_cpu(instance.vcpu_model, None)

标签:nova,CPU,VIR,nfs,ssh,OpenStack,迁移,节点
来源: https://blog.csdn.net/weixin_40548182/article/details/113624272