linux rsync

rsync

  1. 概念:Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

  2. 作用:用于对两台主机的远程传输文件

  3. 好处(与scp的对比):scp用于远程复制,rsync用于远程备份,

rsync使用

  1. rsync的配置
vim etc/rsync.conf

uid = root --rsync运行权限为root
gid = root --rsync运行权限为root
use chroot = no --是否让进程离开工作目录
max connections = 5 --最大并发连接数,0为不限制
timeout = 600 --超时时间
pid file = /var/run/rsyncd.pid --指定rsync的pid存放路径
lockfile = /var/run/rsyncd.lock --指定rsync的锁文件存放路径
log file = /var/log/rsyncd.log --指定rsync的日志存放路径
[web1] --模块名称
path = /data/test/src --该模块存放文件的基础路径
ignore errors = yes --忽略一些无关的I/O错误
read only = no --客户端可以上传
write only = no --客户端可以下载
hosts allow = 192.168.22.12 --允许连接的客户端主机ip
hosts deny = * --黑名单,*表示任何主机
list = yes
auth users = web --认证此模块的用户名
secrets file = /etc/web.passwd --指定存放“用户名:密码”格式的文件
  1. rsync的连接使用
rsync -avzP web@192.168.22.11::web1 /data/test/  #命令
passwd:密码

#此时/data/test/ 下会有a客户机的src文件
  
  1. rsync的密码同步

rsync的密码文件在secrets file中

# echo "123"> /tmp/rsync.password
# chmod 600 /tmp/rsync.password
# rsync -avzP --delete --password-file=/tmp/rsync.password  web@192.168.22.11::web1 /data/test/ --调用密码文件
  1. 客户端的自动同步
# crontab -e
10 0 * * * rsync -avzP --delete --password-file=/tmp/rsync.password   web@192.168.22.11::web1 /data/test/
# crontab -l

rsync+inotify-tools 实现数据同步``

  1. inotify-tools
  • 是为linux下 inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件
  • inotify-tools是用c编写的,除了要求内核支持 inotify 外,不依赖于其他
  • inotify-tools提供两种工具:一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数
  1. 安装
  1. 使用:总归另一个终端实现对监控文件的同步数据
inotifywait -mrq /data -format "%w%f"  -e create,delete,move_to,close_write
  1. 编写脚本:
[root@nfs01 sersync]# vim /server/scripts/inotify.sh
#!/bin/bash
inotifywait -mrq /data --format "%w%f" -e create,delete,moved_to,close_write|
while read line
do
        rsync -az --delete /var/www/html/ rsync_backup@192.168.200.19::nfsbackup --password-
file=/etc/rsync.password
done

#for循环会定义一个条件,当不满足这个条件时,就会停止
#which循环只要条件满足就会一直循环下去 
  • 脚本优化
#!/bin/bash
Path=/data
backup_Server=172.16.1.41
/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data  | while read line  
do
    if [ -f $line ];then
        rsync -az $line --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
    else
        cd $Path &&
        rsync -az ./ --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
    fi
done
原文地址:https://www.cnblogs.com/wml3030/p/15243805.html