本文由guwenwu写于2012年08月11日,转载请注明出处,谢谢!
摘要:在Openstack中生成VM后,由于业务的变更或业务量的增加,需要对VM进行扩展。目前Openstack中提供了Resize功能,本文对Openstack中的源码进行了测试和分析,并进行了一定的修改。
环境:2台Centos6.2机器
HOSTA:10.28.170.93 8core 16G 实体机 安装和运行全部Openstack组件
HOSTB:10.28.168.55 4core 4G 虚拟机 安装和运行nova-compute nova-network
一.Openstack中Resize功能源码分析
Openstack的resize功能默认的操作是在两台HOST(宿主机)之间进行静态的迁移(VM会重启,内存状态无法保存),但是通过修改配置文件,可以允许Openstack在一台HOST上进行RESIZE而不用迁移。
Resize的过程中,vm主要经过以下几个方法的处理:
def prep_resize(self, context, instance_uuid, instance_type_id, image,
**kwargs):
def prep_resize(self, context, instance_uuid, instance_type_id, image,
**kwargs):
def finish_resize(self, context, instance_uuid, migration_id, disk_info,
image):
详细的代码就不一一例举了,有兴趣的朋友可以自行阅读源码。
主要的操作步骤如下:
1.检查VM虚拟磁盘格式是否为qcow2,如果是的话,将磁盘格式转换为RAW
qemu-img convert -f qcow2 -O raw
2.将虚拟磁盘从HOST A scp到HOST B上
3.用以下命令对虚拟磁盘大小进行重置
qemu-img resize
e2fsck -fp
resize2fs
4.如果use_cow_images设置为true,则将磁盘重新转为qcow2格式。
5.重新获取网络配置,在HOST B上设置DHCP绑定和Iptables规则。
6.修改XML文件,重新启动虚拟机。
OK啦,整个Resize的工作就完成了。下面重点讲一下实际操作中遇到的问题和BUG
二.在一个单节点中进行resize
同一机器中进行resize需要在配置文件nova.conf中添加:
--allow_resize_to_same_host=True
重启服务:
service nova-api restart
service nova-compute restart
三.在多个节点上进行resize
3.1.采用共享存储
从源码上来看, Openstack中resize这个功能并没有考虑使用共享存储的情况。因此需要对源码进行一些改造,并不复杂,在这里就不交代了,有兴趣的朋友可以留言。PS:测试多节点时请注释掉--allow_resize_to_same_host=True
3.1.1.在HOST A上安装配置NFS服务器
(1)检查是否安装nfs(Centos6.2默认是安装好了的)
rpm -qa|grep nfs
如未安装:
yum install nfs-utils.x86_64(64位系统)
yum install nfs-utils(32位系统)
(2)检查安装portmap服务,注意portmap在centos6中改名为rpcbind
yum install rpcbind(centos6)
yum install portmap(centos5)
(3配置nfs服务器
vim /etc/exports
添加:
/home/nova/instances *(rw,sync,fsid=0,no_root_squash)
这一行的含义是共享文件夹$novahomedir/instances ,可访问该共享文件的ip地址为*(所有IP)
权限为:rw 读写权限
no_root_squash
登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限
重启服务
/etc/init.d/rpcbind restart
/etc/init.d/nfs restart
(4)配置nfs 客户端 client
检查服务起是否可用:
showmount -e 10.28.170.93
挂载目录
mount -t nfs 10.28.170.93:/home/nova/instances /home/nova/instances
配置开机自动挂载
vi /etc/fstab
添加
10.28.170.93 :/home/nova/instances /home/nova/instances nfs nodev,ro,rsize=32768,wsize=32768 0 0
(5):常见问题及解决方法
Permission denied
解决方法:1权限问题,注意检查权限设置。注意*和'('是连接在一起的。
2检查/home/nova/instance 的用户组是不是nova:nova,如果客户机和服务端nova的UID和GID不同,应该将其修改为一致的。用id命令查看用户UID、GID
命令格式
id [选项]... [用户名]
命令选项
-a 忽略,兼容其它版本
-Z, –context 只输出当前用户的安全上下文
-g, –group 只输出有效的GID
-G, –groups 输出所有的GID
-n, –name 对于 -ugG 输出名字而不是数值
-r, –real 对于 -ugG 输出真实ID而不是有效ID
-u, –user 只输出有效UID
–help 输出帮助后退出
–version 输出版本信息后退出
修改UID、GID:vi /etc/passwd修改nova用户
usermod -u 502 nova 和groupmod -g 502 nova
find / -user 501 -exec chown 502 {} \; 修改nova所有文件的UID
3.2,使用本地存储
3.2.1在HOST A和B配置ssh
vim /etc/passwd
将nova用户名后的/sbin/nologin修改为 /bin/bash
passwd nova修改密码
su nova切换到nova用户,运行
ssh-keygen -t rsa一路回车生成密钥,并将密钥copy到另一台机器中的nova用户.ssh目录下,这样HOST A和B之间的ssh连接就不需要密码。
四,BUG
迁移后VM网络错误,VM迁移后在新的host上重建网络和更新Iptables规则,而由于数据库中的vm_host没有及时更新为新的host,vm获得的dhcp_server是错误的。同时在host上的dhcp服务是由dnsmasq提供的,dnsmasq按照/home/nova/networks/nova-br100.conf文件中的配置对vm的mac和ip进行了绑定。而迁移后新的host中没有在这个中添加vm的mac和ip绑定,因此即使vm获得了正确的dhp_server地址,也无法获得IP。
VM完成resize之后进入resize_verfiy状态,这个时候Openstack还保留有虚拟机的旧数据,需要人工连接到vm中查看vm的状态是否正常,如果正常,需要自己调用confirm_resize接口,Openstack会将旧的数据删除。然而在confirm_resize的代码中,没有将虚拟机状态更新为active。这个也需要自己修改代码。
分享到:
相关推荐
在OpenStack环境中,虚拟机的稳定运行至关重要,但难免会出现故障或需要进行灾难恢复的情况。这时,利用专业的虚拟机备份软件进行恢复就显得非常必要。本文将详细介绍如何使用虚拟机备份软件来恢复OpenStack虚拟机。...
"openstack 虚拟机安装详细过程" 本文将详细介绍在虚拟机上安装 OpenStack 的详细步骤。OpenStack 是一个开源的云计算平台,提供了一个强大的云计算环境,可以满足大多数用户的需求。 步骤一:准备系统 在安装 ...
OpenStack虚拟机热迁移详解 OpenStack是一个开源的云计算管理平台项目,它由多个模块组合而成,支持多种虚拟化技术。在虚拟化的世界中,虚拟机迁移是一个非常重要的功能,它允许管理员在不影响服务质量(QoS)的...
在云环境中,虚拟机(VM)的弹性伸缩是关键功能之一,允许根据工作负载需求动态调整计算资源。本文所提及的发明是一种基于OpenStack的虚拟机弹性伸缩方法及系统,旨在优化资源分配,防止资源浪费,并确保服务的高...
openstack虚拟机创建的50个步骤和100个知识点
手把手教您如何使用python语言,创建OpenStack虚拟机。
在OpenStack环境中,确保虚拟机的安全性和可靠性是至关重要的,这通常涉及到虚拟机的备份和恢复策略。本文将详细介绍如何使用虚拟机备份软件来备份OpenStack虚拟机。 首先,要开始备份OpenStack虚拟机,你需要进入...
OpenStack 虚拟机创建交互流程详解 OpenStack 是一个开源的云计算平台,旨在提供一个简单、可扩展、满足公有云和私有云需要的云计算平台。OpenStack 由项目驱动,遵循四个开放原则:Open Source, Open Designed, ...
本文档旨在详细介绍如何在OpenStack环境中利用KVM作为Hypervisor来安装并配置Windows虚拟机。该过程涉及到集成virtio驱动,确保Windows虚拟机能够充分利用硬件资源并获得良好的性能。 #### 二、virtio驱动简介 ...
本文主要介绍了一种针对OpenStack云平台的虚拟机放置策略,该策略旨在解决当前云平台虚拟机调度存在的问题,如高能耗、服务器数量过多以及较高的服务等级协议(SLA)违背率等。研究者提出了一种基于自适应双策略差分...
通过request创建虚拟机
Openstack虚拟机镜像制作指南 在你拥有虚拟机镜像(也有人叫"虚拟器件")之前,你的 OpenStack 计算云不太有用,这个指南描述了如何获取,创建以及修改 OpenStack 兼容的虚拟机镜像。
OpenStack虚拟机管理实例
在 OpenStack 中,虚拟机的硬盘大小可以根据需要进行扩展,以满足不同的应用需求。下面将详细介绍如何扩展 OpenStack 虚拟机的硬盘大小。 为什么需要扩展硬盘大小 在 OpenStack 中,虚拟机的硬盘大小是基于镜像...
OpenStack 虚拟机镜像制作指南 官方翻译文档
Openstack虚拟机创建的50个步骤和100个知识点 Openstack虚拟机创建的50个步骤和100个知识点
1. 虚拟机创建:OpenStack 云平台搭建的第一步是创建虚拟机,虚拟机是云计算环境中的基本组件,用于提供计算资源和存储资源。创建虚拟机需要安装操作系统、配置网络、关闭安全性功能等步骤。 2. 安装环境:安装环境...
描述了如何获取,创建以及修改openstack兼容的虚拟机镜像。