linux主从实时同步

linux主从同步,目前广泛采用的方案是使用rsync+inotify的方式来实现文件的触发更新。原理是采用inotify来对文件进行监控,当监控到文件有文件发生改变的时候,就会调用rsync实现触发式实时同步。我采用的是金山的一个居于inotify+rsync进行二次开发实现文件同步的小工具sersync,能够很方便的实现文件触发式同步,所以本文采用的rsync+sersync.

下面的对于inotify的简介都引自 http://blog.chinaunix.net/uid-20639775-id-3011124.html

  • inotify简介

Inotify 是基于inode级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能,内核要求2.6.13以上,inotify能监控非常多的文件系统事件,通过监控这些事件来监控文件是否发生变更,然后通过rsync来更新发生变更的文件,Inotify 可以监视的文件系统事件包括:

·         IN_ACCESS,即文件被访问

·         IN_MODIFY,文件被 write

·         IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等

·         IN_CLOSE_WRITE,可写文件被 close

·         IN_CLOSE_NOWRITE,不可写文件被 close

·         IN_OPEN,文件被 open

·         IN_MOVED_FROM,文件被移走,如 mv

·         IN_MOVED_TO,文件被移来,如 mv、cp

·         IN_CREATE,创建新文件

·         IN_DELETE,文件被删除,如 rm

·         IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己

·         IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己

·         IN_UNMOUNT,宿主文件系统被 umount

·         IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

·         IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)

备注:上面的文件也包括目录。

  • Rsync简介

rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。

rsync 包括如下的一些特性:

  • 能更新整个目录和树和文件系统;
  • 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
  • 对于安装来说,无任何特殊权限要求;
  • 对于多个文件来说,内部流水线减少文件等待的延时;
  • 能用rsh、ssh 或直接端口做为传输入端口;
  • 支持匿名rsync 同步文件,是理想的镜像工具;
  • sersync简介

sersync利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步。由金山的周洋开发完成,是目前使用较多的文件同步工具之一。该工具和其他的工具相比有如下优点:

  • sersync是使用c++编写,由于只同步发生更改的文件,因此比其他同步工具更节约时间、带宽;
  • 安装方便、配置简单;
  • 使用多线程进行同步,能够保证多个服务器实时保持同步状态;
  • 自带出错处理机制,通过失败队列对出错的文件重新出错,如果仍旧失败,则每10个小时对同步失败的文件重新同步;
  • 自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次;
  • 自带socket与http协议扩展,你可以方便的进行二次开发;
  • 实现文件同步

环境:主机Aip:  42.62.25.34   从机Bip:42.62.25.198

主机目录: /opt/tongbu     从机目录:/backup/bookfm

要求:实时将文件从主机A的目录,同步到从机B目录

1.安装rsync

 yum -y install rsync

主机和从机都要安装rsync

2.配置从机B的配置文件

如果是上述yum安装的话,那么默认安装目录是/usr/bin/rsync,但是默认的配置文件是不存在的,需要新建,一般新建目录/etc/rsyncd 用于存放配置文件

mkdir -p  /etc/rsyncd

建立配置文件  rsyncd.conf   和   rsyncd.secret

touch  rsyncd.conf

touch  rsyncd.secret


rsyncd.conf

uid = root
gid = root
port = 873       <!--端口号-->
max connections = 20000
use chroot = yes
timeout = 200
log file = /var/log/rsyncd.log    <!--打印的日志文件-->
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log format = %t %a %m %f %b
auth users = root
secrets file = /etc/rsyncd/rsyncd.secret

[tongbu]                  <!--注意需要指定模块名称-->
path = /backup/bookfm     <!--同步文件存在于从机的位置-->
comment = "test directory file" 
read only = no
ignore errors = yes
hosts allow = 42.62.25.34    <!--主机的ip-->
auth users=vbuapp            <!--允许的用户名称-->
hosts deny = *

[tongbu1]                    <!--需要实现多主一从的同步时,再添加一个模块即可-->
path = /backup/bookfm1
comment = "test directory file"
read only = no
ignore errors = yes
hosts allow = 42.62.25.47
auth users=vbuapp
hosts deny = *

上面即为rsyncd.cnf的内容,其中允许的用户名称,即与密码文件 rsyncd.secret有关

 rsyncd.secret

  

vbuapp:123456

内容很简单 ,  用户:密码即可

