OpenVZ的是免费的开源软件,基于GNU GPL协议。

OpenVZ的是基于Linux的容器虚拟化。 OpenVZ在一台服务器上能够创建创建多个安全隔离的Linux容器(也称为虚拟环境或的VPS),实现更好的服务器资源利用率并确保应用程序不冲突。每个容器运行都类似于单台独立的服务器;一个容器可以独立重启并拥有root权限,用户,IP地址,内存,进程,文件,应用程序,系统库以及配置文件。

OpenVZ 修改 Linux 内核将高级的容器化功能加入其中,藉此容许隔离了的进程组别在一个 init 的旗下执行,附带的还有二十多个控制容器资源应用方法的动态资源管理参数。OpenVZ 计划维护着三个稳定的内核分支:

  1. 本于 RHEL4/CentOS4 的 2.6.9
  2. 本于 RHEL5/CentOS 5 的 2.6.18
  3. 本于原装的 2.6.18

此外还有数个不稳定的分支本于较新版的 Linux 内核,它们也许会渐渐达至稳定的状态。所以,Centos 7是无法支持的。

OpenVZ 提供数项高级的功能,包括「检查点」及将容器由一台主机「迁移」到另一台。迁移共有两种方式:

  1. 即时迁移减少停机的时间(只须数秒),并且保持机器的运行时间及网络连接。
  2. 脱机迁移就是将机器停止,迁移它,然后重新打开它。

OpenVZ 的迁移功能「并不」须要一个共享的存储方案,而是利用 rsync 将容器的目录整全地由一台实体主机复制到另一台。

相关链接:

https://download.openvz.org/doc/OpenVZ-Users-Guide.pdf

https://wiki.openvz.org/Quick_installation

一、安装OpenVZ

关闭selinux

$ setenforce
$ getenforce

准备yum 源

$ wget -P /etc/yum.repos.d/ http://ftp.openvz.org/openvz.repo
$ rpm --import http://ftp.openvz.org/RPM-GPG-Key-OpenVZ

开始安装

$ yum -y install vzkernel

编辑/etc/sysctl.conf文件,内容如下

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward =
net.ipv4.conf.default.proxy_arp =
net.ipv4.icmp_echo_ignore_broadcasts=
net.ipv4.conf.default.forwarding= # Enables source route verification
net.ipv4.conf.all.rp_filter = # Enables the magic-sysrq key
kernel.sysrq = # We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects =
net.ipv4.conf.all.send_redirects =

还需要安装一些额外的软件包:vzctl,用于管理虚拟机;vzquota,用于控制硬盘容量分配;ploop,用于 OpenVZ 的文件系统管理。执行以下命令:

$ yum -y install vzctl vzquota ploop

重启机器。系统会自动加载 OpenVZ 内核(默认选择),启动完成后,检查是否正确安装内核:

$ uname -a
Linux localhost.localdomain 2.6.-042stab120. # SMP Mon Feb :: MSK x86_64 x86_64 x86_64 GNU/Linux

其中字符串“042stab120.19”代表着 OpenVZ 版本号,理应是 OpenVZ 官网上的最新版。

OpenVZ也是存在服务的,默认安装之后会自动启动并且启动级别也是2/3/4/5级别,可通过如下命令确认:

$ service vz status
OpenVZ is running...
$ chkconfig --list vz
vz :关闭 :关闭 :启用 :启用 :启用 :启用 :关闭

二、创建虚拟机(容器)

vzctl 这个指命是用来创建及设置 OpenVZ 容器。在你创建一个容器之前,你须要拥有你想安装的 Linux 发行版本的安装媒体。OpenVZ 不能应用 CD/DVD 安装媒体(又或者 .iso 光盘映像档)。OpenVZ 需要它称为操作系统范本旳东西来为某个 Linux 发行版本创建一个容器。你可以从 OpenVZ 的网页下载一些预制的操作系统范本。这是推荐给新 OpenVZ 用户的途径。当你对 OpenVZ 更为熟识,你或许会想按照 OpenVZ wiki 上的众多方法从头创建你个人的操作系统范本。你可以这些地方找由 OpenVZ 划计提供的预制操作系统范本:https://openvz.org/Download/template/precreated

你亦可以在这里找到由社区所贡献的操作系统范本:https://download.openvz.org/contrib/template/precreated/

请下载所需的操作系统范本并将它放在你的 CentOS 6 主机内的 /vz/template/cache 目录。

要创建一个容器,请采用 vzctl这个指令,连同create选项及数个参数。你须要选择一个独特的容器标识码(CTID)。你也须要一些额外的数据:你想从哪个操作系统范本进行安装?它会拥有哪个 IP 位置?你想给它什么主机名称?你初步想将什么资源赋予它(取自配置文件)?这一切都可以通过以下参数来设置:

