ChinaUnix.net 首页 | 博客 | Linux | 论坛 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 沙龙 | 搜索
Linux首页 | Linux论坛 | 论坛精华 | 开源新闻 | 技术文章 | 专题专栏 | 新手指南 | 迁移方案 | 产品方案 | 开源项目 | 开源图书 | 软件下载 | 人才招聘 | Linux博客
  搜索

  产品与方案
·中科红旗全面打造现代化邮政体系
·红旗助力“网上审批服务” 推动电子政务
·红旗正版化开创呼和浩特网吧建设新起点
·红旗Linux助信息产业部邮件服务器“快跑”
·中标普华Linux 为电子政务信息化保驾护航
·中标普华Linux助力基金产业
·中标普华Office率先支持UOF标准
·中标普华邮件系统助力西藏政府信息化建设
·红旗Linux助力国库集中支付系统改革
·红旗助中信卫星 掀起GIS通信应用风暴
·红旗软件助力烟草总局 全面建设“数字烟草”
·红旗助力“信访阳光工程”打造畅通信访渠道
·红帽联合FIS发布下一代实时核心银行平台
·红旗助力金盾 打造全无忧出入境信息系统
·红旗Linux全力打造中国邮政总局名址信息库
·爱尔兰证交所从Unix迁移到红帽企业Linux
·一流的意大利银行选择使用红帽企业Linux
·PLUS Finanzservice选择使用红帽企业Linux
·红帽助力TransACT Communications 公司
·法国零售业巨头Lapeyre采用Redhat Linux
·旅游预订网站选择使用红帽企业Linux
·马哈拉施特拉邦政府的红帽解决之道
·美国联邦政府案例
·红帽为慕尼黑展览会提供现代化集群系统
·Yuba郡用开源软件和红帽产品提高了效率
·红帽企业Linux助印度理工建立高性能计算中心
·采用红帽Linux 将系统维护时间缩短了65%
·从UNIX迁移到Linux使Peñoles公司获益非浅
·Hikal公司用红帽企业Linux开展任务关键的ERP项目
·KDE3.5.4新版本发布
·芝加哥商业交易所从Unix向Linux迁移
·南方基金管理有限公司成功案例 Red Hat Linux
·广东北电通讯设备有限公司成功案例
·挪威国家石油公司从UNIX迁移到红帽Linux,成本减半
·中央电视台CCTV动画部案例 Red Hat Linux

  图书

鸟哥的Linux私房菜基础学..


Linux程序设计.第3版


Linux设备驱动开发详解


  下载
·Endian Firewall
·linux kernel(Linux 内核)
·CentOS
·Fedora Core 6
·Scientific Linux
·Slackware 11.0
·Gentoo Linux
·ubuntu-6.10-i386服务器版本
·ubuntu-6.10-amd64服务器版
·ubuntu-6.10-i386桌面版
·ubuntu-6.10-amd64桌面版
·Engarde Linux
您的位置: Linux时代 > 技术文档 > 系统安全 >

利用FAM和IMON在Linux下实现数据复制

日期:2007-03-08 作者:Linux时代 来自:linux.chinaunix.net


在本文中我们将要讨论的是,如何抛开昂贵的SAN(存贮区域网络Storage Area Network,如全球文件系统GFS)或网络块设备在Linux下实现数据复制。我们在复制系统中采用了FAM(文件变更监视模块)和IMON(信息节点监视模块),这两个系统都是SGI当初为IRIX开发的。

SGI的员工真是非常的Cool,是他们将这两个程序移植到了Linux上并且公开了源代码。当花费已不再是问题时,可以采用基于GFS(全球文件系统)和SAN实现实时数据镜像;否则,数据共享及其它许多的选择就不可或缺了。

有几个方法可供选择。在本文中我们将会对这些方法进行讨论,你将会看到它们各自的优缺点。

为何要用复制替代共享?

难道假设文件服务器不向客户端提供共享数据吗?是的,假设的工作环境确实是这样的。如果我们正在使用的文件服务器是通过NFS或SMB之类软件的共享文件的,系统中就会存在一个”瓶颈”和”引起系统故障的关键点”。若是在GFS之上通过共享的存贮设备(SAN或多通道的SCSI)共享数据,这种配置不但代价昂贵,并且这种存贮盒还会成为”引起系统故障的关键点”。也可以用NBD(网络块设备)建立一个网络镜像,但这不是一种常用的方式,NBD本身有些缺限,它非常难于设置管理,如果你只是要在少数几个WEB服务器间复制数据,用NBD只会给你带来更多的麻烦。

尽量简单

好的,下面我们来试着复制。

方案一:

两台WEB服务器中的一台为主服务器,另外一台是备份服务器。要求备份服务器上的文件要与主服务器上的保持相同。这很简单吧。

但是如何使其自动工作呢?用户每天得多次FTP到主服务器上复制数据。但当主服务器发生错误、由备份服务器接管系统时会发生什么呢?由于这种备份操作不是实时的,备份服务器中的数据肯定与主服务器不一致,这时管理员会非常恼怒。你当然可以运行一个计时守护程序,每隔5秒运行一次”rsync –av –delete source destination”,但这样做会增加机器的负荷,影响系统的运转。

方案二:

有一台FTP服务器用来保存更新web数据,而六个web服务器使用dns轮转方式实现负载平衡,这样可以保证每台服务器上的数据都是相同的。这样我们就可以避免使用NFS,但是这样的解决方案并不能令人满意。

那么最好的解决方法是什么呢?应该是”只有在数据发生变化时才将文件复制到各个web服务器上”,如果文件没有发生变化就什么也不作。这也就是我们使用”FAM”来做的工作。

使之智能工作

