rsync
-
概念:Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
-
作用:用于对两台主机的远程传输文件
-
好处(与scp的对比):scp用于远程复制,rsync用于远程备份,
rsync使用
- 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 --指定存放“用户名:密码”格式的文件
- rsync的连接使用
rsync -avzP web@192.168.22.11::web1 /data/test/ #命令
passwd:密码
#此时/data/test/ 下会有a客户机的src文件
- 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/ --调用密码文件
- 客户端的自动同步
# 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 实现数据同步``
- inotify-tools
- 是为linux下 inotify文件监控工具提供的一套c的开发接口库函数,同时还提供了一系列的命令行工具,这些工具可以用来监控文件系统的事件
- inotify-tools是用c编写的,除了要求内核支持 inotify 外,不依赖于其他
- inotify-tools提供两种工具:一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数
- 安装
- 下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
- 编译安装:./config && make && makeinstall
- 使用:总归另一个终端实现对监控文件的同步数据
inotifywait -mrq /data -format "%w%f" -e create,delete,move_to,close_write
- 编写脚本:
[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