rsync+lsyncd 实现文件实时同步 (自己实践)

本贴最后更新于 2444 天前,其中的信息可能已经事过境迁

参考地址:rsync+lsyncd 实现文件实时同步

参考地址:lsyncd 实时同步搭建指南——取代 rsync+inotify

一、环境

lsyncd 10.211.55.22 rsync 10.211.55.21

二、配置 rsync 服务器

配置 rsync 以 xinetd 方式运行

[root@rsync ~]# yum install rsync -y [root@rsync ~]# yum install xinetd -y #修改/etc/xinetd.d/rsync [root@rsync ~]# vim /etc/xinetd.d/rsync service rsync { disable = no ##将yes改成no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } #启动xinetd服务 [root@rsync ~]# service xinetd start Starting xinetd: [ OK ] #rsync默认的监听端口是873,查看873号端口是否启动 [root@rsync ~]# netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1247/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1324/master tcp 0 0 :::22 :::* LISTEN 1247/sshd tcp 0 0 ::1:25 :::* LISTEN 1324/master tcp 0 0 :::873 :::* LISTEN 1561/xinetd

创建 rsync 服务目录和配置文件

#创建rsync服务目录 [root@rsync ~]# mkdir /etc/rsyncd # 创建配置文件 [root@rsync ~]# touch /etc/rsyncd/rsyncd.conf # 创建密码文件 [root@rsync ~]# touch /etc/rsyncd/rsyncd.secrets #权限修改 [root@rsync ~]# chown root:root /etc/rsyncd/rsyncd.secrets [root@rsync ~]# chmod 600 /etc/rsyncd/rsyncd.secrets #这里的权限设置必须是600

创建用户和密码

[root@rsync ~]# echo "rsync:test" >>/etc/rsyncd/rsyncd.secrets

创建 rsync 配置文件

# GLOBAL OPTIONS uid = root gid = root use chroot = yes #这个参数要设置成yes,如果同步的是软连接文件,同步过来后会多一个前缀,导致软连接不能正常使用 read only = no #我们需要实时同步lsyncd服务器上的资源,这个需要有写权限,或者在模块中赋予写权限 #limit access to private LANs hosts allow=10.211.55.21/255.255.0.0 hosts deny=* max connections = 5 pid file = /var/run/rsyncd.pid secrets file = /etc/rsyncd/rsyncd.secrets #lock file = /var/run/rsync.lock motd file = /etc/rsyncd/rsyncd.motd #This will give you a separate log file log file = /var/log/rsync.log #This will log every file transferred - up to 85,000+ per user, per sync transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 # MODULE OPTIONS [test] path = /home/syncfile list=yes ignore errors auth users = rsync #客户端连接过来使用的用户是rsync comment = welcome to rsync server

编辑 xinetd 的 rsync 配置文件,添加配置文件路径

#添加rsync的配置文件路径 [root@rsync ~]# vim /etc/xinetd.d/rsync service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon --config=/etc/rsyncd/rsyncd.conf #添加配置文件路径 log_on_failure += USERID } #重启xinetd服务 [root@rsync ~]# service xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] [root@rsync ~]# netstat -anpt |grep 873 tcp 0 0 :::873 :::* LISTEN 1586/xinetd #创建数据目录 [root@rsync ~]# mkdir -p /home/syncfile

三、配置 lsyncd 服务器

#安装rsync,lsyncd [root@lsyncd ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [root@lsyncd ~]# sed -i 's@#b@b@g' /etc/yum.repos.d/epel.repo [root@lsyncd ~]# sed -i 's@mirrorlist@#mirrorlist@g' /etc/yum.repos.d/epel.repo [root@lsyncd ~]# yum install rsync lsyncd -y

配置 lsyncd 服务配置文件适用:500+ 万文件,变动不大

注意:这里配置的方案有很多,我是参考上面两个链接的方法:

#lsyncd.conf 配置选项说明:

settings
里面是全局设置,-- 开头表示注释,下面是几个常用选项说明:

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

sync
里面是定义同步参数,可以继续使用 maxDelays 来重写 settings 的全局变量。一般第一个参数指定 lsyncd 以什么模式运行:rsyncrsyncsshdirect 三种模式:

  • default.rsync :本地目录间同步,使用 rsync,也可以达到使用 ssh 形式的远程 rsync 效果,或 daemon 方式连接远程 rsyncd 进程;
    default.direct :本地目录间同步,使用 cprm 等命令完成差异文件备份;
    default.rsyncssh :同步到远程主机目录,rsync 的 ssh 模式,需要使用 key 来认证

  • source 同步的源目录,使用绝对路径。

  • target 定义目的地址.对应不同的模式有几种写法:
    /tmp/dest :本地目录同步,可用于 directrsync 模式
    172.29.88.223:/tmp/dest :同步到远程服务器目录,可用于 rsyncrsyncssh 模式,拼接的命令类似于 /usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是 rsync 的内容了,比如指定 username,免密码同步
    172.29.88.223::module :同步到远程服务器目录,用于 rsync 模式
    三种模式的示例会在后面给出。

  • init 这是一个优化选项,当 init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是 true

  • delay 累计事件,等待 rsync 同步延时时间,默认 15 秒(最大累计到 1000 个不可合并的事件)。也就是 15s 内监控目录下发生的改动,会累积到一次 rsync 同步,避免过于频繁的同步。(可合并的意思是,15s 内两次修改了同一文件,最后只同步最新的文件)

excludeFrom
排除选项,后面指定排除的列表文件,如