vzctl create CTID \
--ostemplate {范本名称} \
--conf {配置文件名称} \
--ipadd {nn.nn.nn.nn} \
--hostname {完整域名}  

完整例子如下:

$ vzctl create  \
--ostemplate centos--x86_64 \
--conf basic \
--hostname mytest.container.com

设置虚拟机开机自动、IP、设置DNS、内存、磁盘空间大小等,命令如下:

$ vzctl set  --save --onboot yes \
--save --ipadd 192.168.15.201 \
--save --nameserver 192.168.15.2 \
--save --ram 512M \
--save --diskspace 30G:30G

启动虚拟机

$ vzctl start 

如果想停止一个虚拟机,可以用stop。想进入一个虚拟机可以直接用enter,具体的命令使用建议查看帮助文档;

三、网络配置

回到上面的问题,虽然我们添加了IP,但是并不能与外界通信。接下来就解决虚拟机网络的问题,按照直接添加IP的方法,虚拟机访问外网有2种方式实现,一种是开启宿主机的包转发功能,设置与宿主机同一网段的IP地址(宿主机网段必须能够访问外网)

;第二种,使用路由转发功能,通过iptables实现NAT转换。

方式1: 与宿主机同一IP网段配置

宿主机IP地址如下:

$ ip add
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :0c::bf:6f: brd ff:ff:ff:ff:ff:ff
inet 192.168.15.144/ brd 192.168.15.255 scope global eth0
inet6 fe80::20c:29ff:febf:6f30/ scope link
valid_lft forever preferred_lft forever
: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/void
inet6 fe80::/ scope link
valid_lft forever preferred_lft forever
You have mail in /var/spool/mail/root

由于我刚刚配置的IP就是与宿主机同一网段,所以能够直接访问外网,测试效果如下:

$ vzctl enter                                              ###进入虚拟机;
entered into CT
$ ip addr ###查看IP地址;
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/void
inet 127.0.0.1/ scope host venet0
inet 192.168.15.201/ brd 192.168.15.201 scope global venet0:
$ ping www.baidu.com ###ping测试;
PING www.a.shifen.com (61.135.169.125) () bytes of data.
bytes from 61.135.169.125: icmp_seq= ttl= time=3.02 ms
bytes from 61.135.169.125: icmp_seq= ttl= time=3.39 ms
^C
--- www.a.shifen.com ping statistics ---
packets transmitted, received, % packet loss, time 1001ms
rtt min/avg/max/mdev = 3.022/3.209/3.396/0.187 ms

方法2: 私有IP NAT转换

删除原有同宿主机IP,添加新的IP地址,如下:

$ vzctl set  --ipdel 192.168.15.201 --save
$ vzctl set --ipadd 192.168.100.201 --save

开启SNAT策略,如下

$ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
or
$ iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.100.201

测试结果如下:

$ vzctl exec  ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) () bytes of data.
bytes from 61.135.169.125: icmp_seq= ttl= time=3.25 ms
^C
$ vzctl exec ip addr
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
link/void
inet 127.0.0.1/ scope host venet0
inet 192.168.100.201/ brd 192.168.100.201 scope global venet0:

四、关于OpenVZ 数据备份问题

关于OpenVZ的迁移以及备份,整体来说是相当简单和方便的。迁移分为两种,一种是标准迁移,另一种零宕机迁移。下面我来看他们是如何实现的。

标准迁移

迁移之前,必须让2台主机或多台主机之间实现免秘钥认证。关于Linux 主机之间如何实现SSH免秘钥认证,我这里就不做详细说明了。下面我们直接来演示迁移过程:

$ vzmigrate 192.168.15.144 

就上面一条命令就完成了OpenVZ的迁移;

零宕机迁移

$ vzmigrate --online 192.168.15.144 

提示:这里需要注意一点,要保证迁移的主机时间同步。这样做是因为在容器运行的某些程序可能依赖系统时间,如果在迁移的过程中发现时间相差有误,会造成时间方面的冲突。

关于OpenVZ的备份

$ ls /vz/
dump lock private root template vztmp $ ls /etc/vz/
conf dists download.conf essential.ca-bundle.crt names oom-groups.conf osrelease.conf vz.conf vzstats.conf $ ls /etc/vz/conf/
.conf .conf ve-light.conf-sample ve-vswap-1g.conf-sample ve-vswap-2g.conf-sample ve-vswap-512m.conf-sample
.conf.destroyed ve-basic.conf-sample ve-vswap-1024m.conf-sample ve-vswap-256m.conf-sample ve-vswap-4g.conf-sample

