转自 http://qdmz.sinaapp.com/blog.php?id=12
安装 OpenVZ
首先加入 openvz 源、升级系统、安装 openvz 内核和 vzctl, vzquota 等工具:
# cd /etc/yum.repos.d
# wget http://download.openvz.org/openvz.repo
# rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ
# yum update
# yum install ovzkernel
# yum install vzctl vzquota
调整内核参数
为了能让 VE/VPS 访问外部网络,我们必须启动 ip forwarding;如果内核出错或者运行很慢,我们希望能用特殊按键 dump 一些信息到控制台并结合 log 排错,所以建议打开 kernel.sysrq:
# vi /etc/sysctl.conf
...
net.ipv4.ip_forward = 1
kernel.sysrq = 1
...
为了减少麻烦最好关闭 selinux,selinux 带来的麻烦往往比得到的好处多:
# vi /etc/sysconfig/selinux
...
SELINUX=disabled
...
检查 vz 服务是否自动启动,并重启机器进入 openvz 内核:
# chkconfig --list vz
vz 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# reboot
创建和安装 guest
Perl 语言之父 Larry Wall 说过真正优秀的程序员有三大优良品质:偷懒,没有耐性和骄傲自大。所以能利用别人的劳动成果就不要自己重造轮子。我们可以到 http://download.openvz.org/template/precreated/ 下载已经安装好的模版,有 centos, debian, ubuntu, fedora, suse 等几个模版可以选择:
# cd /vz/template/cache
# wget http://download.openvz.org/template/precreated/ubuntu-10.04-x86.tar.gz
有了 ubuntu 10.04 的模版以后就可以用这个模版来创建 guest 系统(VE/VPS)了,以刚下载的 ubuntu-10.04-x86 为模版创建一个 ID 为 1 的 Virtual Environment (VE),并指定 IP 地址、DNS 服务器地址、主机名、磁盘空间等,创建成功后启动 ID 为 1 的 VE,最后修改 root 密码:
# vzctl create 1 --ostemplate ubuntu-10.04-x86
# vzctl set 1 --onboot yes --save
# vzctl set 1 --ipadd 172.16.39.110 --save
# vzctl set 1 --nameserver 8.8.8.8 --save
# vzctl set 1 --hostname vps01.vpsee.com --save
# vzctl set 1 --diskspace 10G:10G --save
# vzctl start 1
# vzctl exec 1 passwd
启动、重启、关闭和断电关闭 ID 为 1 的 VE/VPS:
# vzctl start 1
# vzctl restart 1
# vzctl stop 1
# vzctl destroy 1
查看正在运行中的 VE/VPS:
# vzlist
CTID NPROC STATUS IP_ADDR HOSTNAME
1 8 running 172.16.39.110 vps01.vpsee.com
计算 ID 为 1 的 VE/VPS 用到的资源:
# vzcalc -v 1
Resource Current(%) Promised(%) Max(%)
Low Mem 0.06 1.44 1.44
Total RAM 0.19 n/a n/a
Mem + Swap 0.08 1.30 n/a
Alloc. Mem 0.11 1.62 3.09
Num. Proc 0.01 n/a 0.32
--------------------------------------------
Memory 0.19 1.62 3.09
进入 guest
VE 成功启动后就可以进入系统了,相当于 xen 的 xm console,不过从 VE 退出来不需特殊按键直接 exit 就可以:
# vzctl enter 1
entered into CT 1
root@vps01:/# exit
logout
exited from CT 1
在本系列的第二部分中,我们介绍了如何安装CentOS以便运行OpenVZ软件以及如何安装OpenVZ内核、工具程序及模板管理工具。本文将学习怎样创建、备份VPS(虚拟专有服务器)。
创建第一台VPS
在下面的例子中,我使用的是来自私有192.168.块的IP地址。你或许想在自己的局域网上修改这个命令得到希望的IP地址(主机和DNS)。vzctl用于VPS创建、配置和运行。vzctl能在一行命令上提取几个参数,不过为了举例,我在单独的命令行上执行每个操作。使用以下命令创建VPS:
vzctl create 101 --ostemplate centos-4 --config vps.basic
使用创建关键字的vzctl命令将提取centos-4-i386-default.tar.gz文件到/vz/private/101/。也会在/etc/vz/conf/目录里创建名叫101.conf的配置文件。OpenVZ使用数字来识别虚拟专有服务器,我使用的是101。OpenVZ文件说数字1到100的都可以保留,由于VPS的IP地址在101就不能用了,所以使用VPS 101是个好主意。
下面的vzctl命令带有set字样。如果VPS正好在运行,它将动态地告知配置更改给VPS。最终的更改将配置更改写入VPS配置文件。如果你输入以下的vzctl设置命令,将出现:
vzctl set 101 --ipadd 192.168.0.101 --save
vzctl set 101 --hostname vps101 --save
vzctl set 101 --nameserver 192.168.0.1 --nameserver 192.168.0.2 --save
vzctl set 101 --userpasswd root:areallycoolpassword
这将分配一个IP地址,然后给定一个主机名,定义nameservers(放进/vz/root/101/etc/resolv.conf),根密码也设置了。当然你想使用一个不同的根密码。尽管多数的附加选项在etc/vz/conf/101.conf的列表里是默认的,但是也有足够的信息定义唯一的VPS。检查101配置文件的附加参数和默认值。
输入下面的vzctl设置命令能使VPS在主机操作系统启动时自动启用:
vzctl set 101 --onboot yes –save
第一次启动VPS,现在就定义了VPS 101,可以使用vzctl命令启动101:
vzctl start 101
你能看到VPS成功启动的信息。使用vzlist命令得到所有VPS的概要。要访问新的VPS,可以输入上面的vzctl命令或者下面的ssh root命令:
ssh root ((Content component not found.)) .168.0.101
进去后就可以使用新的VPS了,就如有一台独立的机器。下面有个图表,注意,这仅仅是看起来是台独立的机器,有自己的启动脚本、配置、用户帐户、主目录等。VPS根用户几乎能完成控制,而不需要访问主机操作系统或任何其他VPS。VPS根用户不能分配硬盘或更改网卡配置。
VPS资源管理
每一台VPS都有一个专门的文件,叫做/proc/user_beancounters,这个文件包含资源分配与资源使用的信息。以根用户身份在VPS里输入:
cat /proc/user_beancounters
以下的例子:
最后一栏叫做failcnt,保存资源访问故障的增量值。如果failcnt的值不是0,那么VPS有资源故障。例如上面的numproc的barrier和limit都是65,这意味着VPS的并发进程不能超过65,并且如果你尝试启动第66个进程,进程进失败,numproc的failcnt值将从1开始增加。对于主机操作系统的根用户来说,监控failcnts和按需调整VPS资源值很重要。监控所有VPS资源使用率的捷径是使用下面的命令行:
less /vz/root/*/proc/user_beancounters
这将打印出所有主机节点上VPS的user_beancounters。使用有set字样的vzctl命令用于调整各种资源。例如,要为privvmpages调整barrier和limit,输入:
vzctl set 101 --privvmpages : --save
上面的应该用实际值更换。注意,如果VPS正在运行的话,资源将动态地(并立即地)调整,并且--save标记将保存设置到101.conf配置文件。你所需要知道的就是是否有failcnt,并少量慢慢地增加值,并且保持监控,直到这个资源的failcnt值是0。
除非想将barrier和limit的值设置得非常高,否则需要花费几天时间调节VPS的资源以避免资源故障。注意,这些值实际上主机操作系统和所有VPS之间合并的或共享的值,不像其他多数虚拟化产品只提供了静态资源分配情况。我在这里不详细描述这些资源是什么,更多细节可以参见OpenVZ用户指南和维基百科。
在/proc/user_beancounters里不能找到一个资源,那就是拥有1GB默认值的磁盘空间设置。如果VPS 101需要多于1GB的磁盘空间,需要自己设置。下面的命令将动态地设置30GB的磁盘定额并更新101.conf文件。
vzctl set 101 --diskspace 31457280:31517280 –save
注意,这个命令不能保留VPS 101的物理磁盘空间。它只是确保由于磁盘空间也是合并的或共享的资源,VPS 101不能使用多于设定值的资源。这意味着你能根据需要过度分配磁盘空间。
克隆VPS
如果你已经有一台设置好的VPS,还想设置另外一台一样的,最简单的方法是使用vzctl创建命令手动设置:
1) Copy the /vz/root/ to /vz/root/
2) Copy /etc/vz/conf/.conf to /etc/vz/conf/.conf
当然得用实际值替换。在复制之前,停止运行源VPS。能使用以-a flag为标记的cp命令,不过我喜欢使用rsync复制更复杂的目录架构。完成复制操作后,能重新启动源VPS。在启动新VPS之前,确定通过使用vzctl设置或手动编辑.conf文件修改了配置,这是因为需要更改IP地址和主机名以避免冲突。
备份VPS
一台VPS通过/etc/vz/conf/里的配置文件和/vz/root// directory下的文件表示。为了备份VPS,过程与备份很相似,不过就是目标目录放在你需要存储的地方。
管理VPS
记住,从功能上看,VPS是台独立的计算机。相对于主机操作系统来说,VPS更像一个完全不同的Linux版本,因此必须注意使用Linux发布的相关的安全更新。拥有对主机操作系统的根访问意味着能使用vzctl enter命令进入所有VPS。也能通过使用有exec字样的vzctl命令,从主机操作系统的VPS上执行命令。
参考资料
我在本文中简单地介绍了OpenVZ安装、VPS创建和基本的VPS操作。OpenVZ有一些出色的文档,我推荐打印出OpenVZ用户指南。注意,这个文档写在附加的功能“热迁移”和OpenVZ yum知识库创建之前。维基百科里也有安装指南。
如果在这些资料里找不到你所需要的信息,那么使用OpenVZ Forums。