3.对从机密码文件进行授权,启动

chmod 600 rsyncd.secret    一定要授权

启动从机

/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

查看启动状态

[[email protected] rsyncd]# netstat -netlp|grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      0          90613866   651/rsync

(可以看到873端口已经启动,至此从机配置完毕,下面是主机配置)

4.主机安装sersync

此前,主机一定要先安装rsync,sersync与rsync的关系就像eclipse和jdk一样。

网盘地址:http://pan.baidu.com/s/1dDD1ibn

将sersync安装在/user/local文件夹中

mkdir /usr/local/sersync

cd    /usr/local/sersync

tar -zxvf  sersync_64bit_binary_stable_final.tar.gz

解压后,将看到文件夹GNU-Linux-x86,其中有confxml.xml 和rsyncd.secrets,到此,sersync安装完毕,下面开始配置。

5.配置主机A的配置文件

confxml.xml  

<head version="2.5">
    <host hostip="localhost" port="8008"></host>   <!--端口号-->
    <debug start="false"/>
    <fileSystem xfs="false"/>
    <filter start="false">
        <exclude expression="(.*)\.svn"></exclude>
        <exclude expression="(.*)\.gz"></exclude>
        <exclude expression="^info/*"></exclude>
        <exclude expression="^static/*"></exclude>
    </filter>
    <inotify>
        <delete start="true"/>                <!--需要监控主机的哪些操作-->
        <createFolder start="true"/>
        <createFile start="false"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="true"/>
        <modify start="true"/>
    </inotify>

    <sersync>
        <localpath watch="/opt/tongbu">          <!--主机需要同步的文件夹-->
            <remote ip="106.3.37.197" name="tongbu"/>   <!--从机ip,模块名称-->
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            <commonParams params="-artuz"/>
            <auth start="true" users="vbuapp" passwordfile="/usr/local/sersync/GNU-Linux-x86/rsyncd.secrets"/>                   <!--从机中允许的用户,以及主机中配置的密码文件-->
            <userDefinedPort start="false" port="873"/><!-- port=874 -->
            <timeout start="false" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
       
       <!-- 错误日志文件    每隔60分钟全部同步一次-->
       <failLog path="/var/rsync/rsync_error.log" timeToExecute="60"/><!--default every 60mins execute once-->

 <crontab start="false" schedule="600"><!--600mins-->
            <crontabfilter start="false">
                <exclude expression="*.php"></exclude>
                <exclude expression="info/*"></exclude>
            </crontabfilter>
        </crontab>
        <plugin start="false" name="command"/>
    </sersync>

    <plugin name="command">
        <param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->
        <filter start="false">
            <include expression="(.*)\.php"/>
            <include expression="(.*)\.sh"/>
        </filter>
    </plugin>

    <plugin name="socket">
        <localpath watch="/opt/tongbu">
            <deshost ip="192.168.138.20" port="8009"/>
        </localpath>
    </plugin>
    <plugin name="refreshCDN">
        <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
            <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
            <sendurl base="http://pic.xoyo.com/cms"/>
            <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
        </localpath>
    </plugin>
</head>

每次需要修改的部分都已经注释标出,当然也可以直接拷贝上面的内容进行修改,亲测有用。

上面注释中,指出了相应的密码文件,因此新建密码文件

touch rsyncd.secrets

rsyncd.secrets

123456   <!-- 只需要密码-->

配置完之后,对密码文件进行授权

chmod  600  rsyncd.secrets

6.测试从机rsync是否能联通

mkdir /usr/local/sersync/GNU-Linux-x86/test

cd /usr/local/sersync/GNU-Linux-x86/test

rsync -av [email protected]::emlfile . --password-file=../rsyncd.secrets

用户名   从机ip       模块名称                      主机密码文件位置

7.启动主机

/usr/local/sersync/GNU-Linux-x86/sersync2 -d -r -o /usr/local/sersync/GNU-Linux-x86/confxml.xml

主机目录/opt/tongbu中添加文件,发现已经能够实时同步到从机/backup/bookfm

如果主机中有多个文件夹需要配置,则copy多个confxml.xml, 如confxml1.xml,修改相关配置,记得要修改端口号,再启动该守护进程,

/usr/local/sersync/GNU-Linux-x86/sersync2 -d -r -o /usr/local/sersync/GNU-Linux-x86/confxml1.xml

