分享
 
 
 

Linux下的实时数据镜像

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

摘要:

在本文中我们将要讨论的是,如何抛开昂贵的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到主服务器上复制数据。但当主服务器发生错误、由备份服务器接管系统时会发生什么呢?由于这种备份操作不是实时的,备份服务器中的数据肯定与主服务器不一致,这时管理员会非常恼怒J。你当然可以运行一个计时守护程序,每隔5秒运行一次”rsync –av –delete source destination”,但这样做会增加机器的负荷,影响系统的运转。

方案二:

在六个服务器间通过一个FTP服务器上传数据,保证每台服务器上的数据都是相同的。如果幸运我们可以暂时摆脱NFS一段时间,但这个时间不会太长。

接下来我们该做什么呢?我想应该是”将文件发生变化的那部分数据复制到各个WEB服务器中去”,如果文件没有发生变化就什么也不作。这也就是我们使用”fam”来做的工作。

使之智能工作

那么,我们怎么知道文件发了变化呢?我想M$ 的Windows程序开发员会这么说:

我们可以每隔几秒就搜寻目标目录一次,将其中的文件与缓存中保存的文件做比较,看文件时间戳及大小是否发生了变化。

对,没错,是这样。

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

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

什么是FAM

资料来源:http://oss.sgi.com/projects/fam/faq.html

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?

资料来源:http://oss.sgi.com/projects/fam/faq.html

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/linux

pathch –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 shell

install 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/www web2:/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上改变的文件进行更新。

资源列表:

SGI's fam site:http://oss.sgi.com/projects/fam

SGI:FAM Perl Module:http://search.cpan.org/search?dist=SGI-FAM

Realtime Data Mirroring (WEBD and SLIM) for IRIX:

fam class=red target=_blank>http://www.nas.nasa.gov/Groups/www/subpages/topology.html

fam mirror:http://www.linuxfocus.org/common/src/article199/fam_mirror

存在的问题

文中提出的解决方案存在一个小问题:碰到比较大的目录就不工作了,如含有四千到五千个子目录的情况。可能是内核不堪重负了。我正在找到产生这个问题的原因,一有发现我就会写到文章中的。如果你已经知道了解决这个问题的方法,请来信告知我。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有