OpenVZ
OpenVZ是基于Linux内核的操作系统级虚拟化技术。OpenVZ允许物理服务器运行多个操作系统,该技术常用于虚拟专用服务器(VPS,Virtual Private Server)。
开发者 | 社区项目, 由SWsoft支持 |
---|---|
当前版本 |
|
源代码库 | |
操作系统 | Linux |
平台 | x86、x86-64、IA-64、PowerPC、SPARC |
类型 | 操作系统层虚拟化 |
许可协议 | GNU GPL v.2 |
网站 | openvz.org |
与VMware这种虚拟机和Xen这种硬件辅助虚拟化技术相比,OpenVZ的主机与客户系统都必须是Linux(虽然在不同的虚拟环境里可以用不同的Linux发行版)。但是,OpenVZ声称这样做有性能上的优势。根据OpenVZ网站的说法,使用OpenVZ与使用独立的实体服务器相比,性能只会有1-3%的损失。
OpenVZ的Linux客户系统其实是共享OpenVZ主机Linux系统的内核,也就意味着OpenVZ的Linux客户系统不能升级内核。
OpenVZ是SWsoft, Inc.公司开发的专有软件Virtuozzo(Virtuozzo虚拟机还支持Windows客户系统)的基础。OpenVZ的授权为GPLv2。
OpenVZ由两部分组成,一个经修改过的Linux内核与一套用户工具。
核心
OpenVZ的核心是Linux内核,并进行了修改以加入对OpenVZ虚拟环境的支持。修改后的核心提供了虚拟化,隔离,资源管理和检查点机制。
虚拟化和隔离
每一个虚拟环境都是一个单独的个体,表现得和一个物理服务器所表现的相同。每一个虚拟环境都有其自己的:
- 用户和用户组
- 每一个虚拟环境都有其自己的root用户、用户和用户组。
资源管理
OpenVZ的资源管理包括三个部分:两级磁盘配额,公平的CPU调度器,以及user beancounters。这些资源在虚拟环境的运行过程中可以调整,可以不必重启动。
两级磁盘配额
每一个虚拟环境都有其自己的磁盘配额,以磁盘的block数和inode(大概相当于文档的数目)的数目来计算。在虚拟环境中,可以通过标准的工具来设置UNIX用户和用户组的磁盘配额。
CPU调度器
OpenVZ中的调度器是一个两级的公平分享调度策略的实现。
在第一级,调度器根据每个虚拟环境的cpuunits的值决定哪一个虚拟环境被分配CPU时间片。在第二级,标准的Linux调度器使用标准的Linux进程优先级和相关机制决定该虚拟环境中的哪一个进程获得CPU。
检查点机制和动态迁移
2006年4月中旬的OpenVZ发布了动态迁移和检查点功能。这使得在将一个虚拟环境从一个物理服务器迁移到另一个物理服务器的过程中不需要进行关机。这个过程被称为动态迁移:一个虚拟环境被冻结,然后它的所有状态被存到磁盘中的一个文件中;这个文件被传输到另外一个机器,然后虚拟环境在那里被解冻(恢复)。整个过程的延迟时间只有数秒。由于状态通常被完整地保护,这个暂停看起来就像一个正常的计算延迟。
用户级工具
OpenVZ提供了命令行工具来管理虚拟环境(vzctl)和虚拟环境中的软件(vzpkg)。
vzctl
这是一个简单的用于管理一个虚拟环境的高级命令行工具。
模板与vzpkg
可以用OpenVZ的模板快速部署OpenVZ Linux虚拟机,OpenVZ的模板可在OpenVZ的网站下载。不同Linux发行版所用的模板不同。比如,使用CentOS 7的模板部署采用CentOS 7发行版的OpenVZ虚拟机,使用Debian 8的模板部署采用Debian 8发行版的OpenVZ虚拟机等。
OpenVZ的特色
可扩展性
由于OpenVZ使用了一个单独的核心模型,它就和2.6版的Linux核心有着同样的可扩展性。它支持高达64个CPU和64G内存,一个单独的虚拟环境可以扩放到整个物理服务器,比如说使用所有的CPU和所有的内存。
密度
OpenVZ可以在一台相当好的硬件上运行上百个虚拟环境(主要瓶颈是内存和CPU)。
图标显示了虚拟环境上的Apache HTTP Server响应时间与虚拟环境数目的关系。测量是在一台有768M内存的机器上进行的;每一个虚拟环境都运行一组通常的进程:init、syslogd、crond、sshd和Apache。Apache用来提供静态页面,而这些页面是由http_load所读取,然后测度第一个响应的时间。就如你看到的一样,随着虚拟环境的数量增加,响应时间由于内存存储和交换而变得更长。
在这种场景下,在一个768M内存的硬件上运行高达120个这样的虚拟环境是可能的。并以线性的方式外推,所以可以在1台2G内存的硬件上运行320个这样的虚拟环境。
集中管理
一台OpenVZ物理服务器(也称为硬件节点)的拥有者(root)可以看见所有虚拟环境的进程和文件。这使得大规模的管理成为可能。试想想当你是用 VMware 或 Xen 来做服务器集成的情况:为了给你的10个虚拟服务器进行安全更新,你必须登录到每一台机器并运行更新过程,这跟你为10台物理服务器进行更新是一样的。
在OpenVZ,你可以运行一个简单的shell脚本,就可以一次更新所有(或只是你选择的)虚拟环境。
参见
- Linux-VServer
- FreeBSD jail
- 基于内核的虚拟机(KVM)
- Solaris Containers
- 操作系统层虚拟化
- 虚拟机比较
- Virtuozzo
- EasyVZ,一个OpenVZ图形管理界面
- HyperVM,基于Web的分布式管理软件
外部链接
- OpenVZ official web site*(页面存档备份,存于互联网档案馆)
- OpenVZ download site(页面存档备份,存于互联网档案馆)
- OpenVZ forum(页面存档备份,存于互联网档案馆)
- OpenVZ bug tracking system (Bugzilla)
- OpenVZ GIT source repository(页面存档备份,存于互联网档案馆)
- OpenVZ blog(页面存档备份,存于互联网档案馆)
- Comparison with other virtualization techniques(页面存档备份,存于互联网档案馆)
- An OpenVZ kernel hacker interview
- EasyVZ: An OpenVZ management GUI(页面存档备份,存于互联网档案馆)