netstat -nelp|grep rsync   可以看到有两个不同端口号的rsync进程。

时间: 2024-10-12 20:27:26

linux主从实时同步的相关文章

linux rsync实时同步

rsync同步 同步与复制的差异:复制:完全拷贝源到目标同步:增量拷贝,只传输变化过的数据 同步操作:remote sync 远程同步支持本地复制,或与其他ssh,rsync主机同步.官方网站:http://rsync.samba.org/ 命令用法rsync [选项] 源目录 目标目录常用选项:-a:归档模式,相当于-rlptgiD-v:显示同步过程详细信息 -z:传输过程中启用压缩 -r:递归,包括目录/子目录及所有文件-l:保留符号链接文件-p,-t:保留文件的权限,时间标记-o,-g:保

linux文件实时同步

参考博客:https://www.cnblogs.com/MacoLee/p/5633650.html 一.文件同步很简单 服务端:被动的接收传输过来的数据 客户端:主动提供数据给服务端 安装思路:服务端和客户端都需要安装rsync软件.因为我这里理解的客户端是提供数据给服务端,所以客户端需要实时监测文件的变动,这里的客户端需要安装inotify软件. 安装演示思路:这里按照常规的思路.在服务端安装完rsync软件后,编辑相关的配置文件,并启动rsync.在客户端安装完rsync软件后,不做任何

linux下两台服务器文件实时同步方案设计和实现

转:http://blog.csdn.net/5iasp/article/details/13630927 假设有如下需求: 假设两个服务器: 192.168.0.1 源服务器  有目录 /opt/test/ 192.168.0.2 目标服务器  有目录 /opt/bak/test/ 实现的目的就是保持这两个服务器某个文件目录保持实时同步 实现方式: 通过rsync+inotify-tools结合来实现 需要安装软件: 1.  rsync 同步软件 在 源服务器 和 目标服务器 都需要安装 源服

linux 实时同步inotify

#实时同步inotify 1.inotify简介inotify是一种强大的,细腻度的,异步的文件系统事件监控机制,linux内核从2.6.13起,加入了inotify支持,通过INOTIFY可以监控文件系统中添加.删除.修改.移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tloos就是实施这样监控的软件. 2.inotify实施检查rsync daemon服务是否服务正常,可以推送数据实施同步ps -ef |grep rsync|grep

Linux下Rsync+Inotify-tools实现数据实时同步

说明: 一.先安装好rsync的服务端和客户端: http://douya.blog.51cto.com/6173221/1573968 二.安装,使用inotify-tools,实时同步 1.查看服务器内核是否支持inotify ll /proc/sys/fs/inotify   #列出文件目录,出现下面的内容,说明服务器内核支持inotify -rw-r--r-- 1 root root 0 Mar  7 02:17 max_queued_events -rw-r--r-- 1 root r

Linux服务器集群架构部署搭建(三)NFS文件系统、SSH、批量分发管理、实时同步(2)

命运是大海,当你能够畅游时,你就要纵情游向你的所爱,因为你不知道狂流什么会到来,卷走一切希望与梦想. 作者:燁未央_Estelle声明:测试学习,不足之处,欢迎指正. 第四章 部署配置inotfiy+rsync实时同步 4.1 实时同步inotfiy+rsync的操作步骤 ①备份服务器[email protected]运行rsync进程作为rsync的服务端.NFS作为rsync的客户端. ②在备份服务器安装并正常启动rsync进程服务.并设置修改配置文件.实现远程拉取.推送备份. ③在客户端N

Linux下Rsync+sersync实现数据实时同步

inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个

linux运维、架构之路-实时同步方案

1.inotify+rsync实时同步 1.介绍         inotify-tools是一种强大的.细粒度的.异步的文件系统事件监控机制,可以用来监控文件系统的事件.inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他.inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数. 2.实现原理 3.根据原理进行部署 ①查看系统是否支持inotify [[em

Linux下Rsync+Inotify-tools实现数据实时同步-(转载)

说明: 操作系统:CentOS 5.X 源服务器:192.168.21.129 目标服务器:192.168.21.127,192.168.21.128 目的:把源服务器上/home/www.osyunwei.com目录实时同步到目标服务器的/home/www.osyunwei.com下 具体操作: 第一部分:分别在两台目标服务器192.168.21.127,192.168.21.128上操作 一.分别在两台在目标服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/