文档章节

用lsyncd和rsyncd实现无ssh支持的文件实时同步

swingcoder
 swingcoder
发布于 2015/07/29 22:20
字数 1268
阅读 748
收藏 22

文件存储与同步的基本讨论

网站发展到一定阶段,有时需要将各服务器上传的文件进行集中,这里讨论如果集中的问题,至于如果分散负载均衡、CDN加速、多主机、多域名等blablabla,概不讨论。

集中共享的方案(环境以CentOS 6.5为例)通常的作法是文件同步、共享硬盘空间、硬件堆叠和分布式文件存储四种。

  1. 文件同步是用工具定时或自动将分散的文件同步到一个集中的存储区域,如cron配合ftp、ssh、rsync等实现定时同步;

  2. 共享空间的做法是用文件存储协议实现挂载和管理,如mount、samba、NFS;

  3. 硬件堆叠是采用大磁盘空间实现,如阵列;

  4. 最后一种是集群和分布式文件系统,如taobao文件系统 tfs

第2种不太稳定,第3种成本高,第4种实施复杂,最简单实用的是第1种。

第1种方案传统的做法是用rsync命令,结合ssh证书授权免帐号登录来实现同步,但这种做法有几个负面影响:

  • 需要添加本地帐号

  • 不是实时同步

  • 配置稍显啰嗦

好了,我们要实现的功能的实时监控,实时同步,管理简单,维护方便,这里介绍lsyncd和rsyncd两个命令实现的文件集中同步管理。

lsyncd负责监控文件的变化,发起文件推送;rsyncd负责接收同步指令,进行身份认证及写文件到本地。

lsyncd和rsyncd的配置及管理

接收端rsyncd的配置

一般linux服务器均安装有rsync命令,没有的就安装一个。

yum install rsync

配置成daemon运行方式

 vi /etc/rsyncd.conf
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[img]
    path = 换成本地写入文件夹绝对路径
    comment = special offer image files
    uid = root
    gid = root
    read only = no
    list = yes
    auth users = rsyncclient
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.100.0/255.255.255.0 192.168.200.234

注意:[img]为虚拟目录名称,在发起端配置中要用到;hosts allow换成发在发端的IP地址;auth users为认证的用户名,密码存在/etc/rsyncd.secrets文件里。uid和gid此处写的是root注意换成你自己的真实用户和组,如,是网站上传的文件夹,需要换成apache或nobody,否则文件上传会失败。

vi /etc/rsyncd.secrets
rsyncclient:password

注意:此密码文件与发在发端的密码文件稍有不同,多了一个用户名。

启动rsyncd(假设当前在root环境):

/usr/bin/rsync --daemon

把这个命令加到 /etc/rc.local作自动启动用。

查看服务Log是否有错误

tail -f /var/log/rsyncd.log

 

发起端lsyncd的配置

安装

yum install lsyncd

如果提示没有找到lsyncd你需要下载epel.repo (关于阿里云镜像的配置)到/etc/yum.repos.d/目录下再安装即可。

vi /etc/lsyncd.conf

将下述代码粘贴到此文件

settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd-status.log",
    statusInterval = 10
}
--------------------------------
-- sync files to product server
-------------------------------
sync {
    default.rsync,
    source="换成你的要监控并同步的文件夹绝对路径",
    target="rsync://rsyncclient@[换成接收端IP]:/img",
    delete = false,-- Doesn't delete files on the remote host eventho they're deleted at the source. This might be beneficial for some not for others
    delay = 5, -- We want to delay the syncing for 5 seconds so we queue up the events
    maxProcesses = 4, -- We only want to use a maximum of 4 rsync processes at same time
    rsync = {
        password_file = "/etc/rsyncd.secrets_master",
        compress = true,
        acls = true,
        verbose = true,
        owner = true,
        group = true,
        perms = true
    }
}

重要:注意上面的 delete = false 参数,如果不要删除接收端的文件,请设置为 false,否则将自动删除发起端没有,但在接收端有的文件!!请慎重选择,一般设成false。

上面配置中假设同步帐号叫 rsyncclient,密码文件存放在 /etc/rsyncd.secret_master,注意:这里的帐号不是本地帐号,只是rsyncd的虚拟帐号。

接收端虚拟路径叫 img,具体定义参考接收端的配置,它只是一个虚拟目录,实际指向在配置文件中。

vi /etc/rsyncd.secrets_master
password

注意:此文件一行只有一个明文密码。

最后,启动lsyncd服务

service lsyncd start

查看log看是否正常启动

tail -f /var/log/lsyncd/lsyncd.log

如果有这行表明正常启动并配置成功了。

Normal: Finished a list after exitcode: 0

将lsyncd设成自动启动

chkconfig --level 3 lsyncd on

 

一切顺利的话,发起端已经监控了文件的变化,并在5秒延时后自动推送到接收端,您可以自己测试查看实际效果。再次提醒,请先在测试环境演练多遍,观察至少一周时间后再配置到生产环境!

‍总结‍

此方案的优点是实时同步,无须ssh协议支持,不需要添加本地帐号,配置简单,布署灵活。

 

<作者:朱淦 350050183@qq.com>‍

 

© 著作权归作者所有

swingcoder
粉丝 33
博文 324
码字总数 73664
作品 0
广州
技术主管
私信 提问
lsyncd实时同步搭建指南——取代rsync+inotify

lsyncd实时同步建指南——取代rsync+inotify 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方,原先使用的是inotify + rsync,但随着文件数量的增大 ...

无心乱舞
2015/12/30
134
0
代码调试利器lsyncd

lsyncd实时同步搭建指南——取代rsync+inotify 1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是,但随着文件数量的增大到100W+,...

hiubuntu
2017/03/10
0
0
Rsync实现主服务器热备份

Rsync全称是remote synchronize,也就是远程同步工具。官网介绍,“rsync is an open source utility that provides fast incremental file transfer. (rsync是一款提供快速增量文件传输的开...

shiw019
2016/05/22
191
0
lsyncd实时同步搭建指南——取代rsync+inotify

1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是,但随着文件数量的增大到100W+,目录下的文件列表就达20M,在网络状况不佳或者限...

as007012012
2017/03/01
0
0
lsyncd+rsync 实现实时自动同步

本示例所需要的软件是:lsyncd与rsync 一般rsync软件是通过crond这支后台进行(计划任务)来实现自动同步数据,如今已有更好的开源软件来代替使用crond了,那就是 lsyncd( Live Syncing (Mi...

鉴客
2013/12/16
7.2K
9

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
1
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
2
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部