rsync+lsyncd实现(本地以及远程)文件实时同步

lsyncd基于lua语言开发,整合了rsync和notify 实现文件的实时同步
系统环境
 cat /etc/issue
CentOS release 6.6 (Final)
 uname -sr
Linux 2.6.32-504.el6.x86_64
服务器规划
rsync服务器:                   192.168.10.241
rsync + lsyncd服务器 :         192.168.10.231
一.配置rsync服务器
1.配置xinetd来管理rsync,并编辑配置文件
 yum install xinetd -y
 vim /etc/xinetd.d/rsync
------------------------------------------------------------------------------------------------------------------------------
service rsync
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
------------------------------------------------------------------------------------------------------------------------------
 rpm -qa | grep rsync
rsync-3.0.6-6.el5_11
2.为rsync提供配置文件
全局选项 
strict modes =yes 
 是否检查口令文件的权限 
port = 873
 默认端口873 
log file = /var/log/rsyncd.log
日志记录文件 
pid file = /var/run/rsyncd.pid
 运行进程的ID写到哪里 
[home]
path = /opt/
 这里是认证的模块名,在client端需要指定 
max connections = 0
 客户端最大连接数,默认0(没限制) 
uid = root
 指定该模块传输文件时守护进程应该具有的uid 
gid = root
 指定该模块传输文件时守护进程应该具有的gid 
ignore errors
 可以忽略一些无关的IO错误 
read only = no
 no客户端可上传文件,yes只读 
write only = no
 no客户端可下载文件,yes不能下载 
hosts allow = * 
 充许任何主机连接 
hosts deny = 10.5.3.1
 禁止指定的主机连接 
auth users = root
 认证的用户名,如果没有这行,则表明是匿名 
secrets file = /etc/backserver.pas
 指定认证口令文件位置 
------------------------------------------------------------------------------------------------------------------------------
3.添加认证文件,并将权限修改为600# echo "root:123456" > /etc/backserver.pas# chmod 600  /etc/backserver.pas
 ll /etc/backserver.pas
-rw------- 1 root root 11 Jul 27 15:22 /etc/backserver.pas 
 4.启动rsync服务端# /etc/init.d/xinetd start
Starting xinetd:                                           [  OK  ]
[[email protected] ~]# netstat -ntl | grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN
二.客户端配置lsyncd,基于lsyncd实现实时同步(延迟比较小)
1.1安装lsyncd
 yum search lsyncd (源服务器安装) 如果找不到这个包,只能说明你没有安装centos的YUM扩展包,必须先安装扩展包
 rpm -ivh 
完成扩展包的安装之后,就可以安装lsyncd了
 yum install lsyncd -y
1.2编译安装lsyncd
 yum install lua lua-devel -y
 wget -c 
 tar xf release-2.1.5
 cd lsyncd-2.1.5
 ./configure
 make && make install
2.提启动脚本
 vim /etc/init.d/lsyncd
------------------------------------------------------------------------------------------------------------------------------
#!/bin/bash
#
# chkconfig: - 85 15
# description: Lightweight inotify based sync daemon
. /etc/init.d/functions
. /etc/sysconfig/network
[ "$NETWORKING" = "no" ] && exit 0
LSYNCD_OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf"
RETVAL=0
prog="lsyncd"
thelock=/var/lock/subsys/lsyncd
start() {
    [ -f /etc/lsyncd.conf ] || exit 6
        echo -n $"Starting $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                daemon /usr/local/bin/lsyncd $LSYNCD_OPTIONS
                RETVAL=$?
                [ $RETVAL -eq 0 ] && touch $thelock
        fi;
        echo
        return $RETVAL
}
stop() {
        echo -n $"Stopping $prog: "
        if [ $UID -ne 0 ]; then
                RETVAL=1
                failure
        else
                killproc lsyncd
                RETVAL=$?
                [ $RETVAL -eq 0 ] && rm -f $thelock
        fi;
        echo
        return $RETVAL
}
reload(){
        echo -n $"Reloading $prog: "
        killproc lsyncd -HUP
        RETVAL=$?
        echo
        return $RETVAL
}
restart(){
        stop
        start
}
condrestart(){
    [ -e $thelock ] && restart
    return 0
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  condrestart)
        condrestart
        ;;
  status)
        status lsyncd
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
        RETVAL=1
