+ -
当前位置:首页 → 问答吧 → 用FreeSBIE架设一个Web集群

用FreeSBIE架设一个Web集群

时间:2004-09-13

来源:互联网

用FreeSBIE架设一个Web集群
by Alexander Prohorenko 翻译:Eric Neon
07/01/2004
什么是FreeSBIE? 引用它的开发者的话说:
什么是FreeSBIE? 简单地说:它是一个建立在CD上的live 系统,或者一个直接可以从启动盘导入的操作系统,不需要任何安装过程,不需要任何硬盘。它基于 FreeBSD 操作系统。
好消息!有许多不同的被成为LiveCD的项目基于FreeBSD,但是据我所知,都没有发布过一个稳定版和公众版。FreeSBIE 1.0是第一个,所以它听起来像是一个好的选择。
真的有必要使用FreeSBIE?通常,硬盘设备的价格是相当低的,所以这便于用硬盘装备我们的服务器和工作站。问题是生命周期。一个普通的硬盘会在不确定的周期之后损坏;这是不可避免的。硬盘被用于高负荷的频繁的读/写操作。CD的生命周期则更长些,它通常仅进行读操作,它被设计成一个更好的存储设备, 而且有件事也值得一提,一百张空白光盘的花费也比一个硬盘的花费要少的多。
从一个标准CD运行一个UNIX操作系统,有很多方法可以拯救你的时间和资金。我将乐意描述一个使用LiveCD的情形是简单而有经济效益——一个针对无盘工作站的集群解决方案。
一个集群实例
假想我们需要架设一个集群提供HTTP和HTTPS服务连接。为什么我们需要一个集群?首先,我们的Web服务负荷很高;现有的单CPU或双CPU系统,以及大量内存也不够用。其次,我们的服务需要24X7可用,并且需要一个出色灾难备份系统,这些对于客户和冲浪者来说是完全透明的。没人在意我们有多少服务器和网站;每个人只是想看见请求的Web页面。
用拒绝服务攻击(DoS)杀死一个服务器非常简单,但是如果我们有多个服务器,就能让我们活的更久些。不仅如此,我们也不能仅仅依赖一个硬件服务器,那是愚蠢的事。硬件故障随时都可能发生,而我们不能让我们的业务由此去冒险。综上所述,我要说有大量不同的结论说明为什么一个集群是有意义的。
我们的集群解决方案包括:
l 负载均衡硬件或软件。 对于硬件,我们可以使用F5 BIG-IP或其他这类产品。这个硬件可以控制HTTP连接,并将它们路由到正确的服务器。它还能够知道有多少欺骗和可以隐藏HTTPS。并且,我喜欢它是由于它运行BSD系统作为一个管理系统。我称之为lb01。
有许多不同的负载均衡系统,作为惯例,他们都是具备高可塑性的,而他们的语法通常很容易理解,以写出你自己的配置。我们的范例需要隐藏SSL并传递普通HTTP到我们的服务器。它将选择最少负载的服务器,并将从列表中删除损坏的机器。所有现代的均衡设备知道怎样做好这些任务。
· 数据存储器Data storage。 个人而言,我喜欢来自Network Appiance的NetApp NFS服务器。它运行BSD,支持NFS协议,运行非常好。我称之为nfs01。
· 无盘工作站,只用网络适配器和CD-ROM设备配备。 随后我们将只用它们来提供Web服务。我称之为web01-10。 它们将运行 Apache Web Server 和其他任何需要的东西。
当我开始研究架设过程之前,我想解释一下为什么我要选择这个集群结构。 有许多不同的合适的集群结构。大多数流行的结构包括只有网络适配器的Web服务器装备都通过PXE-BOOT来引导。这个结构使用了一个额外的DHCP服务器。我个人认为这是一个好门径,但是它有同样的弱点。在开始阶段,它可能有点昂贵。它也有一个潜在的“优势服务弱点”(quality-of-service drawback);所有的集群机器都依赖于DHCP服务器,它可能负荷过大,并成为潜在的硬件故障网络致命环节。另一方面,这个结构需要少许管理时间。
构建FreeSBIE CD
让我们开始FreeSBIE的构建过程。构建一个FreeSBIE LiveCD,我们需要一个FreeBSD工作站,最好它的硬件配置和我们的集群机器的配置相同。在我的项目中,有一台拥有128M内存的AMD Duron 1200 CPU,构建工作站还有一个Maxtor 6Y120P0 UDMA 100的硬盘,我们的集群机器不需要这个。
最后,构建的工作站还需要一个CD-RW或者DVD-RW驱动器以烧录我们的CD ISO镜像,当我们构建系统之后,节约起见,使用空白CD-R光盘。(当你熟悉了构建和烧录过程前,CD-RW可能更好些)。
FreeSBIE 有一个FreeBSD port位于 /usr/ports/sysutils/freesbie 。 我用的版本是2004年二月7日的,freesbie-20040207.tar.bz2, 大小是151,799字节。FreeSBIE port是 “一个脚本的集合,帮助一个用户创建CD/DVD,包括了一个基于FreeBSD的预编译操作系统。它可以当作‘live-CD’使用,并直接从CD引导。”FreeSBIE使用压缩技术在LiveFS文件系统中存储了大量的软件。
FreeSBIE站点有一个预编译LiveCD ISO镜像。当我写这篇文章时,他们有如下内容:
Latest ISO: FreeSBIE-1.0-i386
文件名 类型 尺寸 日期
FreeSBIE-1.0-i386.iso ISO 镜像 565,504 Kb 02/27/2004 12:22:00
FreeSBIE-1.0-i386.iso.md5 MD5 签名 1 Kb 02/27/2004 12:28:00
FreeSBIE-1.0-i386.pkg_info.txt 包描述 20 Kb 02/27/2004 12:21:00
如果默认的运行和配置对你都是OK的,你就可以使用这些镜像。至于我们的配置,我们需要自定义缺省项。
第一步是将一个ISO镜像文件烧录到一张空白CD-R或CD-RW盘上。安装过程需要以下文件:
文件名 尺寸 描述
freesbie-20040207.tar.bz2 151,799 bytes 脚本的集合
cdrtools-2.00.3.tar.gz 1,638,876 bytes 构建一个ISO镜像所需的工具软件集合
cloop_2.01-1.tar.gz 21,862 bytes 压缩文件系统支持
安装步骤可以简单地如此操作:
$ cd /usr/ports/sysutils/freesbie
$ make
$ su
# make install
这个包的主题部分是脚本的集合,存放在 /usr/local/share/freesbie 目录下。 README 建议运行一个用户交互界面去执行脚本,用Savio Lam的 dialog 程序来执行。我们来运行它 ./freesbie. 从这里开始 /usr/local/share/freesbie, 当中所有的脚本都有关联性,没有绝对的路径。
第一次运行脚本,见图 1,启动配置过程。

