虚拟机之openVZ简单基础

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


[[email protected] cache]# setenforce 0
[[email protected] cache]# getenforce
Disabled

准备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 = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

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

yum -y install vzctl vzquota ploop

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


[[email protected] ~]# uname -a
Linux localhost.localdomain 2.6.32-042stab120.19 #1 SMP Mon Feb 20 20:05:53 MSK 2017 x86_64 x86_64 x86_64 GNU/Linux

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

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


[[email protected] ~]# service vz status
OpenVZ is running...
[[email protected] ~]# chkconfig --list vz
vz 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

二、创建虚拟机(容器)

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 101 --ostemplate centos-7-x86_64 --conf basic \
--hostname mytest.container.com

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


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

启动虚拟机

vzctl start 2

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

三、网络配置

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

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

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

宿主机IP地址如下:


[[email protected] ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:bf:6f:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.15.144/24 brd 192.168.15.255 scope global eth0
inet6 fe80::20c:29ff:febf:6f30/64 scope link
valid_lft forever preferred_lft forever
3: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/void
inet6 fe80::1/128 scope link
valid_lft forever preferred_lft forever
You have mail in /var/spool/mail/root

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


[[email protected] ~]# vzctl enter 2                                             ###进入虚拟机;
entered into CT 2
[[email protected] /]# ip addr                                                     ###查看IP地址;
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/void
inet 127.0.0.1/32 scope host venet0
inet 192.168.15.201/32 brd 192.168.15.201 scope global venet0:0
[[email protected] /]# ping www.baidu.com                              ###ping测试;
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125: icmp_seq=1 ttl=127 time=3.02 ms
64 bytes from 61.135.169.125: icmp_seq=2 ttl=127 time=3.39 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% 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 2 --ipdel 192.168.15.201 --save

vzctl set 2 --ipadd 192.168.100.201 --save

开启SNAT策略,如下

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEoriptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.100.201

测试结果如下:


[[email protected] ~]# vzctl exec 2 ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125: icmp_seq=1 ttl=127 time=3.25 ms
^C
[[email protected] ~]# vzctl exec 2 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/void
inet 127.0.0.1/32 scope host venet0
inet 192.168.100.201/32 brd 192.168.100.201 scope global venet0:0

四、关于OpenVZ 数据备份问题

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

标准迁移

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

vzmigrate 192.168.15.144 101

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

零宕机迁移

vzmigrate --online 192.168.15.144 102

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

关于OpenVZ的备份


[[email protected] ~]# ls /vz/
dump lock private root template vztmp
[[email protected] ~]# ls /etc/vz/
conf dists download.conf essential.ca-bundle.crt names oom-groups.conf osrelease.conf vz.conf vzstats.conf
[[email protected] ~]# ls /etc/vz/conf/
0.conf 2.conf ve-light.conf-sample ve-vswap-1g.conf-sample ve-vswap-2g.conf-sample ve-vswap-512m.conf-sample
101.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服务商使用的较多。

时间: 2024-12-23 05:49:37

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

java:Spring框架1(基本配置,简单基础代码实现)

1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下新建配置文件applicationContext.xml,并配置bean节点和property: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springfr

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

1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么. 2)继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类). 3)封装:通常认为封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面.面向对象的本质就是将现实世界描绘成一系列完全自治.封闭的对象.

java 简单基础

一 java的特性 1.面向对象: 与C++相比,JAVA是纯的面向对象的语言 C++为了向下兼容C,保留了很多C 里面的特性,而C,众所周知是面向过程的语言,这就使 C++成为一个"混血儿".而JAVA语法中取消了C++里为兼容C所保留的特性,如取消了头文件.指针算法.结构.单元等 2.平台无关性: 生成中间字节码指令与其他编程语言不同,Java并不生成可执行文件(.exe文件),而是生成一种中间字节码文件(.class文件). 任何操作系统,只要装有Java虚拟机(JVM),就可以

2.1实现简单基础的vector

1.设计API 我们参考下C++ <std> 库中的vector, vector中的api很多,所以我们把里面用的频率很高的函数实现; 1.1 new&delete new:     应该可以初始化一个我们需要的结构体指针并申请一段内存; delete:              不仅能够把new出来的内存完整\安全的销毁,而且可以把元素中可能出现的内存指针中申请的内存销魂; 1.2 常用的api append:     在数组的最末尾添加一个元素; at:             

lnmp平台的简单基础搭建

一.mysql的安装: 1. get mysql-boost-5.7.17.tar.gz (from 老吴) 使用mysql-boost-5.7.17.tar.gz时,查看df -h,物理空间应该大于10G tar zxf mysql-boost-5.7.17.tar.gz##解压mysql,会发现解压完后du -sh是500+M 2. 软件包依赖性: 在cmake过程中需要使用到gcc.gcc-c++编译器.ncurses-devel.cmake yum install -y gcc gcc-

Java虚拟机内存管理原理基础入门

Jdk:Java程序设计语言.Java虚拟机.Java API类库. Jdk是用于支持Java程序开发的最小环境. Jre:Java API类库中的Java SE API子集.Java虚拟机. Jre是支持Java程序运行的标准环境. Program Counter Register:较小的内存空间,可以看作当前线程所执行的字节码的行号指示器.是唯一一个Java虚拟机规范中没有规定OutOfMemoryError的区域. VM Stack:生命周期和线程相同,它描述了Java方法执行的内存模型:

java IO文件操作简单基础入门例子,IO流其实没那么难

IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想.今天整理了一份适合初学者学习的简单例子,让大家可以更深刻的理解IO流的具体操作. 1.文件拷贝 try {             File inputFile = new File(args[0]);             if (!inputFile.exists()) {                 System.out.println("源文件不存在,程序终止");

虚拟机的快速搭建基础

虚拟化概述 Virtualization 资源管理 – x个物理资源 --> y个逻辑资源 – 实现程度:完全.部分.硬件辅助(CPU) 手动新建一台虚拟机: 虚拟机名字:example 网络类型选择:private1 ######################################################### 使用 virt-manager 客户端工具 在真机上操作: 查看KVM节点(服务器)信息 – virsh nodeinfo 列出虚拟机 – virsh list [

VUE框架简单基础

一个构建用户界面的框架 通过指令,来给DOM元素赋值或者其他操作. 简单的指令及其作用: 在HTML标签中显示数据: --> {{}} --> v-text --> v-html 这三条指令都是给HTML具体标签填充内容,可以是文本,也可以是其他标签 ------------------- --> v-if --> v-else 这两条命令配合使用,如果变量为true,则插入if所在的标签,否则就插入else所在的标签. ------------------- -->