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

  1. $ setenforce
  2. $ getenforce

准备yum 源

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

开始安装

  1. $ yum -y install vzkernel

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

  1. # On Hardware Node we generally need
  2. # packet forwarding enabled and proxy arp disabled
  3. net.ipv4.ip_forward =
  4. net.ipv4.conf.default.proxy_arp =
  5. net.ipv4.icmp_echo_ignore_broadcasts=
  6. net.ipv4.conf.default.forwarding=
  7.  
  8. # Enables source route verification
  9. net.ipv4.conf.all.rp_filter =
  10.  
  11. # Enables the magic-sysrq key
  12. kernel.sysrq =
  13.  
  14. # We do not want all our interfaces to send redirects
  15. net.ipv4.conf.default.send_redirects =
  16. net.ipv4.conf.all.send_redirects =

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

  1. $ yum -y install vzctl vzquota ploop

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

  1. $ uname -a
  2. 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级别,可通过如下命令确认:

  1. $ service vz status
  2. OpenVZ is running...
  3. $ chkconfig --list vz
  4. 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 位置?你想给它什么主机名称?你初步想将什么资源赋予它(取自配置文件)?这一切都可以通过以下参数来设置:

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

完整例子如下:

  1. $ vzctl create \
  2. --ostemplate centos--x86_64 \
  3. --conf basic \
  4. --hostname mytest.container.com

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

  1. $ vzctl set --save --onboot yes \
  2. --save --ipadd 192.168.15.201 \
  3. --save --nameserver 192.168.15.2 \
  4. --save --ram 512M \
  5. --save --diskspace 30G:30G

启动虚拟机

  1. $ vzctl start

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

三、网络配置

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

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

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

宿主机IP地址如下:

  1. $ ip add
  2. : lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
  3. link/loopback ::::: brd :::::
  4. inet 127.0.0.1/ scope host lo
  5. inet6 ::/ scope host
  6. valid_lft forever preferred_lft forever
  7. : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
  8. link/ether :0c::bf:6f: brd ff:ff:ff:ff:ff:ff
  9. inet 192.168.15.144/ brd 192.168.15.255 scope global eth0
  10. inet6 fe80::20c:29ff:febf:6f30/ scope link
  11. valid_lft forever preferred_lft forever
  12. : venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
  13. link/void
  14. inet6 fe80::/ scope link
  15. valid_lft forever preferred_lft forever
  16. You have mail in /var/spool/mail/root

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

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

方法2: 私有IP NAT转换

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

  1. $ vzctl set --ipdel 192.168.15.201 --save
  2. $ vzctl set --ipadd 192.168.100.201 --save

开启SNAT策略,如下

  1. $ iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  2. or
  3. $ iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.100.201

测试结果如下:

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

四、关于OpenVZ 数据备份问题

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

标准迁移

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

  1. $ vzmigrate 192.168.15.144

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

零宕机迁移

  1. $ vzmigrate --online 192.168.15.144

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

关于OpenVZ的备份

  1. $ ls /vz/
  2. dump lock private root template vztmp
  3.  
  4. $ ls /etc/vz/
  5. conf dists download.conf essential.ca-bundle.crt names oom-groups.conf osrelease.conf vz.conf vzstats.conf
  6.  
  7. $ ls /etc/vz/conf/
  8. .conf .conf ve-light.conf-sample ve-vswap-1g.conf-sample ve-vswap-2g.conf-sample ve-vswap-512m.conf-sample
  9. .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. Block的copy时机

    什么时候栈上的Block会复制到堆上呢? 1.调用Block的copy实例方法 2.Block作为函数返回值返回时 3.将Block赋值给附有__strong修饰符id类型的类或Block类型成员变量 ...

  2. Liunx常用命令(Mile)

    记录一些平时经常用到的liunx命令,解决用过一段时间不用又忘记的问题.慢慢添加,持续更新~~~ 1.文件操作 a.zip.war包解压 war包 用的zip的方式压缩 ,也可以用的zip的 解压命令 ...

  3. Lua 错误 收集

    不存在的变量或者变量没有定义,提示错误 // :: [error] #: * lua entry thread aborted: runtime error: /opt/openresty/nginx ...

  4. Postman简明教程

    一.Postman简介 Postman是一款接口测试工具,常用于日常工作的接口类功能测试和简单的自动化测试. 二.Postman功能介绍 1.常见get请求的接口测试 我们现在有这样一个获取学生信息的 ...

  5. querySelectorAll 方法和 getElementsBy 系列方法的区别

    本文是我在知乎上的一个回答:http://www.zhihu.com/question/24702250/answer/28695133 ————— 下面是正文 ————— 1. W3C 标准quer ...

  6. [整理]C语言中的static静态对象

    1.说明外部对象(静态外部变量和静态函数)    (1)static 用于说明外部变量或函数,使该对象的作用域限定为被编译原文件的剩余部分,即从对象说明开始到所在源文件的结束部分:    (2)被st ...

  7. Web 前端开发规范文档

    通用规范: TAB键用两个空格代替(WINDOWS下TAB键占四个空格,LINUX下TAB键占八个空格). CSS样式属性或者JAVASCRIPT代码后加“;”方便压缩工具“断句”. 文件内容编码均统 ...

  8. 解决java计算中double类型结果不一致问题,使用BigDecimal解决

    一.需求:从数据表中读出一个double的数据,比如是3.5,没问题,但是如果再用3.5进行计算,比如乘以100,结果就是350了,而是35000000004 因为是浮点运算,所有语言中的浮点数都会有 ...

  9. WPF中ListBox的绑定

    WPF中列表式控件派生自ItemsControl类,继承了ItemsSource属性.ItemsSource属性可以接收一个IEnumerable接口派生类的实例作为自己的值(所有可被迭代遍历的集合都 ...

  10. restful API 规范(转)

    1. URI URI 表示资源,资源一般对应服务器端领域模型中的实体类. URI规范 不用大写: 用中杠-不用下杠_: 参数列表要encode: URI中的名词表示资源集合,使用复数形式. 资源集合 ...