图 1: FreeSBIE 启动配置
我们需要设置LiveFS文件系统的路径和文件名。我们放在 /usr/local/livefs。 如果目录没有创建,安装程序会敦促你创建它:
ATTENTION PLEASE!

The path you have entered does not seems a valid path or the directory does not
exist.

Do you wish to create it? [ Yes ] No
我们还需要设置FreeSBIE的主目录,安装程序将在那里创建内核配置文件,用于构建一个系统。使用当前目录,/usr/local/share/freesbie。
接着,设置ISO镜像文件创建的目录。缺省是 /usr/local/share/freesbie/FreeSBIE.iso。我个人宁可不在系统级目录中中构建一个自定义的系统。这将带领你进入主菜单,见图 2.

图 2: 安装程序主菜单
第一个选项 Configure,在前面的区块中我们已经通过了,所以我们可以继续前进。不幸的话,如果你需要一个帮助系统,如屏幕最下面所提示的那样按F1,它将带你进入一个shell。你可能不需要帮助,但是也小心点。
让我们按顺序来应付菜单选项。
Rmdir – 清理FreeSBIE FS
这个选项运行 0.rmdir.sh 脚本以清理LiveFS文件系统目录。
Mkdir – 创建一个新的FreeSBIE FS
这个选项由脚本 1.mkdir.sh 执行,它将试图创建一个目录以构成一个新的文件系统。在这之后, /usr/local/livecd 目录将变成:
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 cdrom
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 home
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 mfs
drwxr-xr-x 37 root wheel 1024 23 Feb 17:44 mnt
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 stand
drwxr-xr-x 3 root wheel 512 23 Feb 17:44 usr
drwxr-xr-x 3 root wheel 512 23 Feb 17:44 var
./mnt 包含了各种所支持的文件系统的目录:
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.ext.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.ext.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.ext.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 dos.ext.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.ext.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.ext.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.ext.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ext2fs.ext.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 floppy
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.ext.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.ext.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.ext.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ntfs.ext.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 temp
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 tmp
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.1
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.2
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.3
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.4
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.5
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.6
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.7
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 ufs.8
现在全部的目录构成大约占用了94 K字节数。

