`
yangzb
  • 浏览: 3503438 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux下的实时数据镜像

阅读更多

翻译:sword_martin
  
  摘要:
  
    在本文中我们将要讨论的是,如何抛开昂贵的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服务器用来保存更新web数据,而六个web服务器使用dns轮转方式实现负载平衡,这样可以保证每台服务器上的数据都是相同的。这样我们就可以避免使用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.linux focus.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
  
    存在的问题
  
    文中提出的解决方案存在一个小问题:碰到比较大的目录就不工作了,如含有四千到五千个子目录的情况。可能是内核不堪重负了。我正在找到产生这个问题的原因,一有发现我就会写到文章中的。如果你已经知道了解决这个问题的方法,请来信告

分享到:
评论

相关推荐

    Linux中实现数据镜像备份.pdf

    "Linux中实现数据镜像备份" Linux操作系统中实现数据镜像备份是非常重要的一步骤,以保护数据的安全性。传统的备份方法是使用CP命令或WGET命令,但是这两种方法都有其局限性,例如CP命令只能对本地文件进行完整复制...

    rsync rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步

    **rsync:Linux系统的高效数据备份与同步工具** rsync是一款强大的、开源的、基于Unix哲学的文件同步和备份工具,广泛应用于Linux操作系统。它的全称是Remote Sync,正如其名,rsync能够实现本地及远程的数据同步,...

    Linux下建立Mysql镜像数据库(mysql 4.1)

    Linux 下建立 Mysql 镜像数据库(mysql 4.1) 本文将详细介绍在 Linux 环境下建立 Mysql 镜像数据库的方法。该方法适用于 MySQL 4.1 版本,并对主库和从库的配置进行了详细的描述。 知识点1:主库配置 在 Linux ...

    linux下挂载iso镜像的方法.docx

    "Linux下挂载ISO镜像的方法" 在 Linux 系统中,挂载 ISO 镜像是一种常见的操作。当我们需要访问光驱中的数据时,挂载 ISO 镜像就变得非常必要。下面我们将详细介绍 Linux 下挂载 ISO 镜像的方法。 挂载 ISO 镜像的...

    rsync Server是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制

    rsync Server是一款在Linux操作系统中广泛使用的数据镜像备份工具,其主要功能在于实现高效、安全的数据同步和备份。rsync的核心特性在于它的快速增量备份技术,能够仅对发生变化的数据进行传输,极大地节省了网络...

    制作linux镜像.docx

    制作linux镜像

    Linux 内核源码镜像

    Linux内核源码镜像是对Linux操作系统核心代码的完整复制,是理解Linux系统运行机制、进行系统级编程和定制化开发的重要资源。这份名为"linux_old1-master"的压缩包很可能是某个特定版本或者分支的Linux内核源码仓库...

    Redhat.Enterprise.Linux.v6.iso镜像

    ### Redhat Enterprise Linux v6 ISO镜像:部署与应用 #### 一、Redhat Enterprise Linux (RHEL) v6概述 Redhat Enterprise Linux (RHEL) 是一款由Red Hat公司开发的企业级Linux发行版,广泛应用于服务器、数据...

    linux挂载img镜像文件

    在Linux系统中,挂载IMG镜像文件是一项常用的技术操作,它可以帮助用户在不实际安装任何软件或更改现有系统配置的情况下,测试新的操作系统或者应用程序。此外,挂载镜像文件还可以用于备份和恢复数据。本文将详细...

    linux下数据的实时备份,增量备份的实现

    RAID 0+1,也被称为RAID 10,是一种组合型RAID,它结合了RAID 0的性能优势和RAID 1的数据镜像。RAID 0通过条带化将数据分散到多个磁盘上,提高读写速度;而RAID 1则通过镜像每个磁盘的数据,提供数据冗余。因此,...

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

    当花费已不再是问题时,可以采用基于GFS(全球文件系统)和SAN实现实时数据镜像;否则,数据共享及其它许多的选择就不可或缺了。有几个方法可供选择。在本文中我们将会对这些方法进行讨论,你将会看到它们各自的优...

    Linux开机自动挂载镜像.doc

    `mount` 命令用于将设备或文件系统挂载到已存在的挂载点上,以便用户可以访问其中的数据。其基本语法如下: ```bash mount [选项] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [挂载点] ``` `umount` 命令...

    创建Linux数据镜像服务器.pdf

    通过以上步骤,Linux数据镜像服务器就可以为局域网内的Windows用户提供数据访问服务了。这种设置不仅可以方便地同步和备份数据,还实现了不同操作系统的互操作性,体现了Linux服务器的灵活性和实用性。

    linux 下镜像地址配置问题(centos8)

    本文将详细介绍 CentOS 8 下镜像地址配置问题的解决方法。 问题描述 在 CentOS 8 中,镜像地址配置问题主要体现在两个方面:一是镜像地址找不到,二是镜像报错。镜像地址找不到问题是指在配置镜像时,系统无法找到...

    Linux阿里云镜像repo.zip

    在Linux系统中,阿里云镜像是一个非常重要的资源,它为用户提供了一种便捷的方式来获取和安装软件包。本文将深入探讨“Linux阿里云镜像repo”及其配置命令,旨在帮助用户更好地理解和使用这一服务。 首先,理解...

    Linux操作系统下巧做硬盘分区镜像

    总结来说,利用Linux下的Mirrordir工具创建硬盘分区镜像是保护数据安全的重要手段。了解Linux的硬盘分区规则,正确选择源分区和目标分区,以及合理安排备份时间,都是成功实施这一策略的关键。通过这种方式,用户...

    使用再生龙制作linux系统镜像

    此外,在制作镜像之前最好先备份重要数据,以防意外情况导致的数据丢失。 再生龙是一款功能强大的开源磁盘备份与恢复工具,不仅适用于Linux系统,也支持Windows等其他操作系统。其操作简单直观,是系统管理员必备的...

    linux kylin操作系统 麒麟操作系统 系统安装 镜像制作 环境备份

    在Windows环境下,你可以使用UltraISO或其他类似的软件,将Linux Kylin的ISO镜像文件写入到U盘中,这样就制成了一个用于安装的启动盘。确保U盘已插入,打开软件,加载ISO镜像,然后按照软件提示完成制作。 接下来是...

    Ubuntu Linux镜像U盘写入工具

    "Ubuntu Linux镜像U盘写入工具"正是为了解决这一需求而设计的,它能够帮助用户将Ubuntu的ISO镜像文件高效且无误地写入到U盘中,以便于制作可启动的Ubuntu安装盘。 Ubuntu安装光盘镜像文件是Ubuntu发行版的完整复制...

Global site tag (gtag.js) - Google Analytics