
介绍
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。
Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配置文件。Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具。
安装及配置
主机配置
1.安装
# yum -y install rsync
//不能以正常的模式启动
//检查是否已经成功安装
# rsync --version
2.配置
vi /etc/rsyncd.conf
---------------------------------------------------------------
uid = root
gid = root
timeout = 180
max connections=20
port=873
log file=/var/log/rsync.log
pidfile = /var/run/rsync.pid #<<<<<<<<<<<一定要配置
list = no
ignore errors
read only=no
hosts allow=*
secrets file = /root/rsyncd.passwd
address=127.0.0.1 #<<<<<<<<<<<一定要配置 使之作为本地服务被启动
[www.xxx.cn] //模块名称
comment = ftp export area
path = /usr/share/nginx/html/www.xxx.cn //要备份的文件路径
auth users = root #用户名
[storage2]
path = /storage2
auth users = root
[comic]
path = /storage2/comic
auth users = root
[news]
path = /storage2/news
auth users = root
-------------------------------------------------------------------
//主机的密码(从机用这个密码访问主机)
3.编写用户密码文件
# echo "root:123456" > /root/rsyncd.passwd //被访问时的服务密码
# echo "123456" > /root/rsyncd.pass //访问别人的访问密码
4.修改密码文件的权限(只能是600):
# chmod 600 /root/rsyncd.passwd
# chmod 600 /root/rsyncd.pass
5.启动rsyncd服务 :
# systemctl restart rsyncd.service
//启动此进程的用户必须和 auth users 一致
# systemctl status rsyncd.service
//开机启动
# systemctl enable rsyncd.service
6.查看进程占用端口:netstat -tunlp

如果启动失败,请用以下方法启动: !!!!!!!!!!
rsync --daemon --config=/etc/rsyncd.conf
开放防火墙
rsync使用873端口,需要开放防火墙
//如果你用的是iptables
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
# iptables -L 查看一下防火墙是不是打开了 873端口
//如果你用的是firewall
# firewall-cmd --permanent --zone=public --add-port=873/tcp; 设置详细看这里
# firewall-cmd --reload
# firewall-cmd --list-all
从机配置
1.# yum -y install rsync ...
2.# echo "root:123456" > /root/rsyncd.passwd //被访问时的服务密码
# echo "123456" > /root/rsyncd.pass //访问别人的访问密码
3.# chmod 600 /root/rsyncd.passwd
# chmod 600 /root/rsyncd.pass
4.# vi /etc/rsyncd.conf (无需设置)
5.定时任务
# crontab -e:
//加入一行 执行频率间隔自已定义
//新测试 效果好,速度快!!!!
//将远程项目stroage2 复制到本地 (项目,双冒号)
# rsync -vzrtopg --delete --progress --password-file=/root/rsyncd.passwd root@192.168.0.80::storage2 /usr/share/nginx/html/live2d
//将远程项目comic 复制到本地 (项目,双冒号)
# rsync -vzrtopg --delete --progress --password-file=/root/rsyncd.passwd root@192.168.0.80::comic /storage2/comic
//将远程项目news 复制到本地 (项目,双冒号)
# rsync -vzrtopg --delete --progress --password-file=/root/rsyncd.passwd root@192.168.0.80::news /storage2/news
//将本地test目录 同步备份到远程 test项目
rsync -vzrtopg --delete --progress --password-file=/root/rsyncd.pass /storage2/test/ root@192.168.0.90::test
//目录同步而非项目同步需要输入用户密码
//--password-file=/root/rsyncd.pass 参数无效
//The --password-file option may only be used when accessing an rsync daemon.
//将本地/storage2/test/目录 同步备份到远程目录 /storage2/test/ (目录,单冒号)
rsync -vzrtopg --delete /storage2/test2/ root@192.168.0.90:/storage2/test2/
rsync -vzrtopg --delete --progress --password-file=/root/rsyncd.pass /storage2/comic/p3 root@192.168.0.90::p3
//含义:
-vzrtopg
v是“--verbose”显示详细输出模式
z是“--compress”压缩模式
r是“--recursive”以子目录递归模式
t是“--times“用来保持文件信息时间
o是”--owner“用来保持文件的属主信息
p是”--perms“用来保持文件权限
g是”--group“用来保持文件的属组
--delete 指定以rsync服务器为基准进行数据镜像同步,也就是要保持rsync服务器端目录与客户端目录的完全一致
--progress 用来显示数据镜像同步的过程
//旧测试方法 不建议使用此方法
10 0 * * * rsync -vr --password-file=/root/rsyncd.passwd --exclude "uploads" --exclude "cache" root@192.168.0.80::www_xxx3.com /usr/share/nginx/html/www_xxx3.com > /dev/null 2>&1 ;
//建议使用shell
10 0 * * * sh /root/rsyncd.sh > /dev/null 2>&1;
写法规则
1)本地使用: rsync [OPTION…] SRC -> [DEST] rsync [OPTION…] [源] -> [目的地] 2)通过远程 Shell 使用: 拉: rsync [OPTION…] [USER@]HOST:SRC… [DEST] 推: rsync [OPTION…] SRC… [USER@]HOST:DEST 3)访问 rsync 服务器: 拉: rsync [OPTION…] [USER@]HOST::SRC… [DEST] 推: rsync [OPTION…] SRC… [USER@]HOST::DEST 拉: rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST] 推: rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST
常用选项



测试
//基于ssh的rsync远程同步数据(拉取) # rsync -vr --password-file=/root/rsync.passwd --exclude "uploads" --exclude "cache" root@192.168.0.80::www_xxx2.com /usr/share/nginx/html/www_xxx2.com
//基于ssh的rsync远程同步数据(推) rsync [OPTION…] [源] -> [目的地] rsync -av /etc root@192.168.249.135:/www/
定期自动同步数据

//计划定时任务:每天00:10分执行
# crobtab -e
10 0 * * * * sh rsync.sh
//rsync.sh 内容如下:
#!/bin/bash
#其中判断挂载点非常重要,在挂载点不存在的情况下会自动写入"/",造成很大的问题(多么痛的领悟!20200601)
storage_file="/storage"
if [ -d $storage_file ]; then
echo "挂载点存在!"
rsync -vzrtopg --delete --progress --password-file=/root/rsyncd.passwd root@192.168.0.10::xxx /xxxx
else
echo "挂载点不存在!"
fi