esac
exit $RETVAL
------------------------------------------------------------------------------------------------------------------------------
3.编辑rsync客户端,提供添加密码文件,并将权限修改为600
 echo "123456" > /etc/backserver.pas
 chmod 600 /etc/backserver.pas
 ll /etc/backserver.pas
-rw------- 1 root root 7 Jul 27 15:34 /etc/backserver.pas
4.编辑lsyncd配置文件
 vim /etc/lsyncd.conf
------------------------------------------------------------------------------------------------------------------------------
settings {
   logfile    = "/tmp/lsyncd.log",
   statusFile = "/tmp/lsyncd.status",
   statusInterval = 5,
   nodaemon = true,
 }
 
本地同步
1.1 本地目录同步:direct:cp/rm/mv。 适用:500+万文件,变动不大
sync {
    default.direct,
    source    = "/opt/src",
    target    = "/opt/dest",
    delay = 1,
    maxProcesses = 1,
  }
1.2 本地目录同步rsync模式:rsync
sync{
    default.rsync,
    source = "/opt/",
    target = "/home/mogilefs/",
    delete = true,
    exclude={ "test" },
    rsync = {
        compress = true,
        verbose = true,
        archive  = true,
    }
}
远程同步
2.1 远程同步: rsync模式 + rsyncd daemon
sync {
    default.rsync,
    source    = "/opt/back3/",
    target    = "[email protected]::home",
    delete = true,
    exclude = { ".tmp" },
    delay = 1,
    rsync = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose  = true,
        password_file = "/etc/backserver.pas",
        _extra    = {"--bwlimit=200"},
        }
    }
 2.2 远程目录同步:rsync模式 + ssh shell
sync{
    default.rsync,
    source = "/opt/back/",
    target = "[email protected]:/opt",
    delete = true,
    -- exclude={ "test" },
    rsync = {
        binary = "/usr/bin/rsync",
        compress = true,
        verbose = true,
        archive = true,
        rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
    }
}
 3 远程目录同步:rsync模式 + rsyncssh,效果与上面相同
sync {
    default.rsyncssh,
    source    = "/opt/back2/",
    host      = "192.168.10.241",
    targetdir = "/opt/",
--  excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
    maxDelays = 1,
    delay = 1,
    rsync = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        _extra = {"--bwlimit=2000"},
        },
    ssh  = {
        port  =  22
        }
    }
------------------------------------------------------------------------------------------------------------------------------
5.免密钥登陆(基于ssh同步需要在远端被同步的服务器上开启ssh无密码登录)
 ssh-copy-id -i  ~/.ssh/id_rsa.pub [email protected]
 
6.启动rlsyncd服务
 /etc/init.d/lsyncd start
7.lsyncd的日志文件以及状态文件
 tailf /tmp/lsyncd.log 
Tue Jul 28 12:12:15 2015 Normal: recursive startup rsync: /opt/back3/ -> [email protected]::home/
Tue Jul 28 12:12:19 2015 Normal: Startup of "/opt/back3/" finished.
Tue Jul 28 12:13:07 2015 Normal: recursive startup rsync: /opt/back3/ -> [email protected]::home/
Tue Jul 28 12:13:12 2015 Error: Temporary or permanent failure on startup of "/opt/back3/". Terminating since "insist" is not set.
Tue Jul 28 12:13:14 2015 Normal: recursive startup rsync: /opt/back3/ -> [email protected]::home/
Tue Jul 28 12:13:18 2015 Error: Temporary or permanent failure on startup of "/opt/back3/". Terminating since "insist" is not set.
Tue Jul 28 12:13:35 2015 Normal: recursive startup rsync: /opt/back3/ -> [email protected]::home/
Tue Jul 28 12:13:38 2015 Normal: Startup of "/opt/back3/" finished.
Tue Jul 28 12:15:50 2015 Normal: recursive startup rsync: /opt/back3/ -> [email protected]::home/
Tue Jul 28 12:15:53 2015 Normal: Startup of "/opt/back3/" finished.
tailf /tmp/lsyncd.status
Sync1 source=/opt/back3/
There are 1 delays
active Init 
Excluding:
  nothing.
