OpenVZ真的非常好用,配合上GUI的图形管理很方便,效率也相当好。使用时间长了,一直有个问题困扰着我,就是如何把一些部署在物理服务器上的系统(简称物理系统)搬入OpenVZ中呢?
OpenVZ默认只提供了几个简单的centos、fedora的模板,虽然官方网站上也提供了大量precreated(预创建)的各种系统模板供使用,但毕竟这些template(模板)都是别人创建的。以前,我就曾写过:创建VPS OS模板的文章,告诉大家如何创建自己的模板。但这还不能满足我的要求,试想想,如果物理系统上已经部署了大量的应用,重新在VPS里面部署、迁移数据,这工作量将是非常庞大的。OpenVZ本身似乎没有提供这样的迁移工具。
经过查询相关资料,我终于实现了从物理系统到VPS的迁移工作。以下步骤,适用于部署在实际物理服务器上,或VMware、VirtualBox、Xen等虚拟环境中,而物理系统为红旗DC Server 5.0/Asianux 3.0,Centos/RedHat 4.0/5.0,Fedora 7.0/8.0/9.0等操作系统的环境。其余发行版也可参考类似的步骤进行,但因各发行版对配置文件的定义有所差异,需要根据各自的情况进行改动。Debian系列的系统,可以参考底下附录部分的文章处理。
一、准备工作
系统环境:
server2:红旗 DC Server 5.0 + OpenVZ 2.6.9-023stab048.4 192.168.228.90(虚拟机HW)
这里,我希望把server1上的物理系统迁移到server2的其中一个VPS中。迁移前,确认:
2、server2提供的VPS环境可以支持原server1的操作系统运行,例如核心为2.6.9以上;
3、server1与server2的操作系统应为同一平台,即都为x86或x86_64;
4、server2上已经搭建好OpenVZ环境,最好也把Vtonf等GUI管理配置好;
5、确保server2上有足够的空间供vz使用,建议把/vz作为一个单独分区划分,方便控制磁盘配额等资源。
二、迁移数据
1、创建VPS环境
可以用vzctl create借助模板创建一个VPS环境,然后清空/vz/private/$veid目录。也可以手动创建:
# cat /etc/vz/conf/ve-vtonf.512MB.conf-sample > /etc/vz/conf/101.conf
2、准备拷贝环境
迁移数据的方法有好多,tar、dd、rsync等都可以。我这里使用rsync,所以需要做到:
2、server1上需提供网络和sshd远程访问;
3、若server1部署了比较多的应用,建议暂时全部停掉;我的做法是,把server1切换到init 1模式,然后启动网络和sshd服务;
3、迁移数据
从server1拷贝数据到server2上:
※ 注意,原物理系统上有些目录对于VPS来说是没用的,甚至是有害的,拷贝时请把他们排除
4、设置VPS参数
前面若使用OpenVZ提供的sample配置文件,则还需要对该VPS设置,在server2上执行:
# vzctl set 101 –onboot yes –save
# vzctl set 101 –hostname 101.linuxfly.cn –save
# vzctl set 101 –ipadd 192.168.228.101 –save
# vzctl set 101 –numothersock 120 –save
# vzctl set 101 –nameserver 202.96.134.133 –nameserver 202.96.128.86 –save
# vzctl set 101 –diskspace 10000000:11000000 –save
# vzcpucheck
# vzctl set 101 –cpuunits 40000 –save
这部分的工作,实际是根据今后该VPS运行的情况而设置的,可以参考原来物理系统的配置进行。注意,若修改了网络等参数的话,今后启动VPS后,记得也要修改应用上的设定咯。
三、调整VPS环境
物理系统上的启动与VPS中启动有不少地方是有差异,或冲突的。这也是最重要改动的地方:
1、修改etc/inittab文件
2、修改etc/mtab文件
# ln -s /proc/mounts /vz/private/101/etc/mtab
3、修改etc/fstab文件
仅保留挂载/dev/pts的哪行:
# grep devpts /vz/private/101/etc/fstab.old > /vz/private/101/etc/fstab
# rm -f /vz/private/101/etc/fstab.old
4、修改etc/rc.d/rc.sysinit文件
把运行/sbin/start_udev的一行删除或注释掉:
5、创建device设备符号
# mkdir dev
# mknod -m 666 dev/ptmx c 5 2
# mkdir dev/pts
# /sbin/MAKEDEV -d /vz/private/101/dev ttyp ptyp
# chmod 660 /vz/private/101/dev/ttyp*
# chmod 660 /vz/private/101/dev/ptyp*
# mknod -m 666 dev/null c 1 3
# mknod -m 666 dev/random c 1 8
# mknod -m 444 dev/urandom c 1 9
6、删除网卡配置文件
因VPS使用虚拟网卡,不再需要启动物理网卡了。你可以修改配置文件中的ONBOOT为no,或直接删掉:
# cat /dev/null > /vz/private/101/etc/sysconfig/network
7、创建缺省目录
# mkdir /vz/private/101/tmp
# chmod 1777 /vz/private/101/tmp
四、启动VPS
启动:
Starting container …
Container is mounted
Adding IP address(es): 192.168.228.101
Setting CPU limit: 0
Setting CPU units: 1000
Configure meminfo: 32768
Set hostname: 101.linuxfly.cn
File resolv.conf was modified
Setting quota ugidlimit: 0
Container start in progress…
# vzctl enter 101
entered into CT 101
至此,迁移工作全部完成。
您可以进入VPS中看看应用运行是否正常。由于VPS与物理系统环境仍存在一点差异,可能会导致应用启动失败,这需要逐一分析日志解决。最常见的是,提供给VPS的资源不足问题。因物理系统可完全独立获得全部系统资源,而在VPS中,受HW控制资源的分配,这可通过在VPS中:
查看failcnt列的信息来判断。然后根据实际情况增加资源即可。
五、参考资料
How To Convert Physical Systems And Xen VMs Into OpenVZ Containers (Debian Etch)
Creating a CentOS 5.0 Template
Asianux 4.0 中KVM 使用桥接
使用HyperVM管理OpenVZ
配置Squid 2.6实现反向代理
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/110974.html