根据我在迁移过程发现,在做迁移的操作时,OpenVZ会复制文件到迁移的目标主机中去。被迁移的文件有/etc/vz/conf/CID.conf,/vz/private,/vz/root主要是这几个文件。在做备份的操作时,可以完全只备份这几个文件即可。

最后,我想发表一下个人意见,不喜勿喷。OpenVZ可以看做是早些年的docker容器(在使用中部分命令和docker的命令极其相似)。但是他又不具备docker的特性,一次编译多地运行。所以,从目前的情况来看,OpenVZ处在一个极其尴尬的地位,被企业大量使用应该是不可能的,因为基础设施层有KVM/Xen/VMware等,PAAS层又有docker等容器霸占。目前OpenVZ的用处,大概也就只有VPS服务商使用的较多。

虚拟机之openVZ简单基础的更多相关文章

  1. 2.1实现简单基础的vector

    2.1实现简单基础的vector 1.设计API 我们参考下C++ <std> 库中的vector, vector中的api很多,所以我们把里面用的频率很高的函数实现; 1.1 new&a ...

  2. java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))

    1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...

  3. hadoop搭建一:虚拟机网络配置和基础(未完成)

    基于VMware 15+CentOS 7+Hadoop 2.6,hadoop的搭建主要用于个人学习,水平有限. hadoop搭建一:虚拟机网络配置和基础 hadoop搭建二:hadoop全分布搭建 h ...

  4. Linux的安装(虚拟机环境)与基础配置

    一.背景 本文介绍如何安装虚拟机VMware以及如果在虚拟机上安装Linux系统以及Linux安装完毕之后的基础配置 需要准备的东西有VMware以及Linux镜像文件 二.下载安装VMware 下载 ...

  5. java学习之路--简单基础的面试题

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...

  6. 安装虚拟机以及学习Linux基础入门

    安装虚拟机 参考基于VirtualBox虚拟机安装Ubuntu图文教程完成了虚拟机的安装,主要遇到了以下2个问题 在新建虚拟电脑的时候,如果类型选择了Linux,则版本就只能选择Ubuntu(32 位 ...

  7. java虚拟机入门(一)-jvm基础

    转行学java之前,总是听着大佬们说着java像个渣男一样可以跨平台,一次编译到处运行,瞬间,我就坚定了学java的信念,哎呀妈呀,得劲.真的学java之后,好像渣男也不是那么好学的,尤其这货的必杀技 ...

  8. 你所要掌握的最简单基础的React渲染优化

    一.React的渲染机制 要掌握一两项React-render优化的方法不难,但是非常重要.无论是在实际项目中的一个小细节,还是迎合'面试官'的口味 1.1 触发Render 我们知道React要更新 ...

  9. java 学习第一篇简单基础

    Java基础 Java Java 和C#有着极为相似的语法. 和C#都是面向对象的高级程序语言. JAVA是一个开源,公开的语言,有着极其丰富的开源库和其他资源. JAVA分类 JAVA分SE EE ...

随机推荐

  1. [非常重要的总结] Linux C相关函数

    (1)字符测试函数 isalnum(测试字符是否为英文字母或数字) isalpha(测试字符是否为英文字母) isascii(测试字符是否为ASCII码字符) isblank(测试字符是否为空格字符) ...

  2. JavaScript中数组迭代方法

    文章来源 : https://www.cnblogs.com/shuiyi/p/5058524.html

  3. 二分算法的应用——最大化最小值 POJ2456 Aggressive cows

    Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Description Far ...

  4. jquery如何获取input(file)控件上传的图片名称,即"11111.jpg"

    html代码:<input name=file" type="file" id="file"/> Jquery代码:var file;$( ...

  5. springcloud入门系列(二):注册中心Eureka

    搭建注册中心Eureka 1.pom中依赖 <dependencies> <dependency> <groupId>org.springframework.clo ...

  6. jquery php ajax多图片上传.上传进度,生成缩略图

    本例用到其他2个php class.upload.php和 functions.php还有css和js以及img文件 下载地址为www.freejs.net/demo/91/down.zip 演示 J ...

  7. CodeForces 816C 思维

    On the way to school, Karen became fixated on the puzzle game on her phone! The game is played as fo ...

  8. HDU 1251 统计难题 (裸的字典树)

    题目链接 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本 ...

  9. 上海支付宝终面后等了两周,没能收到offer却来了杭州淘宝的电话面试

    上上周一(14/12/22)上海支付宝hr终面 http://www.cnblogs.com/zhanghaoh/p/4178386.html 苦苦等了两周,没能如愿收到offer,却在今天等来了 杭 ...

  10. windows 下安装mysqlclient 包

    正常情况下是可以直接用 pip install mysqlclient 进行安装的.如果你的机器上安装的既有python3 又有python2.7 的话,建议使用python -m pip insta ...