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