科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux系统下实现数据复制深入研究 (2)

Linux系统下实现数据复制深入研究 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在本文中我们将要讨论的是,如何抛开昂贵的SAN(存贮区域网络Storage Area Network,如全球文件系统GFS)或网络块设备在Linux下实现数据复制。

作者:Atif Ghaffa 来源:linuxaid.com.cn 2007年10月16日

关键字: 研究 数据 Linux

  • 评论
  • 分享微博
  • 分享邮件
 

什么是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/linux
pathch –pi<pathchfile。

然后运行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/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上改变的文件进行更新。

资源列表:

  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:

  http://www.nas.nasa.gov/Groups/www/subpages/topology.html

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

存在的问题

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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章