Inotify watching 1 directories
  1: /opt/back3/

lsyncd.conf 主要配置选项说明:

settings配置段:
    全局设置,--开头表示注释,下面是几个常用选项说明:
    logfile 定义日志文件
    stausFile 定义状态文件
    nodaemon=true 表示不启用守护模式,默认
    statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒
    inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify
    maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程
    maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到

sync配置段:
    定义同步参数,可以继续使用maxDelays来重写settings的全局变量。
    一般第一个参数指定lsyncd以什么模式运行:rsync、rsyncssh、direct三种模式:
    default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;
    default.direct :本地目录间同步,使用cp、rm等命令完成差异文件备份;
    default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证
    source 同步的源目录,使用绝对路径。
    target 定义目的地址.
    三种模式的示例会在后面给出。
    init 这是一个优化选项,当init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是true
     delay 累计事件,等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件)
    excludeFrom 排除选项,后面指定排除的列表文件,如果是简单的排除,可以使用exclude = {"FILENAME"}。
    这里的排除规则写法与原生rsync有点不同,更为简单:
    监控路径里的任何部分匹配到一个文本,都会被排除,例如/var/web/test可以匹配规则web
    如果规则以斜线/开头,则从头开始要匹配全部
    如果规则以/结尾,则要匹配监控路径的末尾
    ?匹配任何字符,但不包括/
    *匹配0或多个字符,但不包括/
    **匹配0或多个字符,可以是/
    delete 为了保持target与souce完全同步,Lsyncd默认会delete = true来允许同步删除。它除了false,还有startup、running值.
    rsync:(提示一下,delete和exclude本来都是rsync的选项,上面是配置在sync中的,我想这样做的原因是为了减少rsync的开销)
    bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)
    compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
    perms 默认保留文件权限。

其它rsync的选项
其它还有rsyncssh模式独有的配置项,如host、targetdir、rsync_path、password_file。
lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响。

使用命令加载配置文件,启动守护进程,自动同步目录操作。
lsyncd -log Exec /usr/local/lsyncd-2.1.5/etc/lsyncd.conf

注意:
1.lsyncd Version: 2.1.4版本以前 存在bug,不支持rsync的 password_file参数, lsyncd Version: 2.1.5已经修复,并且允许rsync客户端具有写权限。
2.rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。
时间: 2024-11-05 13:03:54

rsync+lsyncd实现(本地以及远程)文件实时同步的相关文章

rsync + inotify 打造多服务器间文件实时同步

在上篇文章ssh无密码登陆服务器的基础之上,可以利用rsync + Inotify 在多服务器间实现文件自动同步. 如下测试机基于三台服务器做的,内网IP分别如下: 172.16.3.91    (主机) 172.16.3.92 (备份机1) 172.16.3.89 (备份机2) 现在想对主机上的/opt/sites/yutian_project目录下相关文件的任何操作同步到2台备份机上. 1.安装rsync 在三台机器上分别检查是否安装了rsync [[email protected] ~]#

rsync+inotify 实现服务器之间目录文件实时同步(转)

软件简介: 1.rsync 与传统的 cp. tar 备份方式相比,rsync 具有安全性高.备份迅速.支持增量备份等优点,通过 rsync 可 以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定 期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync 在高端业务系统中 也逐渐暴露出了很多不足,首先,rsync 同步数据时,需要扫描所有文件后进行比对,进行差量传输.如 果文件数量达到了百万甚至千万量级,扫描所有