World - BuildWorld – 创建一个新的环境
这一步运行了 2.buildworld.sh 脚本。它要求你已经安装了src-all 包 (FreeBSD的所有源码)。我建议你将你的整个系统通过CVSup做了完整的升级。这将节约你大量的时间,而用不着费劲地估算为什么有些东西没有编译。在world building结束之后,你可以在缺省的 /usr/obj/usr/src 目录看见结果。在我们的这个项目中,它占用了大约419 M字节的空间。
Install - InstallWorld – 安装一个新的环境
这个选项运行 3.installworld.sh 脚本,安装最新编译的系统环境。这一步花费的时间比编译过程要少。目录 /usr/local/livefs 将变成:
-rw-r--r-- 2 root wheel 802 23 Feb 19:41 .cshrc
-rw-r--r-- 2 root wheel 251 23 Feb 19:41 .profile
-r--r--r-- 1 root wheel 4735 23 Feb 19:41 COPYRIGHT
drwxr-xr-x 2 root wheel 1024 23 Feb 19:42 bin
drwxr-xr-x 3 root wheel 512 23 Feb 19:43 boot
drwxr-xr-x 2 root wheel 512 23 Feb 19:43 bootstrap
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 cdrom
drwxr-xr-x 16 root wheel 2048 23 Feb 19:41 etc
drwxr-xr-x 3 root wheel 18432 23 Feb 19:41 dev
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 home
drwxr-xr-x 2 root wheel 512 23 Feb 17:44 mfs
drwxr-xr-x 37 root wheel 1024 23 Feb 17:44 mnt
drwxr-xr-x 2 root wheel 512 23 Feb 19:41 modules
dr-xr-xr-x 2 root wheel 512 23 Feb 19:41 proc
drwxr-xr-x 2 root wheel 512 23 Feb 19:41 root
drwxr-xr-x 2 root wheel 2048 23 Feb 19:42 sbin
drwxr-xr-x 5 root wheel 1024 23 Feb 19:43 stand
lrwxr-xr-x 1 root wheel 11 23 Feb 19:41 sys -> usr/src/sys
drwxrwxrwt 2 root wheel 512 23 Feb 19:41 tmp
drwxr-xr-x 13 root wheel 512 23 Feb 19:41 usr
drwxr-xr-x 20 root wheel 512 23 Feb 19:41 var
现在我们的LiveFS文件系统是131 Mbytes尺寸。
Kernel - Build & Install Kernel – 创建和安装内核
这个选项运行 4.kernel.sh 脚本,给我们的LiveFS文件系统编译和安装一个内核。缺省的FreeSBIE内核配置文件是 /usr/local/share/freesbie/FREESBIE。 它基于一个GENERIC 内核配置文件,加入了许多选项,所以你可以自定义这个文件。如果你不熟悉内核的编译过程,把原始文件备份成 FREESBIE.orig 。
缺省的配置产生的内核尺寸大约5 M,这明显太大了。在删除了SCSI、RAID、少见网卡以及ISDN的支持后,我的内核尺寸减少到2.2 M。你可以做得更好。
我建议你用/usr/local/share/freesbie/kernel.sh 脚本来编译和安装内核,而不是用虚拟 dialog 界面,因为如果在编译和安装时有错误出现, dialog 会很快清除掉debug信息以至于很难查看。
等你完成了这一步,将内核复制到 /usr/local/livefs 内核目录。
FIXIT - PatchFiles – 复制酷的有用的文件
这个选项运行5.patchfiles.sh,它向LiveFS文件系统加入了很多不同的脚本,主要是在 scripts/ 目录:
Patching files in /etc directory...
Making vnodes in /dev...
Copying cool scripts (from sysutils/livecd)
cp: /usr/local/share/freesbie/files/livecd/scripts/lang is a directory
(not copied).