excludeFrom = "/etc/lsyncd.exclude"

如果是简单的排除,可以使用

exclude = LIST

这里的排除规则写法与原生 rsync 有点不同,更为简单:

  • 监控路径里的任何部分匹配到一个文本,都会被排除,例如 /bin/foo/bar 可以匹配规则 foo

  • 如果规则以斜线 / 开头,则从头开始要匹配全部

  • 如果规则以 / 结尾,则要匹配监控路径的末尾

  • ? 匹配任何字符,但不包括 /

  • * 匹配 0 或多个字符,但不包括 /

  • ** 匹配 0 或多个字符,可以是 /

  • delete 为了保持 target 与 souce 完全同步,Lsyncd 默认会 delete = true 来允许同步删除。它除了 false,还有 startuprunning 值,请参考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior

rsync
(提示一下,deleteexclude 本来都是 rsync 的选项,上面是配置在 sync 中的,我想这样做的原因是为了减少 rsync 的开销)

  • bwlimit 限速,单位 kb/s,与 rsync 相同(这么重要的选项在文档里竟然没有标出)
  • compress 压缩传输默认为 true。在带宽与 cpu 负载之间权衡,本地目录同步可以考虑把它设为 false
  • perms 默认保留文件权限。
  • 其它 rsync 的选项

其它还有 rsyncssh 模式独有的配置项,如 hosttargetdirrsync_pathpassword_file,见后文示例。rsyncOps={"-avz","--delete"} 这样的写法在 2.1.*版本已经不支持。

lsyncd.conf 可以有多个 sync,各自的 source,各自的 target,各自的模式,互不影响。

lsyncd.conf 其它模式示例:

[root@rsync ~]# cat /etc/rsyncd/rsyncd.conf # GLOBAL OPTIONS uid = root gid = root use chroot = yes #这个参数要设置成yes,如果同步的是软连接文件,同步过来后会多一个前缀,导致软连接不能正常使用 read only = no #我们需要实时同步lsyncd服务器上的资源,这个需要有写权限,或者在模块中赋予写权限 #limit access to private LANs hosts allow=10.211.55.21/255.255.0.0 hosts deny=* max connections = 5 pid file = /var/run/rsyncd.pid secrets file = /etc/rsyncd/rsyncd.secrets #lock file = /var/run/rsync.lock motd file = /etc/rsyncd/rsyncd.motd #This will give you a separate log file log file = /var/log/rsync.log #This will log every file transferred - up to 85,000+ per user, per sync transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 # MODULE OPTIONS [test] path = /home/syncfile list=yes ignore errors auth users = rsync #客户端连接过来使用的用户是rsync comment = welcome to rsync server #添加rsync的配置文件路径 [root@rsync ~]# vim /etc/xinetd.d/rsync service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon --config=/etc/rsyncd/rsyncd.conf #添加配置文件路径 log_on_failure += USERID } #重启xinetd服务 [root@rsync ~]# service xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] [root@rsync ~]# netstat -anpt |grep 873 tcp 0 0 :::873 :::* LISTEN 1586/xinetd #创建数据目录 [root@rsync ~]# mkdir -p /data/test #安装rsync,lsyncd [root@lsyncd ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [root@lsyncd ~]# sed -i 's@#b@b@g' /etc/yum.repos.d/epel.repo [root@lsyncd ~]# sed -i 's@mirrorlist@#mirrorlist@g' /etc/yum.repos.d/epel.repo [root@lsyncd ~]# yum install rsync lsyncd -y settings { logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log", statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 8, } -- I. 本地目录同步,direct:cp/rm/mv。 适用:500+万文件,变动不大 sync { default.direct, source = "/tmp/src", target = "/tmp/dest", delay = 1 maxProcesses = 1 } -- II. 本地目录同步,rsync模式:rsync sync { default.rsync, source = "/tmp/src", target = "/tmp/dest1", excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst", rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, bwlimit = 2000 } } -- III. 远程目录同步,rsync模式 + rsyncd daemon sync { default.rsync, source = "/tmp/src", target = "syncuser@172.29.88.223::module1", delete="running", exclude = { ".*", ".tmp" }, delay = 30, init = false, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, password_file = "/etc/rsyncd.d/rsync.pwd", _extra = {"--bwlimit=200"} } } -- IV. 远程目录同步,rsync模式 + ssh shell sync { default.rsync, source = "/tmp/src", target = "172.29.88.223:/tmp/dest", -- target = "root@172.29.88.223:/remote/dest", -- 上面target,注意如果是普通用户,必须拥有写权限 maxDelays = 5, delay = 30, -- init = true, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, bwlimit = 2000 -- rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no" -- 如果要指定其它端口,请用上面的rsh } } -- V. 远程目录同步,rsync模式 + rsyncssh,效果与上面相同 sync { default.rsyncssh, source = "/tmp/src2", host = "172.29.88.223", targetdir = "/remote/dir", excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst", -- maxDelays = 5, delay = 0, -- init = false, rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true, _extra = {"--bwlimit=2000"}, }, ssh = { port = 1234 } }

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖 • 1 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 649 关注
  • Visio
    1 引用 • 2 回帖 • 2 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 4 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    180 引用 • 408 回帖 • 489 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖 • 2 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 1 关注
  • Follow
    4 引用 • 12 回帖 • 11 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 227 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 786 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 183 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 226 回帖 • 132 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    54 引用 • 41 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 3 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    57 引用 • 25 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    298 引用 • 763 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 35 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 35 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 611 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 642 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 554 关注