在运维的工作中经常会遇到有集中式存储的散文件需要进行备份或者(本文不讨论分布式文件存储OSS、ceph等)。

一. 文件数量少、更新不频繁 解决方案:rsync+crontab或者inotify+rsync 优点:rsync有windows版本cwRsync.rar

  1. linux 安装 ①服务端安装yum install -y rsync
  1. vim /etc/rsyncd.conf加入以下内容 [global] uid = root gid = root use chroot = no max connections = 10 list = yes pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log hosts allow = 192.168.217.130 //白名单

[data] path = /usr/local/src //开放目录 ignore errors read only = yes auth users = vic.xiang //开放用户 secrets file = /etc/sery.pass //账号密码配置文件

  1. vim /etc/sery.pass加入账号及密码 vic.xiang:123456 给sery.pass赋权限 chmod 600 /etc/sery.pass

  2. 启动服务端rsync rsync --daemon --config=/etc/rsyncd.conf

  3. 防火墙设置,开放端口873 vim /etc/sysconfig/iptables加入下面行 -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

② 客户端(需要同步的机器)配置

  1. vim /etc/sery_client.pass配置本地密码 123456 给sery_client.pass付权限 chmod 600 /etc/sery_client.pass

  2. 执行命令:rsync -avr -P vic.xiang@192.168.217.128::data /usr/local/src/ --password-file=/etc/sery_client.pass 发现同步成功 配合crontab就可以完成定时同步,文件量小的情况下,同步效率还是很快的。

    1. windows安装,安装包:cwRsync.rar (详细步骤需要好多截图,此处略,可以自行google或者百度) ①安装:记住安装时创建的用户和密码 ②配置文件rsyncd.conf: use chroot = false strict modes = false hosts allow = * log file = rsyncd.log uid = 0 gid = 0 [rsyncdata] #指定模块的头信息
      path = /cygdrive/f/rsyncdata #需要同步数据的目录,这个目录指F盘下的rsyncdata目录
      read only = true #是否为只读
      list = no hosts allow = 10.17.1.200,10.17.1.88,10.17.1.60 #允许访问的主机,多个用逗号分隔
      auth users = rsync #指定认证的用户名
      secrets file = /cygdrive/f/rsyncd.secrets #指定认证用户的密码文件存放路径,这个路径指F盘下的rsyncd.secrets,一会需要新建这个文件 ③其他配置: 给需要同步的目录添加安装rsync时候创建的用户的所有访问权限 ④启动:在服务中找到RsyncServer启动,关闭防火墙。

    二. 大量、海量文件,更新频繁: 当文件数量超过100W的时候,rsync就会很慢,如果更新频繁就不太适合使用rsync进行同步或者备份了。lsyncd可以解决rsync的不足。

    1. 安装lsyncd服务端 yum install lua lua-devel asciidoc cmake rsync tar zxvf lsyncd-2.1.5.tar.gz cd lsyncd-2.1.5/ ./configure --prefix=/usr/local/lsyncd make make install cd /usr/local/lsyncd mkdir {etc,logs}

vim /etc/lsyncd.conf settings { logfile = "/usr/local/lsyncd/logs/lsyncd.log", statusFile = "/usr/local/lsyncd/logs/lsyncd.status", maxDelays = 100, delay = 5, exitcodes = {[0] = "ok", [1] = "again", [2] = "die"}, maxProcesses = 5, statusInterval = 5

} sync { default.rsync, source = "/tmp/src_src", target = "sync_user@192.168.31.130::sync_data", exclude = { ".tmp", ".bak" }, delete = true, rsync = { compress = false, archive = true, verbose = false, timeout = 3600, password_file = "/usr/local/lsyncd/etc/rsync.pass" } }

echo "123456sync" > /usr/local/lsyncd/etc/rsync.pass chown 400 /usr/local/lsyncd/etc/rsync.pass /usr/local/lsyncd/bin/lsyncd /usr/local/lsyncd/etc/lsyncd.conf

  1. 安装客户端 yum install -y rsync rsync --daemon --config=/etc/rsyncd.conf

uid=root gid=root max connections=10 log file=/var/log/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock hosts allow = 10.66.10.197

[sync_data] comment=backup data path=/home/m2mfile/ftp read only=no ignore errors auth users=sync_user secrets file=/etc/rsyncd.passwd

3.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 定义目的地址.对应不同的模式有几种写法: /tmp/dest :本地目录同步,可用于direct和rsync模式 172.29.88.223:/tmp/dest :同步到远程服务器目录,可用于rsync和rsyncssh模式,拼接的命令类似于/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,还有startup、running值,请参考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。 rsync

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

bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出) compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false perms 默认保留文件权限。 其它rsync的选项 其它还有rsyncssh模式独有的配置项,如host、targetdir、rsync_path、password_file,见后文示例。rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。

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