/usr/local/share/freesbie/files/livecd/scripts/create_vnodes.sh
-> /usr/local/livefs/scripts/create_vnodes.sh
/usr/local/share/freesbie/files/livecd/scripts/lang/vnodes_En
-> /usr/local/livefs/scripts/lang/vnodes_En
Copying FloppyBackup and cardDetect scripts

Packages - Packages – 选择包进行安装
这个选项运行 6.packages.sh 脚本,向你的LiveFS文件系统安装添加的包。图 3 显示了包选择的菜单。

图 3: 软件包菜单
这个脚本从pkg_info信息产生这个软件包列表。 换句话说,LiveFS可以在你新构建的系统上安装当前系统已安装的软件包。如果没有用ports或者pkg_add程序在你当前系统中安装软件包,你将看不见这个列表。如图 4 所示,这个操作和你使用 /stand/sysinstall 程序调节你的FreeBSD安装非常相似。

图 4: 包选择
当选择必要的软件包时,留意你的存储器的空间限制。一张CD-R 或者CD-RW一般控制在650M至800 M字节之间。如果你使用一张DVD, 你就为你的软件提供了更多的空间。
User - Custom User – 安装Shell脚本文件和其他
这个选项运行 7.customuser.sh。它将用户定义文件和软件配置从 /usr/local/share/freesbie/files/foobar 复制到LiveFS文件系统。缺省是:
Installing customized files...
/usr/local/share/freesbie/files/foobar/irssi_config ->
/usr/local/livefs/root/.irssi/config
.muttrc
.mutt/aliases
.mutt/auto_views
.mutt/bindings
.mutt/colours
.mutt/gpg
.mutt/headers
.mutt/macros
cp: /usr/local/share/freesbie/files/foobar/.. is a directory (not copied).
cp: /usr/local/share/freesbie/files/foobar/. is a directory (not copied).
/usr/local/share/freesbie/files/foobar/.xcustom.sh ->
/usr/local/livefs/root/.xcustom.sh
/usr/local/share/freesbie/files/foobar/.vimrc ->
/usr/local/livefs/root/.vimrc
/usr/local/share/freesbie/files/foobar/.tcshrc.complete ->
/usr/local/livefs/root/.tcshrc.complete
/usr/local/share/freesbie/files/foobar/.tcshrc.bindkey ->
/usr/local/livefs/root/.tcshrc.bindkey
/usr/local/share/freesbie/files/foobar/.tcshrc ->
/usr/local/livefs/root/.tcshrc
/usr/local/share/freesbie/files/foobar/.shrc ->
/usr/local/livefs/root/.shrc
/usr/local/share/freesbie/files/foobar/.rhosts ->
/usr/local/livefs/root/.rhosts
/usr/local/share/freesbie/files/foobar/.xsession ->
/usr/local/livefs/root/.xsession
/usr/local/share/freesbie/files/foobar/.mailrc ->
/usr/local/livefs/root/.mailrc
/usr/local/share/freesbie/files/foobar/.mail_aliases ->
/usr/local/livefs/root/.mail_aliases
/usr/local/share/freesbie/files/foobar/.login_conf ->
/usr/local/livefs/root/.login_conf
/usr/local/share/freesbie/files/foobar/.login ->
/usr/local/livefs/root/.login
/usr/local/share/freesbie/files/foobar/.custom.sh ->
/usr/local/livefs/root/.custom.sh
/usr/local/share/freesbie/files/foobar/.cshrc ->
/usr/local/livefs/root/.cshrc
/usr/local/share/freesbie/files/foobar/.Xauthority ->
/usr/local/livefs/root/.Xauthority
/usr/local/share/freesbie/files/foobar/.profile ->
/usr/local/livefs/root/.profile
/usr/local/share/freesbie/files/foobar/.xinitrc ->
/usr/local/livefs/root/.xinitrc
/usr/local/share/freesbie/files/foobar/mutt.tar.bz2 ->
/usr/local/livefs/root/mutt.tar.bz2
/usr/local/share/freesbie/files/foobar/irssi_config ->
/usr/local/livefs/root/irssi_config
这个在服务器的配置中不是很有用。

