rsync数据同步工具的配置
1、 rsync介绍
1.1、什么是rsync
rsync是一款开源的快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具。Rsync软件适用于
unix/linux/windows等多种操作系统平台
下面是官方的英文简单描述:
rsync - a fast, versatile, remote (and local) file-copying tool
官网 https://www.samba.org/ftp/rsync/rsync.html
1.2、rsync简介
Rsync英文全称为Remote Synchronize从软件的名称就可以看出来
Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh带的scp命令。但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。
在同步备份数据时,默认情况下,rsync通过其独特的"quick check"算法,它仅同步大小或者最好修改时间发生变化的文件或目录,当然也可以根据权限,属主等熟悉的变化同步,但需要指定相应的参数,甚至你可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。
提示:传统的cp,scp工具拷贝均为完整的拷贝,而rsvnc除了可以完整的拷贝外,还具备增量拷贝的功能,因此,从同步数据得性能及效率上,rsync工具更胜一筹。
CentOS5,rsync2.x比对方法,把所有的文件比对一遍,然后进行同步
CentOS6,rsync3.x比对方法,一边比对差异,一边对差异的部分进行同步
1.3、rsync的特性 增量同步,支持断点续传
rsync的特性如下:
支持拷贝特殊文件如链接文件,设备等
可以有排除指定文件或目录的权限、时间、软硬链接、属主、属组等所有属性均不改变-P
可实现增量同步,即只同步发生变化的数据,因此数据传输效率很高,tar –N
可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****
支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像
2、 rsync的企业工作场景说明
2.1、定时同步
两台服务器之间数据同步(定时任务)
即cron+rsync
2.2、实时同步
sersync或者(inotify+rsync)
针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案
2.2.2、通过本地打包备份,然后rsync结合inotify应用把全网数据统一备份到一个固定存储服务器,然后在存储服务器欧尚通
过脚本检查并报警管理员备份结果
2.2.3、定期将IDC机房的数据备份公司的内部服务器,防止机房地震及火灾问题导致数据丢失
3、 rsync的常用参数
-v 显示详情
-q 安静模式
-a 归档 =-rlptgoD
-r 递归
-l 拷贝软链接
-p 保持权限
-t 保持时间
-g 保持属组
-o 保持属主
-D 保持设备文件
-z 压缩
-P 显示进度条,支持断点续传
常用参数 –avzP
-a 保持原有属性
-v 显示详情
-z 压缩
-P 显示进度条,实现断点续传
--list-only 仅仅列出文件而不进行复制
--exclude=PATTERN 指定排除一个不需要传输的文件匹配模式
--exclude-from=FILE 从 FILE 中读取排除规则
--bwlimit 限速
4、 rsync的工作方式
一般来说,rsync大致使用三种主要的传输数据得方式。分别为:
单个主机本地之间的数据传输(此时类似于cp命令的功能)
借助rcp,ssh等通道来传输数据(此时类似于scp命令的功能)
以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能)
以上的几种rsync的工作方式,我们可以通过manreync帮助或者查看手册获得
local使用本地模式
rsync –avzP 源SRC 目标DEST
rsync -avP /etc/ /tmp/
Access via remote shell通过远程shell访问
push推(本地到远程)
rsync -avz /tmp rsync_backup@192.168.1.41::backup --password-file=/etc/rsync.password
pull拉(远程到本地)
rsync -avz rsync_backup@192.168.1.41::backup /tmp --password-file=/etc/rsync.password
Access via rsync daemon守护进程模式(拉)
用法:rsync –avzP rsync://192.168.1.41/backup DEST
访问通过rsync守护进程协议(常用于同步yum源)
[root@localhost ~]# cat /etc/rsyncd.conf
#rsync server
##rsyncd.conf start##
uid = nginx
gid = nginx
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = true
list = true
hosts allow = 172.16.6.0/24
#####################################
[centos]
path = /usr/share/nginx/html/centos
[epel]
path = /usr/share/nginx/html/epel
定时同步:
30 21 * * * /usr/bin/rsync -zaP --exclude-from /usr/share/nginx/html/rsync_exclude2.txt rsync://rsync.mirrors.ustc.edu.cn/centos/7.4.1708 /usr/share/nginx/html/centos
00 22 * * * /usr/bin/rsync -zaP --exclude-from /usr/share/nginx/html/rsync_exclude.txt rsync://rsync.mirrors.ustc.edu.cn/centos/6.9 /usr/share/nginx/html/centos
00 21 * * * /usr/bin/rsync -zaP --exclude-from /usr/share/nginx/html/rsync_exclude.txt rsync://rsync.mirrors.ustc.edu.cn/epel/7/x86_64 /usr/share/nginx/html/epel/7/
30 20 * * * /usr/bin/rsync -zaP --exclude-from /usr/share/nginx/html/rsync_exclude.txt rsync://rsync.mirrors.ustc.edu.cn/epel/6/x86_64 /usr/share/nginx/html/epel/6/
5、 rsync --daemon配置
rsync远程增量同步
服务端 41 backup
5.1、创建rsync专用系统账户
useradd -M -s /sbin/nologin rsync #创建用户并且设置为nologin
5.2、创建rsync专用目录
mkdir /backup #创建backup目录
chown -R rsync:rsync /backup #修改backup的属主和属组(也可不修改,但是同步时带目录会报错)
5.3、创建配置文件
修改配置文件vim /etc/rsyncd.conf或
echo '#rsync server
##rsyncd.conf start##
uid = rsync #用户
gid = rsync #用户组
port = 8730 #指定端口,也可不修改,若指定,在同步时加参--port=8730
use chroot = no #禁用chroot
max connections = 2000 #最大连接数2000
timeout = 600 #超时时间600秒即10分钟
pid file = /var/run/rsyncd.pid #指定pid文件路径
lock file = /var/run/rsync.lock #指定锁文件路径(用于防止冲突)
log file = /var/log/rsyncd.log #指定日志文件的路径
ignore errors #忽略不重要的错误,不写入日志文件
read only = false #关闭只读模式
list = false #关闭只查看列表
hosts allow = 192.168.1.0/24 #白名单,允许执行rsync的机器
hosts deny = 192.168.1.0/24 #黑名单,拒绝执行rsync的机器
##白名单与黑名单二选一哦
auth users = rsync_backup #指定匿名用户的用户名
secrets file = /etc/rsync.password #指定用户名:密码文件(权限600或700)
##################################### #以上都为通用部分
[backup] #模块名称
comment = back server by har #备注,可自定义也可不写
path = /backup' >>/etc/rsyncd.conf #指定模块使用的目录,可以指定多个
[web]
comment = back server by har
path = /web
添加模块的步骤:新建目录,修改目录所属用户和用户组,修改配置文件/etc/rsyncd.conf添加模块
5.4、创建密码配置文件
echo "rsync_backup:oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.password
客户端 31 nfs
echo "oldboy">/etc/rsync.password
chmod 600 /etc/rsync.password
/etc/rsync.password密码文件
服务端和客户端都存在该文件,权限都是600
服务端显示用户名密码,客户端只显示密码
touch /tmp/stu{01..10}
rsync -avz /tmp rsync_backup@192.168.1.41::backup --password-file=/etc/rsync.password #带tmp目录
rsync -avz /tmp/ rsync_backup@192.168.1.41::backup --password-file=/etc/rsync.password #不带tmp目录
5.5、rsync --daemon
启动服务
或者
yum install xinetd –y
vim /etc/xinetd.d/rsync
disable = no
/etc/init.d/xinetd start
5.6、检验
在客户端执行命令rsync –avz /tmp
5.7、杀死进程的方法
第一种:kill `cat /var/run/rsyncd.pid`
ps –ef|grep rsync #查看rsync的pid号
kill 1235 #杀死rsync的进程
第二种:pkill rsync
第三种:killall rsync
netstat -lntup|grep 873
5.8、rsync-daemon排除文件
--exclude=PATTERN指定排除一个不需要传输的文件匹配模式
--exclude-from=FILE从 FILE 中读取排除规则
rsync -avz --exclude=test7 /tmp rsync_backup@192.168.1.41::web --password-file=/etc/rsync.password
ls -1d test*7*|xargs -i echo "{}">>/opt/exclude.txt
rsync -avz --exclude-from /opt/exclude.txt /tmp rsync_backup@192.168.1.41::web --password-file=/etc/rsync.password
如果多级目录有相同名称的目录,默认情况下会过滤掉目录及子目录中带有过滤内容的目录,若不想过滤掉子目录中的目录
可以修改目录权限000,再进行全部传输,则不会传输修改过权限的那个目录下的内容
6、 rsync的优缺点
优点
a、增量备份、支持socket、集中备份(支持推拉,都是以客户端为参照物的)
b、远程shell,通道模式还可以加密传输,socket需要加密传输,可以利用VPN服务或ipsec服务
rsync -avz --rsh=ssh /tmp root@192.168.1.41::backup 同时还需要修改
缺点
大量小文件同步的时候,比对时间长,有的时候,rsync进程可能会停止
同步大文件,10G这样的文件有时候会出错,中断。未完整同步前,是隐藏文件
7、 rsync限速
scp限速 scp –P 22 –l 1000 /back root@172.16.1.41:/tmp
1000=120KB/s 100000=10MB/s
利用参数--bwlimit=
限速2M
rsync -avzP --bwlimit=2 /tmp rsync_backup@192.168.1.41::backup --password-file=/etc/rsync.password
8、rsync--daemon排错思路
8.1 查看rsync服务端配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf
8.2 查看配置文件里hosts allow和hosts deny,allow和deny是二选一,允许的ip网段是否是允许客户端的ip网段
8.3 查看配置文件的模块中path参数里的路径是否存在,权限是否正确
8.4 查看rsync服务是否启动,查看命令是lsof –I:873,netstat –lntup|grep 873
8.5 查看iptables和SELinux是否关闭
8.6 查看rsync密码配置文件/etc/rsync.passwd是否为660权限,服务端格式为用户名:密码,客户端只有密码,文件路径和配置文件里的secrect files参数对应
8.7 如果是推送数据,要查看下,而配置文件rsyncd.conf文件中用户是否对模块下目录有可读写的权限
8.8 安装配置流程一步一步的排错
9、 rsync常见错误
9.1 问题一
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。
9.2 问题二
@ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。提供正确的用户名密码解决此问题。
9.3 问题三:
@ERROR: Unknown module 'tee_nonexists'
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。
9.4 问题四:
password file must not be other-accessible
continuing without password file
Password:
原因:
这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd
9.5 问题五:
rsync: failed to connect to 218.107.243.2: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
原因:
对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873端口打开。
9.6 问题六:
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:
/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。
9.7 问题七:
rsync: chown "" failed: Invalid argument (22)
原因:
权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
9.8 问题八:
@ERROR: daemon security issue -- contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:
同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。
9.9 问题九:
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.2]
解决:很大可能是服务器端没有开启 rsync 服务,开启服务。
9.10 问题十:
@ERROR: failed to open lock file
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:配置文件 rsync.conf 中添加 lock file = rsyncd.lock 即可解决。
9.11问题十一
/var/run/rsyncd.pid文件存在,监听端口不存在873,可以删除pid文件再rsync –daemon启动=远程同步