那么,我们怎么知道文件发了变化呢?我想M$ 的Windows程序开发员会这么说:我们可以每隔几秒就搜寻目标目录一次,将其中的文件与缓存中保存的文件做比较,看文件时间戳及大小是否发生了变化。对,没错,是这样。

这是种轮询的工作方式,它的问题在于查找并比较文件的时间戳和大小,它的代价是昂贵的。你能想象在WEB服务器上每隔5秒就运行一次”ls –lR /somedirectory”造成的后果吗?

最好的方法应该是:文件被改动的时候能够有人告诉我们,这样我们可以采取相应的动作。这正是”IMON”要做的工作。

什么是FAM

FAM 就是文件变更监视模块,它向应用程序提供了一组API,当指定的文件或目录发生变化时,由其向应用程序发出通知。FAM由两部分组成:后台守护程序 FAM,它负责接收请求和发送通知;库文件LIBFAM,客户端应用程序用它来与FAM通信。若远程主机打开了受监视的文件,本地的FAM会与远程主机的 FAM联系,将请求发送给远程FAM。

FAM也可以在某个文件开始或停止运行时通知它的客户端。(比如:在IRIX交互桌面中,如果一个程序正在运行那么它的图标就会不会闪烁)。

FAM是由Bruce Karsh在1989年为IRIX编写的,并由Bob Miller在1995年重写。这个公开源代码的FAM版本构建并运行于Linux和IRIX之上,与IRIX6.5.8中的FAM相同。

什么是IMON?

IMON 就是信息节点监视模块,它是内核的一部分,当文件有变动时由它通知FAM。由应用程序告诉FAM对某个目录或文件进行监视,FAM再将这个请求传送给 IMON。当被监视的这些文件有变化时,内核通知IMON,再由IMON通知FAM,最后由FAM通知负责监视这个文件的应用程序。

IMON 是由Wiltse Carpenter在1989年为IRIX的内核编写的,再由Roger Chickering移植到Linux下。Linux下的IMON内核补丁与IRIX下的IMON在许多方面都很类似,只是与内核文件系统的挂接代码不同。

安装FAM和IMON

可从SGI的网站下载FAM和IMON,具体详情请查看后面的资源列表。IMON是一个内核补丁,内核通过它监视内部信息节点。安装补丁的方法如下:在内核的源文件目录下运行补丁程序。

cd/usr/src/linuxpathch –pi

   然后运行config或menuconfig,在”文件系统选择”这部分选择”Inode Monitor(IMON) support (EXPERIMENTAL)”,编译内核重启系统。编译FAM本身是很简单的,在FAM的源文件目录下运行./configure和make all install就大功告成了。

下面我们将要安装SGI::FAM调用的Perl模块,我们可以用perl来编写事件处理程序。

安装 SGI::FAM Perl模块

你不会真的要用C/C++来编程吧?我不了解你的情况,但是我很懒惰,而且我这个人也缺乏耐心,所以我用perl编写复制管理程序。

有关下载安装SGI::FAM的问题可以找Jesse N.Glick(jglick@sig.bsh.com)联系。安装这些模快很简单,运行CPAN模块:

perl –MCPAN –e shellinstall SGI::FAM

这样就安装了SGI::FAM及全部必须模块。

用Fam_mirror实现复制

Fam_mirror 是我写的用于自动复制的script程序。要了解Fam_mirror的具体情况,你可以在http: //www.linuxfocus.org/common/src/article199/fam_mirror.html去查看,如果要下载 Fam_mirror,请到http://www.linuxfocus.org/common/src/article199/fam_mirror。你可以重新编辑这个程序,将$replicaHosts改为当前的主机、$rsh改为当前使用的shell,也可以将$rsync改为实现相同功能的命令。

下面我们来看第一个方案:

有两台机器做WEB服务器(web1,web2)。其中一个为主服务器(如web1),另外一个为从服务器(web2)。第一个FTP服务器是web1,web2上根本不能运行FTP服务(否则,系统工作于备份方式时用户还可能会向文件中写数据)。

在两台服务器中,web文档都放在/var/www目录中,在两台机器中设置rsh或ssh,使web1无需口令就可以在web2上运行远程命令。我通常是在复制主机中的authorized_keys中填加我的ssh_key来实现这个要求的。将web1的数据远程同步到web2上的命令是:

rsync –avz /var/wwwweb2:/var/www/

编辑Fam_mirror文件,将@replicaHosts改为:

@replicaHosts=qw(web2)

在web1上运行Fam_mirror:

fam_mirror /var/www &

这样,如果web1上的文件发生了变化,这种变化也会写到web2上的文件中。

现在我们来看看方案2:(系统中有多台WEB服务器)

主机linuxweb1、linuxweb2、linuxweb3和linuxweb4都是web服务器。主机linuxftp 1是ftp服务器(主服务器)。Web主机不向用户开放FTP服务。

在主机linuxftp1上安装FAM和IMON、SGI::FAM及Fam_mirror。在每台主机上置rsh或ssh。linuxftp1无需口令就可以在四台WEB服务器上运行远程命令。

编辑Fam_mirror,将@replicaHosts设置为:

@replicaHosts=qw(linuxweb1 linuxweb2 linuxweb3 linuxweb4);

如果有需要也可以改动$rsh和$rsync,假设WEB文本放在各个机器的/var/www目录下。

在linuxftp 1上运行:INIT_MIRROR=1 fam_mirror /var/www &

这样,四台WEB服务器都能对linuxftp 1上改变的文件进行更新。

本文被浏览



 相关新闻

使用netcat命令网络同步复制系统2007-01-04 15:38:04
Open Solaris能否复制Java的成功2005-03-31 10:02:43


 相关评论
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 免费注册

Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号