- 浏览: 261381 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (298)
- 工作感悟 (6)
- java基础 (23)
- 计算机硬件知识 (1)
- 计算机网络知识 (2)
- Struts (3)
- Srping (4)
- hibernate (0)
- ibatis (0)
- webservice (4)
- Thread (22)
- maven (5)
- ubuntu/linux/centos/redhat (46)
- SSO (1)
- ESB (0)
- 工作流 (0)
- oracle (15)
- 云计算 (1)
- hadoop (1)
- nosql (0)
- mysql (3)
- sqlserver (0)
- jquery (0)
- 分布式 (3)
- 集群 (0)
- 设计模式 (2)
- EJB (0)
- map (0)
- cache (5)
- Niginx+varnish+squid+Ats (14)
- Apache (0)
- 工作/职业规划 (0)
- Scala & Groovy (1)
- English (4)
- 数据结构/算法 (6)
- 开发工具 (5)
- 测试 (2)
- Exception (0)
- 定时器 (3)
- j2ee (2)
- 部署 (1)
- Openssl (1)
- 操作系统 (3)
- kvm (13)
- libvirt (5)
- PostgreSql (5)
- 虚拟化 (3)
- 概念理解 (1)
- virt-manager (1)
- RESTful (3)
- 其它 (4)
- ssh2 (14)
- windows (1)
- 房产 (2)
- svn (1)
- 手机 (1)
- ant (1)
- flume (2)
- sqoop (1)
- fastdfs (5)
- log4j (1)
- SPDY (1)
- mongodb (2)
- MQ (2)
- Mina (1)
- dubbo (4)
- PMP (1)
- Webshpere (2)
- jvm (1)
- Btrace (1)
- zookeeper (7)
- UML (1)
- spring cloud (6)
- spring boot (5)
- storm (0)
- 软件管理 (1)
- elasticsearch (1)
- 协议 (2)
- docker (1)
- 性能 (2)
- 安全 (1)
- 代码规范 (1)
- mqtt (1)
- lombok (1)
- 车联网 (1)
- kafka (1)
最新评论
为什么要迁移呢?当一台主机的负载过高时,我们希望把虚拟机迁移到一台系统更好的主机上。当主机发生硬件故障需要停机维护时,我们需要迁移虚拟机,如果主机就只跑了一台虚拟机我们可以把它迁移到其他主机,提高资源的利用率,等等。
迁移命令:
# virsh migrate --live GuestName DestinationURI (--live :迁移过程中虚拟机一直保持运行状态)
GuestName指虚拟机名称,DestinationURI:目的主机的URI。
举例:# virsh migrate --live vm0 qemu+tcp://192.168.0.200/system
迁移的要求是:需要目的主机和源主机有相同的环境,包括hypervisor。
注意点:
笔者在做迁移的时候,所有前置条件都一配置好,执行迁移命令:
sudo virsh migrate --live vm0 qemu+tcp://192.168.1.200/system
却出现的如下错误:
error: Unable to resolve address 'ubuntu1204' service '49152': No address associated with hostname
笔者的系统环境是Ubuntu,错误中‘ubuntu1204’是192.168.1.200的主机名,对此错误很是不解,说是‘ubuntu1204’无法解析,查得资料:http://wiki.libvirt.org/page/Migration_fails_with_%22Unable_to_resolve_address%22_error
在迁移的过程中,运行在目的主机中的libvirtd进程要根据address和port创建一个URI,URI是目的主机用来接收数据和发回数据到源主机的libvirtd进程的。上面的错误的原因是libvirtd没法解析主机名到IP地址。可以看下图:
目的主机libvirtd在发回数据的时候,把hostname发回去了,而源主机就用直接请求hostname而非IP,恰巧在源主机没有做DNS配置,因此才出现次错误。
如果是在REHEL系列的Linux中出现的错误如所示:Migration fails with "Unable to resolve address" error
解决方案一:
配置source源主机的 /etc/hosts文件:加入"192.168.1.200 ubnuntu1204" 参考:http://bbs.openzj.com/thread-7200-1-1.html
解决方案二:
# virsh migrate vm0 qemu+tcp://192.168.1.200/system tcp://192.168.1.200
这时目的主机libvirtd进程将使用“tcp://192.168.1.200“作为迁移连接,libvirt会自动生成的端口追加到此URI后面,(这里相当于开启另外一个连接来迁移数据,可以和方案三对比之)当然也可以手动指定端口号如:
# virsh migrate vm0 qemu+tcp://192.168.1.200/system tcp://192.168.1.200 12345
解决方案三:使用隧道(tunnelled) 迁移,该方式不会为迁移创建单独的连接,而是通过与目的libvirtd通信的这个连接来传输数据。(例如连接:qemu+tcp://192.168.1.200/system)
# virsh migrate vm0 qemu+tcp://192.168.1.200/system --p2p --tunnelled
问题解决了,顺便学习下libvirt migrate的概念:
说到虚拟机的迁移,其实就是数据的转移,数据的转移就涉及数据的传输,数据的传输需要通过网络。libvirt提供了两种方案。
hypervisor native transport:
“本地”数据传输,相当于一种手动方式做的迁移。数据是否可以加密取决于hypervisor自身是否已实现。
Migration native path
libvirt tunnelled transport
隧道化的(tunnelled)数据传输支持很强的加密功能,这要归结于libvirt的RPC协议。不好的一方面是数据会在hypervisor和libvirtd之间的传输。
Migration tunnel path
迁移时的通信控制:(此景会有一个第三方的管理程序来管理,上面所说单纯是从两个主机直接的角度来说的)
虚拟机的迁移需要两个主机之间的密切协调,同时应用程序(虚拟机管理平台)也将参与进来,此应用可以是在源主机、目的主机、甚至是第三台主机。
受管理的直接迁移(Managed direct migration):
直接管理迁移,libvirt客户端进程控制迁移的不同阶段。客户端应用程序必须连接以及获得在源主机和目的主机的libvirtd进程的认证。无需两个libvirtd进程间相互通信。如果客户端应用崩溃了,或者在迁移过程中失去了链接,一种办法就是强制终止迁移,重启源主机的guest CPU。
Migration direct, managed
受管理的点对点迁移:(Managed peer to peer migrate)
对于点对点,libvirt客户端程序只是与在源主机的libvirtd进程通信,源主机libvirtd进程自己控制整个迁移的过程,直接连接到目的主机的libvirtd。如果客户端应用崩溃了或者与libvirtd失去连接,迁移过程无需中断直至迁移完成。需要注意的是源主机认证(通常是root)链接到目的主机,而不是通过客户端应用链接到源主机。
Migration peer-to-peer
不受管理的直接迁移:(Unmanaged direct migrate)
此迁移方式既不受libvirt客户端控制,也不受libvirtd控制,迁移的控制过程委托给基于hypervisor之上的管理服务来处理。libvirt 客户只需要通过hypervisor的管理层做一下初始化。不管是libvirt 客户端还是libvirtd崩溃了,迁移还是会照样进行直至完成。
Migration direct, unmanaged
迁移URI:
虚拟机迁移时,客户端应用程序需要准备的URI可达三个,具体取决于控制流如何选择或者API如何调用。第一个URI就是应用程序到运行着虚拟机的源主机的连接,第二个URI就是目的主机到应用程序之间的连接(在点对点的迁移中,这个连接是来自源主机,而不是客户端应用程序)。第三个URI就是hypervisor指定的用来控制以何种方式迁移的连接。在任何一种受管理的迁移中,前两个URI是必不可少的,第三个是可选的。而在不受管理的直接迁移中,第一个和第三个是必须的,第二个并不会使用。
通常管理应用程序只需关心前两个URI。二者都是普通的libvirt 连接URI格式。libvirt会通过查找目的主机的配置文件中的hostname自动确定hypervisor指定的URI(第三个URI)。
应用程序获取第三个URI时可能会出现的如下几种情况:
1、hostname的配置不正确,或者DNS不正确,如果主机的hostname不能正确的解析到IP地址的化就会生成一个错误的URI,这刚好时文章开头出现的问题。此时需要明确指定IP地址或者使用正确的hostname。
2、主机有多个网络接口,此时需要用IP明确指定来关联某个具体的网卡。
3、防火墙限制端口的使用,当libvirt自动生扯功能的端口需要防火墙对其端口是开放的。
迁移命令:
# virsh migrate --live GuestName DestinationURI (--live :迁移过程中虚拟机一直保持运行状态)
GuestName指虚拟机名称,DestinationURI:目的主机的URI。
举例:# virsh migrate --live vm0 qemu+tcp://192.168.0.200/system
迁移的要求是:需要目的主机和源主机有相同的环境,包括hypervisor。
注意点:
笔者在做迁移的时候,所有前置条件都一配置好,执行迁移命令:
sudo virsh migrate --live vm0 qemu+tcp://192.168.1.200/system
却出现的如下错误:
error: Unable to resolve address 'ubuntu1204' service '49152': No address associated with hostname
笔者的系统环境是Ubuntu,错误中‘ubuntu1204’是192.168.1.200的主机名,对此错误很是不解,说是‘ubuntu1204’无法解析,查得资料:http://wiki.libvirt.org/page/Migration_fails_with_%22Unable_to_resolve_address%22_error
在迁移的过程中,运行在目的主机中的libvirtd进程要根据address和port创建一个URI,URI是目的主机用来接收数据和发回数据到源主机的libvirtd进程的。上面的错误的原因是libvirtd没法解析主机名到IP地址。可以看下图:
目的主机libvirtd在发回数据的时候,把hostname发回去了,而源主机就用直接请求hostname而非IP,恰巧在源主机没有做DNS配置,因此才出现次错误。
如果是在REHEL系列的Linux中出现的错误如所示:Migration fails with "Unable to resolve address" error
解决方案一:
配置source源主机的 /etc/hosts文件:加入"192.168.1.200 ubnuntu1204" 参考:http://bbs.openzj.com/thread-7200-1-1.html
解决方案二:
# virsh migrate vm0 qemu+tcp://192.168.1.200/system tcp://192.168.1.200
这时目的主机libvirtd进程将使用“tcp://192.168.1.200“作为迁移连接,libvirt会自动生成的端口追加到此URI后面,(这里相当于开启另外一个连接来迁移数据,可以和方案三对比之)当然也可以手动指定端口号如:
# virsh migrate vm0 qemu+tcp://192.168.1.200/system tcp://192.168.1.200 12345
解决方案三:使用隧道(tunnelled) 迁移,该方式不会为迁移创建单独的连接,而是通过与目的libvirtd通信的这个连接来传输数据。(例如连接:qemu+tcp://192.168.1.200/system)
# virsh migrate vm0 qemu+tcp://192.168.1.200/system --p2p --tunnelled
问题解决了,顺便学习下libvirt migrate的概念:
说到虚拟机的迁移,其实就是数据的转移,数据的转移就涉及数据的传输,数据的传输需要通过网络。libvirt提供了两种方案。
hypervisor native transport:
“本地”数据传输,相当于一种手动方式做的迁移。数据是否可以加密取决于hypervisor自身是否已实现。
Migration native path
libvirt tunnelled transport
隧道化的(tunnelled)数据传输支持很强的加密功能,这要归结于libvirt的RPC协议。不好的一方面是数据会在hypervisor和libvirtd之间的传输。
Migration tunnel path
迁移时的通信控制:(此景会有一个第三方的管理程序来管理,上面所说单纯是从两个主机直接的角度来说的)
虚拟机的迁移需要两个主机之间的密切协调,同时应用程序(虚拟机管理平台)也将参与进来,此应用可以是在源主机、目的主机、甚至是第三台主机。
受管理的直接迁移(Managed direct migration):
直接管理迁移,libvirt客户端进程控制迁移的不同阶段。客户端应用程序必须连接以及获得在源主机和目的主机的libvirtd进程的认证。无需两个libvirtd进程间相互通信。如果客户端应用崩溃了,或者在迁移过程中失去了链接,一种办法就是强制终止迁移,重启源主机的guest CPU。
Migration direct, managed
受管理的点对点迁移:(Managed peer to peer migrate)
对于点对点,libvirt客户端程序只是与在源主机的libvirtd进程通信,源主机libvirtd进程自己控制整个迁移的过程,直接连接到目的主机的libvirtd。如果客户端应用崩溃了或者与libvirtd失去连接,迁移过程无需中断直至迁移完成。需要注意的是源主机认证(通常是root)链接到目的主机,而不是通过客户端应用链接到源主机。
Migration peer-to-peer
不受管理的直接迁移:(Unmanaged direct migrate)
此迁移方式既不受libvirt客户端控制,也不受libvirtd控制,迁移的控制过程委托给基于hypervisor之上的管理服务来处理。libvirt 客户只需要通过hypervisor的管理层做一下初始化。不管是libvirt 客户端还是libvirtd崩溃了,迁移还是会照样进行直至完成。
Migration direct, unmanaged
迁移URI:
虚拟机迁移时,客户端应用程序需要准备的URI可达三个,具体取决于控制流如何选择或者API如何调用。第一个URI就是应用程序到运行着虚拟机的源主机的连接,第二个URI就是目的主机到应用程序之间的连接(在点对点的迁移中,这个连接是来自源主机,而不是客户端应用程序)。第三个URI就是hypervisor指定的用来控制以何种方式迁移的连接。在任何一种受管理的迁移中,前两个URI是必不可少的,第三个是可选的。而在不受管理的直接迁移中,第一个和第三个是必须的,第二个并不会使用。
通常管理应用程序只需关心前两个URI。二者都是普通的libvirt 连接URI格式。libvirt会通过查找目的主机的配置文件中的hostname自动确定hypervisor指定的URI(第三个URI)。
应用程序获取第三个URI时可能会出现的如下几种情况:
1、hostname的配置不正确,或者DNS不正确,如果主机的hostname不能正确的解析到IP地址的化就会生成一个错误的URI,这刚好时文章开头出现的问题。此时需要明确指定IP地址或者使用正确的hostname。
2、主机有多个网络接口,此时需要用IP明确指定来关联某个具体的网卡。
3、防火墙限制端口的使用,当libvirt自动生扯功能的端口需要防火墙对其端口是开放的。
相关推荐
【基于KVM虚拟化技术的研究与实验评估】 随着云计算的快速发展,虚拟化技术成为了其中不可或缺的关键组成部分。KVM(Kernel-based Virtual Machine),一种基于Linux内核的全虚拟化解决方案,因其高效性能和开源...
KVM是一种基于Linux内核的全虚拟化解决方案,它允许Linux内核直接支持虚拟化功能,无需额外的软件层。KVM的性能非常高,因为它直接利用了现代CPU的虚拟化扩展特性(如Intel VT-x或AMD-V)。 ##### 2.2 KVM的技术...
这些API涵盖了多种虚拟化技术,如KVM、Xen、QEMU等,使得开发者无需关注底层虚拟化技术的细节,就能实现对虚拟机的创建、启动、停止、迁移等操作。 2. **libvirt 库** Libvirt库是其核心组件,包含了所有与虚拟化...
在大二下学期的KVM虚拟化实践与编程实验中,学生将深入理解并操作虚拟化技术,特别是基于Kernel-based Virtual Machine (KVM) 和 QEMU 的环境。这个实验涵盖了虚拟化环境的搭建、虚拟机的启动与管理、虚拟化应用的...
《深入解析libvirt0.9.4:虚拟化管理的核心技术》 在IT领域,虚拟化技术已经成为现代数据中心和云计算的基础。libvirt作为一款强大的开源虚拟化管理工具,为多种虚拟化平台提供了统一的API接口,让开发者可以方便地...
例如,开发者可以利用libvirt-java轻松地实现批量创建和迁移虚拟机,或者开发自定义的虚拟化管理界面。 值得注意的是,libvirt-java的使用需要配合libvirt守护进程运行,并且可能需要依赖特定版本的libvirt库。在...
《深入理解libvirt:KVM虚拟化关键技术剖析》 libvirt是开源社区开发的一个强大而灵活的工具,它为管理虚拟化技术提供了一个统一的API接口。libvirt支持多种虚拟化平台,包括KVM(Kernel-based Virtual Machine)、...
7. **虚拟化管理实践**: 为了提供更具体的实践知识,书中可能包含了如何使用Libvirt进行真实世界虚拟化任务的案例分析,例如服务器迁移、灾难恢复、测试环境搭建等。 8. **跨平台支持**: Libvirt作为跨平台的虚拟化...
Libvirt 是一个开源项目,提供了一组 API、工具和库,用于管理和控制虚拟化平台。在 OpenStack 环境中,Libvirt 是一个至关重要的组件,它为各种虚拟化技术(如 KVM、Xen、QEMU 和 LXC)提供了统一的接口,使得 ...
另一方面,邮政系统建立了基于Asianux3.0SP2和KVM的虚拟化测试平台,用于各种操作平台的应用开发和测试,同时确保了旧应用的兼容性。 #### 进行中的虚拟化工作与下步方向 当前,虚拟化技术的发展仍在不断推进,...
Linux桥接是早期虚拟化环境中常见的网络管理方式,尤其在XenServer 5.6之前,但现在仍被KVM和libvirt等虚拟化平台所支持。Linux桥接通过'brctl'模块管理,提供基本的二层交换功能。 总之,网络虚拟化通过将网络功能...
2. **libvirt**:这是一个API库,用于管理虚拟化基础设施,包括KVM、Xen和其他虚拟化技术。它提供了多种语言的绑定,使得管理员可以通过编程方式管理虚拟机。 3. **网络配置**:KVM支持多种网络模型,如桥接模式、...
学习KVM虚拟化技术,不仅需要理解虚拟化的基本概念,还要掌握Linux操作系统、网络和存储等相关知识,同时熟悉QEMU、libvirt等工具的使用。通过实战演练,可以深入理解KVM的工作原理,提升运维和管理虚拟化环境的能力...
kvm是一种开源的虚拟化解决方案,可以在物理服务器上运行多个虚拟机,而libvirt是kvm的管理工具,提供了虚拟机的生命周期管理、虚拟机监控和虚拟机迁移等功能。 在安装kvm和libvirt之前,需要安装一些必要的依赖包...
标题《基于云计算的多平台虚拟化集成管理系统》指出,本文讨论的是一套集成管理系统,它将云计算与多平台虚拟化技术相结合,形成一个高效的计算环境。云计算是一种通过互联网提供动态可伸缩的虚拟化资源的服务模式。...
### 轻量虚拟化技术——Docker实战分享 #### 一、轻量虚拟化技术概述 ##### 什么是轻量虚拟化技术? 轻量虚拟化技术是指一种在操作系统级别实现虚拟化的技术,它允许在单一操作系统实例上运行多个隔离的应用程序...
Virt-manager虚拟化技术介绍 Virt-manager是虚拟机管理器(Virtual Machine Manger)的缩写,也是该管理工具的软件包名称。它是一个用于管理虚拟机的图形化桌面用户接口,目前仅支持在Linux或其他类Unix系统中运行...
预测性迁移基于资源预测模型,提前迁移可能面临资源瓶颈的虚拟机;负载均衡迁移则根据整个集群的资源使用情况,调整虚拟机分布,确保整体资源利用率;故障预测迁移则结合监控数据,预测可能的硬件故障,提前迁移...
`libvirt_vmcfg`是一个针对Python的库,主要用于处理与虚拟化管理相关的配置任务。它允许开发者通过Python接口与libvirt库进行交互,从而实现对虚拟机的配置和管理。`libvirt`本身是一个开源的API,支持多种虚拟化...