基于rsync+inotify实现文件实时同步

rsync英文名remote  synchronization,可使本地和远程两台主机之间的数据快速复制同步镜像 远程备份的功能,rsync在拷贝时候会先比较源数据跟目标数据,不一致才复制,实现增量拷贝

监听于873/tcp
rsync有许多选项:
        -n: 在不确定命令是否能按意愿执行时,务必要事先测试;-n可以完成此功能;
        -v: --verbose,详细输出模式
        -q: --quiet,静默模式 尽可能输出少
        -c: --checksum,开启校验功能,强制对文件传输进行校验
        -r: --recursive,递归复制;
        -a: --archives,归档,保留文件的原有属性
        -p: --perms 保留文件的权限
        -t: --times 保留文件的时间戳
        -l: --links 保留文件的符号链接 
        -g: --group 保留文件的属组
        -o: --owner 保留文件的属主
        -D: --devices 保留设备文件
 
        -e ssh: 表示使用ssh协议作承载
        -z: 对文件压缩后传输
 
        --progress:显示进度条
        --stats: 显示如何执行压缩和传输

复制前先测试:

[root@martin ~]# ls
anaconda-ks.cfg  d1  d2  install.log  install.log.syslog
[root@martin ~]# rsync install.log d2 -n
[root@martin ~]# rsync install.log.a d2 -n
rsync: link_stat "/root/install.log.a" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

注意:rsync命令使用中,如果源参数的末尾有斜线,就会复制指定目录的内容,而不复制目录本身;没有斜线,则会复制目录本身;目标参数末尾的斜线没有作用
源数据后面没有/测试
[root@martin ~]# rsync -rv d1 d2
sending incremental file list
d1/a
d1/a.bin.sql
d1/a.sql
d1/all.sql
d1/kk/a.sql
 
sent 658784 bytes  received 109 bytes  1317786.00 bytes/sec
total size is 658357  speedup is 1.00
[root@martin ~]# ls d2/
d1

源数据后面有/ 测试:
[root@martin ~]# rsync -rv d1/ d2
sending incremental file list
a
a.bin.sql
a.sql
all.sql
kk/
kk/a.sql
 
sent 658777 bytes  received 111 bytes  1317776.00 bytes/sec
total size is 658357  speedup is 1.00
[root@martin ~]# ls d2
a  a.bin.sql  a.sql  all.sql  d1  kk

基于ssh远程推送:
[root@martin d2]# rsync -e "ssh -p6789" -r ../d1  root@sherry:~/  --progress
 
[root@sherry ~]# ls
a  a.sql  anaconda-ks.cfg  d1  install.log  install.log.syslog

基于ssh远程拉取:
[root@martin ~]#  rsync -e "ssh -p6789" -rv  root@sherry:~/d3  . --progress 
root@sherry's password: 
receiving incremental file list
d3/
d3/a.sql
        1868 100%    1.78MB/s    0:00:00 (xfer#1, to-check=0/2)
 
sent 34 bytes  received 1972 bytes  802.40 bytes/sec
total size is 1868  speedup is 0.93
[root@martin ~]# ls
anaconda-ks.cfg  d1  d2  d3  install.log  install.log.syslog

安装:
服务器:sherry
客户端:martin
[root@sherry ~]# yum install xinetd rsync

配置文件:
配置文件为/etc/rsyncd.conf,获取帮助的方式:man rsyncd.conf
定义一个全局配置和多个rsync共享配置

[root@sherry ~]# vim /etc/rsyncd.conf
# Global Settings
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
# Directory to be synced
[synced_name]
path = /path/to/some_dir  #共享目录
ignore errors = yes        #同步时是否忽略错误
read only = no        #yes不能push 只能下载
write only = no      #yes不能pull  只能上传
hosts allow = white_list_ip/net  #白名单
hosts deny = *  #黑名单 
 
说明:
                1、二者都不出现时,默认为允许访问;
                2、只出现hosts allow: 定义白名单;但没有被匹配到的主机由默认规则处理,即为允许;
                3、只出现hosts deny: 定义黑名单;出现在名单中的都被拒绝;
                4、二者同时出现:先检查hosts allow,如果匹配就allow,否则,检查hosts deny,如果匹配则拒绝;如二者均无匹配,则由默认规则处理,即为允许;
 
list = false  #列出目录
uid = root  #不用root
gid = root
auth users = username  #用户认证
secrets file = /etc/rsyncd.passwd  #文件格式(明文):username:password文件权限要设置为600;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/bdc0c70c3d478e51e2e409f759e8a721.html