读书频道 > 系统 > linux > 构建高可用Linux服务器(第2版)
2.1.4 使用ezjail工具创建和管理jail虚拟机
2012-08-10 19:46:20     我来说两句 
收藏    我要投稿   
本书是资深Linux/Unix系统管理专家兼架构师多年一线工作经验的结晶,51CTO和ChinaUnix等知名社区联袂推荐。第1版上市后广获好评,分别被《程序员》杂志和51CTO网站评选为2011年度10大最具技术影响力的图书和2011...  立即去当当网订购
在使用jail的过程中,我们也发现,如果用以上方法新建单台jail并没什么问题,但如果是建立大于10台的jail虚拟机,过程不仅麻烦而且很浪费时间,所以我推荐大家采用jail的优化管理工具ezjail。
在公司环境中,我需要快速和大量地部署jail虚拟机,原先的make world方式就显得非常力不从心了。大家都知道,make world就算在双4核的机器上也是极慢的。FreeBSD的官方文档向我们推荐管理及创建jail的工具ezjail。
jail的手册概述了创建jail的方法,然而,当需要多个jail时,完整的jail目录树会迅速地占用很多宝贵的磁盘空间。ezjail通过使用FreeBSD的nullfs特性来避免出现这个问题。基础系统的大部分(/bin、/boot、/sbin、/lib、/libexec、/rescue、/usr/bin、include、lib、libexec、ports、sbin、share、src)仅在宿主机系统中存在一个副本,并通过nullfs以只读的方式挂载到所有的jail里。那些jail就非常苗条了(每个约2MB),并且只包含一些指向basejail挂载点的软链接,没有像/etc、/usr/local这样的共享目录。
1?ezjail工具的优势
ezjail带来的优势包括以下几点:
节省磁盘空间、inode,甚至内存,因为系统只需要为所有的jail持有一个系统二进制的副本。
可以通过更新一个基础目录来更新所有的jail,它是如此的简单,你肯定能做到。
入侵者破坏jail时无法安装标准的rootkit(因为基础系统是只读挂载的)。
由于ezjail完全是用sh写成的,因此没有必要在宿主机系统中安装其他脚本语言。
因为基础系统是软链接的,被囚禁(enjailed)的用户可以选择不使用已挂载的world。
一个常常被低估的事实是:较少的复杂性意味着更多的安全。
2?安装步骤
现在通过ezjail来为我的jail?cn7788?com、IP名为192.168.1?103的机器(相当于母机)安装两台jail机器:一台名为apache?cn7788?com、IP为192.168.1?104,另一台名为research?cn7788?com、IP为192.168.1?105。
具体步骤如下(由于权限要求很高,为了方便,这里暂时切换到root下操作)。
1)编辑网卡地址。为网卡创建两个子网地址,在/etc/rc?conf中添加如下代码:
 
ifconfig_em0_alias0="inet 192.168.1?104 netmask 255?255?255?0"
ifconfig_em0_alias1="inet 192.168.1?105 netmask 255?255?255?0"
重启后,通过ifconfig 观察网卡的IP,如图2-1所示。


图2-1 ifconfig显示网卡详细信息界面
2)编译内核。由于是最小化安装,所以没有/usr/src目录,可以通过sysinstll工具来安装此目录。先切换到root下,然后输入sysinstall命令,再按顺序执行以下步骤安装此目录:
 
sysinstall →Configure →Distributions →src →ALL→Install from a FreeBSD CD/DVD
接下来编译内核,命令如下:
 
cd /usr/src
make buildworld
此过程比较漫长,建议在下班时间或午饭时间做,无论是双4核还是双8核的机器,都要做2小时以上的预算。
3)安装ezjail工具,如下所示:
 
cd /usr/ports/sysutils/ezjail
make install clean
4)生成jail模板,如下所示:
 
ezjail-admin update -p -i
其中:
-p:提供给jail ports。
-i:不再运行make world,因为第一步我们已经做了。
5)生成名为apache?cn7788?com和reseach?cn7788?com的子jail机器,如下所示:
 
ezjail-admin create -r /usr/jails/apacheapache?cn7788?com192.168.1?104
ezjail-admin create -r /usr/jails/research research?cn7788?com192.168.1?105
该命令分别可以在/usr/jails/apache和/usr/jails/research目录下建立名为apache?cn7788?com和research?cn7788?com的jail机器。
6)让192.168.1?103的机器开机,即启动ezjail工具,操作如下。
在/etc/rc?conf的最后添加如下代码:
 
ezjail_enable="YES"
7)分别通过ezjail启动这两台jail机器,如下所示:
 
/usr/local/etc/rc?d/ezjail?sh start apache?cn7788?com
/usr/local/etc/rc?d/ezjail?sh start research?cn7788?com
 
 
说明ezjail由两个脚本组成,即ezjail-admin和ezjail?sh,前者用于创建、更新和删除jail,后者用于启动、停止和重启jail。
 
8)通过ezjail?admin list查看jail机器的情况,如下所示:
 
ezjail-admin list
命令显示结果如下所示:
 
STA JIDIPHostnameRoot Directory
--- ------------------- ------------------------------ ------------------------
DR2192.168.1?105research?cn7788?com/usr/jails/research
DR1192.168.1?104apache?cn7788?com/usr/jails/apache
9)启动jail机器的ssh。
启动ssh的方法跟平常是一样的,没有任何区别。
先通过jexec 1或2 sh登录该jail,执行以下命令就可以自动启动ssh服务了,如下所示:
 
echo ' sshd_enable="YES" ' >> /etc/rc?conf
然后通过ezjail?sh命令重新启动虚拟机,如下所示:
 
/usr/local/etc/rc?d/ezjail?sh restart apache?cn7788?com
Stopping jails: apache?cn7788?com?
Configuring jails:?
Starting jails: apache?cn7788?com?
usr/local/etc/rc?d/ezjail?sh restart research?cn7788?com
Stopping jails: research?cn7788?com?
Configuring jails:?
Starting jails: research?cn7788?com?
10)如果要添加新的jail机器,重复以上步骤即可。
jail机器的备份是非常容易的,对相应的目录进行备份即可。其实我建议只对重要资料进行备份,如果jail机器崩溃了,重建一个也是非常快的。
 
 
 
提示如果大家有大规模部署虚拟机的需求,建议用ezjail的方式创建和管理,它创建的速度非常快,而且子jail极小,如果遇到崩溃的情况,它恢复起来也极快,现在我基本上在每台jail机器上都部署了ezjail
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.1.3 使用jexec工具管理jail虚拟机
下一篇:2.1.5 jail在生产环境下的注意事项
相关文章
图文推荐
3.3.6 GNOME的软件管
3.3.5 GNOME的文件管
3.3.4 GNOME的窗口管
3.3.3 收藏夹和快捷
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站