rsync + inotify 打造多server间文件实时同步

在上篇文章ssh无password登陆server的基础之上.能够利用rsync + Inotify 在多server间实现文件自己主动同步. 例如以下測试机基于三台server做的.内网IP分别例如以下: 172.16.3.91    (主机) 172.16.3.92 (备份机1) 172.16.3.89 (备份机2) 如今想对主机上的/opt/sites/yutian_project文件夹下相关文件的不论什么操作同步到2台备份机上. 1.安装rsync 在三台机器上分别检查是否安装了rsyn

rsync+inotify-tools文件实时同步

rsync+inotify-tools文件实时同步案例 全量备份 Linux下Rsync+sersync实现数据实时同步完成. 增量备份 纯粹的使用rsync做单向同步时,rsync的守护进程是运行在文件推送的服务器上,而接收的服务器是运行rsync客户端.使用sersync做文件实时同步刚好相反,用于接收文件的服务器运行rsync守护进程.

数据文件实时同步(rsync + sersync2)

因近期项目需求,需要同步云端服务器的数据给**方做大数据分析. 思路: 起初只要数据同步,准备开放数据采集接口.但实时性较差,会有延迟. 故而寻觅各种解决方案,最终确定使用 rsync 进行文件同步,otter(阿里的开源工具) 进行数据库同步 最终使用成功,同步效果显著! 本文先只介绍 rsync 的文件同步,otter 会在其他文章分享 一.简介 网上简介一堆,不过都写的很官方,下面的介绍是我自己使用后的感受. sersync 用于监控目录后调用 rsync 同步命令,进行文件传输! 可以监

Rsync+inotify实现文件实时同步

数据备份.文件备份是运维.DBA等岗位最熟悉不过的话题,这里不介绍数据库的备份,简单介绍一下文件同步工具,这样的工具有很多,Windows环境下有Goodsync.FreeFileSync等,Linux下rsync.unison等,常用的实时同步,是几种工具的组合,经过组合的工具达到文件实时同步的效果. 一.常用实时同步方案 1.NFS网络文件系统 该方案是分布式架构中,解决不同节点对同一资源访问的问题,搭建NFS服务器,将其挂载在不同的节点,每个节点将公用的数据存储在NFS服务器上,实现文件的

rsync+inotify 实现服务器文件实时同步

rsync+inotify 实现服务器文件实时同步 操作系统:CentOS 6.X 源服务器:192.168.80.132 目标服务器:192.168.80.128 目的:把源服务器上/data/app目录实时同步到目标服务器的/data/app下 具体操作: 第一部分:在目标服务器192.168.80.128上操作 一.在目标服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #SELINUXTYPE=targ

linux下rsync+inotify实现服务器之间文件实时同步

先介绍一下rsync与inotify. 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等.随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所

sersync2+rsync目录文件实时同步备份

说明: 192.168.1.2(sersync+rsync)---------------FTP 192.168.1.3(rsync)--------------------------backup 实验目的: 实时自动同步:192.168.1.2 ------->192.168.1.3到目录:/data/ftpdata ; 764  viconfxml.xml 765  ./GNU-Linux-x86/sersync2 -d -r confxml.xml 767  ./GNU-Linux-x8

Centos 6.5 rsync+inotify 两台服务器文件实时同步

rsync和inotify是什么我这里就不在介绍了,有专门的文章介绍这两个工具. 1.两台服务器IP地址分别为: 源服务器:192.168.1.2 目标服务器:192.168.1.3 @todo:从源服务器(192.168.1.2)的/www/目录下的所有的文件实时同步到目标服务器(192.168.1.3)的/www_bak/目录下 源服务器下需要安装rsync和inotify,源服务器做为server端,实时的向目标服务器client端发送数据 2.安装 rsync 一般centos6.5下都