一、rsync简介:
rsync是一款远程数据同步的工具,是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具,Rsync 软件适用于 Linux Windows等多种操作系统,并且他可以不改变数据的任何属性和内容。
rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh的scp命令,但又优于scp命令的功能,scp每次都是全量备份,而rsync支持增量备份,当然。rsync还可以在本地主机的不同分区和目录之间全量及增量的复制数据,这又类似于cp命令,但又优于cp命令,cp每次都是全量备份,rsync可以支持增量备份
二、rsync参数:
-v 详细模式输出,传输时的进度等信息, -z 传输时进行压缩以提高传输效率 -compress-level=NUM ,可以按级压缩, -a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等同于 -rtopgDl,相当于包含以下所有 r 对子目录以递归模式,即目录下的所有目录都同样传输,注意事小写r -t --times 保持时间属性一致 -o --owner 保持文件属主信息 -p --perms 保持文件权限 g --group 保持文件属组信息 -P 显示同步的过程以及传输时的进度等信息 -D 保持设备文件信息, -I 保留软连接, 还有一些其他参数: -e 使用隧道模式, --delete 让目标目录SRC和源目录数据DST一致, --exclude=PATTERN 指定排除不需要传输的文件模式 --bwlimit=RATE 限速 (案例:某DBA做数据同步rsync,导致用户无法访问网站) 1、使用rsync的参数,做限速 2、备份尽量在晚上做备份, 补充:rsync scp ftp都有限速的功能,
三、rsync的三种工作模式:
1、rsync本地工作模式
rsync的本地模式相当于cp命令,可以实现本地的文件复制,可以加参数来保持文件的属性一致。
;单台服务器使用rsync实现备份操作: [root@localhost /]# yum install rsync -y [root@localhost opt]# cp /etc/hosts /opt/ [root@localhost opt]# ll /opt/ total 4 -rw-r--r--. 1 root root 158 Jul 30 08:54 hosts [root@localhost opt]# rm -f /opt/hosts [root@localhost opt]# rsync /etc/hosts /opt [root@localhost opt]# ll /opt/hosts -rw-r--r--. 1 root root 158 Jul 30 08:55 /opt/hosts
2、rsync使用远程ssh通道工作模式:
使用-e参数可以是实现rsync通过远程ssh通道实现跨主机的备份操作,需要注意的是,两台主机都需要已经安装rsync。使用ssh连接会有一个问题就是传输很慢,可以采用一下方式优化:
修改/etc/ssh/sshd_config以下几行:
GSSAPIAuthentication no
#GSSAPIAuthentication yes
UseDNS no
然后使用rsync远程ssh通道实现跨主机文件备份:
[root@localhost backup]# rsync -avz /backup/pandj.txt -e "ssh -p 22" root@192.168.80.129:/opt root@192.168.80.129's password: sending incremental file list pandj.txt sent 97 bytes received 35 bytes 37.71 bytes/sec total size is 5 speedup is 0.04 [root@localhost backup]# ssh 192.168.80.129 root@192.168.80.129's password: Last login: Mon Jul 30 09:09:52 2018 from 192.168.80.1 [root@localhost ~]# ip add | grep 192.168 inet 192.168.80.129/24 brd 192.168.80.255 scope global dynamic ens33 [root@localhost ~]# cd /opt/ [root@localhost opt]# ll total 4 -rw-r--r--. 1 root root 5 Jul 30 09:46 pandj.txt
3、rsync daemon 服务模式:
相当于搭建一个备份服务器,上面跑一个rsync服务,(服务称之为daemon)监听 873 端口,然后有其他的客户端服务器, 在客户端服务器上使用rsync命令,实现可以和服务器 推 和 拉 的作用, 推拉都是在客户端的操作,
服务端编辑rsync配置文件:
#用户uid,相当于进程对应的虚拟用户远端的命令要使用rsync来访问目录 uid = rsync #gid 相当于进程对应的用户组 gid = rsync #安全相关 use chroot = no #最大连接数量 max connections = 200 #进程对应的进程号文件 pid file = /var/run/rsyncd.pid #日志文件 log file = /var/log/rsyncd.log #超时时间 timeout = 900 [backup]
#服务端提供访问的目录 path = /backup #忽略错误 ignore errors #只读为假表示 可写 read only = no #允许列表 list = yes #虚拟用户 auth users = rsync_backup #虚拟账号对应的用户和密码 secrets file = /etc/rsync.password
服务端rsync配置文件配置好之后,还需要创建一个rsync用户和 /backup 这个目录,访问逻辑就是源端用户连过来的时候用的就是rsync这个用户访问 /backup 这个目录,在这个过程中,需要注意文件的权限,以及配置文件中虚拟用户的账户密码文件配置。
[root@localhost ~]# useradd rsync -s /sbin/nologin -M //创建一个rsync用户 不需要登陆,不需要家目录。 [root@localhost ~]# tail -1 /etc/passwd rsync:x:1001:1001::/home/rsync:/sbin/nologin [root@localhost ~]# mkdir /backup //创建一个backup目录 [root@localhost ~]# ll -d /backup/ drwxr-xr-x. 2 root root 23 Jul 30 09:46 /backup/ //到这边远端用户还是访问不了/backup这个目录,因为有权限的控制,需要我们把这个目录的属主改成rsync,也可以用chmod 777但是这样不安全,不建议使用 [root@localhost ~]# chown -R rsync.rsync /backup [root@localhost ~]# ll -d /backup/ drwxr-xr-x. 2 rsync rsync 23 Jul 30 09:46 /backup/ //然后检查配置文件,还少一个虚拟账号对应的密码文件 secrets file = /etc/rsync.password 编辑此文件并修改此文件的权限, [root@localhost ~]# echo "rsync_backup:123456" > /etc/rsync.password [root@localhost ~]# tail -1 /etc/rsync.password rsync_backup:123456 [root@localhost ~]# chmod 600 /etc/rsync.password [root@localhost ~]# ll /etc/rsync.password -rw-------. 1 root root 20 Jul 31 09:25 /etc/rsync.password //启动rsync服务,并加入开机自启,查看端口确认服务是否起来。 [root@localhost ~]# /usr/bin/rsync --daemon [root@localhost ~]# echo "/usr/bin/rsync --daemon" >> /etc/rc.local [root@localhost ~]# lsof -i:873 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsync 2245 root 4u IPv4 20736 0t0 TCP *:rsync (LISTEN) rsync 2245 root 5u IPv6 20737 0t0 TCP *:rsync (LISTEN)
服务端至此配置完成,配置客户端的步骤如下:
1、需要配置一个密码文件,和服务端一致并修改权限
[root@client ~]# echo "rsync_backup:123456" > /etc/rsync.password [root@client ~]# chmod 600 /etc/rsync.password [root@client home]# tail -1 /etc/rsync.password rsync_backup:123456
2、创建一个 /backup 目录,用来测试
[root@client backup]# mkdir /backup/
3、测试推送
//在服务端 /backup 目录下创建一个测试文件 [root@localhost backup]# touch test [root@localhost backup]# echo 11111 > test //在客户端拉取服务区的文件 [root@client backup]# pwd /backup [root@client backup]# ll total 0 [root@client backup]# rsync -avz rsync_backup@192.168.80.128::backup /backup/ receiving incremental file list ./ test sent 50 bytes received 127 bytes 354.00 bytes/sec total size is 6 speedup is 0.03 [root@client backup]# ll total 4 -rw-r--r--. 1 root root 6 Jul 31 11:12 test [root@client backup]# more test 11111
如果想要非交互式的传输,可以用以下命令:
[root@localhost backup]# rsync -avz /backup/ rsync_backup@192.168.80.130::backup/ --password-file=/etc/rsync.password
四、配置过程中的注意点:
1、服务端的目录属主要修改成配置文件中的用户,否则会有权限问题
2、虚拟用户密码文件服务端内容为:虚拟用户名:密码 客户端密码配置内容为 密码,且两个文件权限均需要修改成600
五、rsync配置中常见的问题:
1、配置文件问题
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
排查思路;
1、命令解析: 客户端使用 命令 参数 目录 虚拟用户@服务端地址::模块名/ --password-file=/etc/rsync.password 来往服务端同步信息,
2、排查地址及端口,服务端使用lsod -i :873 或者 netstat -lntup | grep 873 来查看服务是否存在
然后在客户端 telnet 服务端地址加端口,排查是否地址端口存在问题,
3、不加 --password-file 参数,手动输入密码,看用户名和密码是否能登陆上
虚拟用户名和密码都定义在 /etc/rsyncd.conf配置文件中
auth users = rsync_backup
secrets file = /etc/rsync.password
/etc/rsync.password 文件需要创建,服务端中输入rsync_backup:123456,用户名密码
/etc/rsync.password 客户端中输入 joywise
4、能连接上,排查 uid gid 中rsync是否存在,[backup]模块中目录地址是否正确,
5、查看 [root@backup backup]# tail -10 /var/log/rsyncd.log
提示我 /backup 这个目录找不到,ll -d /backup查看目录确实存在,怀疑问题在配置文件中的[backup] 模块中 path 中,经过排查, path = /backup 这条配置后面有很多空格导致找不到目录,所有提示 chroot failed,修改配置文件,然后再从客户端推,解决问题。