一、关于
Rsync 是一个常用的 Linux 应用程序,用于文件同步。
它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。
它名称里面的r指的是 remote,rsync 其实就是”远程同步”(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。
二、使用
2.1 安装
yum install rsync
2.2 命令
格式:rsync 【选项】 源文件 目标文件
常见的选项:
-a,–archive 归档模式,以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD
-r,–recursive 对子目录以递归模式处理
-l,–links 表示拷贝链接文件
-p , –perms 表示保持文件原有权限
-t , –times 表示保持文件原有时间
-g , –group 表示保持文件原有属用户组
-o , –owner 表示保持文件原有属主
-D , –devices 表示块设备文件信息
-z , –compress 表示压缩传输
-H 表示硬连接文件
-A 保留ACL属性信息
-P 显示传输进度
–delete 删除那些目标位置有而原始位置没有的文件
-v 将结果输出到终端
2.3 远程同步
rsync 默认使用 SSH 进行远程登录和数据传输,如下:
rsync -av ./ root@192.168.18.54:/opt/rsync
rsync -av root@192.168.18.54:/opt/rsync /opt/rsync/
同时也支持rsync协议,可参考3.1中配置。
三、实时同步
rsync与crontab inotify等工具一起使用,可实现定时或实时同步。
3.1 备份节点(192.168.18.54)
修改配置文件:
vim /etc/rsyncd.conf
添加以下配置:
uid = nobody
gid = nobody
use chroot = yes
max connections = 10
strict mode=yes
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[backup]
path = /opt/rsync/
comment = backup file
ignore errrors
read only=no
write only=no
hosts allow=192.168.18.53
hosts deny=*
list=false
uid=root
gid=root
auth users=rabb
secrets file=/etc/rsync.password
编辑密码文件,并授予权限:
echo "rabb:123456" > /etc/rsync.password
chmod 600 /etc/rsync.password
启动 rsync 守护进程:
/usr/local/bin/rsync --daemon
rsync 默认端口为873,所以开放873端口(或者直接关闭防火墙):
firewall-cmd --add-port=873/tcp --permanent --zone=public
firewall-cmd --reload
3.2 主节点(192.168.18.53)
编辑密码文件:
echo "123456" > /etc/rsync.password
给与权限:
chmod 600 /etc/rsync.password
3.3 测试手动同步
rsync -avH --port 873 --delete /opt/rsync/data/ rabb@192.168.18.54::backup --password-file=/etc/rsync.password
3.4 主节点配置notify
安装inofity-tools,我这里是通过rpm包安装的,rmp包下载地址:https://centos.pkgs.org/7/epel-x86_64/inotify-tools-3.14-9.el7.x86_64.rpm.html
创建shell脚本,内容如下:
#!/bin/bash
host1=192.168.18.54
src=/opt/rsync/data/
dst1=backup
user1=rabb
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src \
| while read files
do
rsync -vzrtopg --delete --progress --password-file=/etc/rsync.password $src $user1@$host1::$dst1 > /dev/null 2>&1
echo "${files} was rsynced." >> /opt/rsync.log 2>&1
done
启动脚本,然后就可以自动同步文件了。