Build - Build ISO – 创建 .iso 文件
这个选项运行8.mkiso.sh 脚本,使用已经定义的路径创建ISO镜像文件。在我们的项目中,将生成文件/usr/local/share/freesbie/FreeSBIE.iso。我们差不多完成了!
自定义构建有两条不同的方式,第一种方式是在开始./freesbie 前编辑所有/usr/local/share/freesbie 目录下的文件。第二种方式创建LiveFS文件构成并编辑必要的文件。当然,你可以结合两种方式,但是我发现第二种方式更加明智。
自定义系统
现在你已经清楚了构建的步骤,我可以描述怎样自定义系统了。
首先,我们需要自定义LiveFS上的 /etc 目录。/etc/rc.conf 文件控制了主机名和介面配置。我们没有简易的办法把这个文件放再NFS驱动器上,除非是再startup脚本中打补丁。但愿 GUFI——以意大利FreeBSD用户组为主开发中的FreeSBIE能够最终使之简化。我们也可以为web01-10 中的每个服务器准备一个不同的配置,或者修改脚本以便从nfs01挂载 /etc/rc.conf 。你也可以试着按照/usr/share/examples/diskless/clone_root 克隆一个无盘配置的指示,虽然我相信它同样需要大量的hacking。我没有细致地看过这个文件,但它看上去是更多的以无盘配置为目的。
一旦我们已经设置好了系统主机名和连接到了网络,我们必须启动我们的服务。这意味着我们必须编辑/etc/fstab:
nfs01:/startup/usr/local/etc/rc.d/cluster
/usr/local/etc/rc.d/cluster nfs ro 0 0
/usr/local/etc/rc.d/cluster 目录控制一个本地服务的脚本。FreeBSD的 /etc/rc 脚本在它启动本地软件之前加载NFS 文件系统,所以这里我们不需要任何hacks。我们也需要加载一个数据目录和软件配置:
nfs01:/storage/var/web /var/web nfs Ro 0 0
/var/web 目录控制了我们Web服务的数据。这可以是一个由复杂文件组成的目录。虽然在这里我们没有按按照正规的方式修改它,但如果我们想把它以rw 模式加载就可以这么做。
nfs01:/startup/usr/local/etc /usr/local/etc nfs ro 0 0
/usr/local/etc 控制我们软件配置的文件。
要crown it all, nfs01 必须提供:
/startup/usr/local/etc
/startup/usr/local/etc/rc.d
/storage/var/web
这里除了在/storage/var/web中的数据没有什么庞大的内容。这不会对我们的NetApp NFS 服务器造成沉重的负担。
当我们结束自定义我们的系统之后,我们可以准备一个ISO镜像文件用于刻录。从开始到这一步总共花去我不到两个小时的时间。我希望为一些熟悉FreeBSD的专家定制一个完整的、高度定制的集群系统不多于四五个小时。
现在你可以用操作系统或者你喜欢的软件刻录一个ISO镜像到磁盘中。在FreeBSD下我喜欢用burncd ,在Windows 平台我使用Ahead Nero。这里展示了怎样在FreeBSD下刻录一个系统到CD-RW盘上:
# burncd -s max -f /dev/acd0a blank
这将制作一个空白的镜像文件。刻录一张CD:
# burncd -s max -f /dev/acd0a /usr/local/share/freesbie/FreeSBIE.iso fixate
更新
讨论怎样保持你的系统更新也是很有价值的。升级既简单有困难。我相信要多数跟上潮流的做法是保持你架设的系统升级。作为一个规则,你制作出来的系统需要竟可能少地升级——只有当FreeBSD有重要变动时才这么做。所以当你制作的系统up-to-date,你可以通过从头开始一个构建过程去为新版本创建一个镜像文件。
结论
现在你可以把你刚烧录的CD盘放进你的集群机器的CD-ROM驱动器中。引导它,然后分享你用它们简单而经济地解决问题的快乐!
Alexander Prohorenko 是一个年长的UNIX系统管理员和网络安全管理员。

作者: EricNeon   发布时间: 2004-09-13

用FreeSBIE架设一个Web集群 ?怎么是作LIVECD的文章的?

作者: corbie   发布时间: 2006-04-29

顶一下。。。。。。。。。。。

作者: linuxkumao   发布时间: 2007-11-08