Rsync备份功能总结

备份服务笔记
======================================================================
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。
Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。

rsync服务介绍
属于一款实现全量及增量复制同步的软件工具

一、rsync服务命令的简单应用
1、等价===cp命令 本地复制
[root@backup ~]# cp -a /etc/hosts /tmp/
[root@backup ~]# ls /tmp/
hosts yum.log
[root@backup ~]# rsync -a /etc/networks /tmp/
[root@backup ~]# ls /tmp/
hosts networks yum.log

2、==scp命令 远程复制
[root@backup ~]# scp -rp /tmp/ 172.16.1.31:/tmp/ 备份服务器上操作
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
RSA key fingerprint is e4:56:24:15:3c:a6:e7:75:b0:d0:12:2a:d1:73:aa:77.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts.
root@172.16.1.31's password:
hosts 100% 352 0.3KB/s 00:00
yum.log 100% 0 0.0KB/s 00:00
networks

检查172.16.1.31上是否复制成功
[root@NFS01 ~]# ll /tmp/
total 4
drwxrwxrwx 3 root root 4096 Jan 10 10:00 tmp
-rw-------. 1 root root 0 Jan 10 02:01 yum.log
[root@NFS01 ~]# tree /tmp/
/tmp/
├── tmp
│   ├── hosts
│   ├── networks
│   └── yum.log
└── yum.log

1 directory, 4 files

[root@backup ~]# rsync -rp /tmp/ 172.16.1.31:/tmp/
root@172.16.1.31's password:

[root@NFS01 ~]# ll /tmp/
total 8
-rw-r--r-- 1 root root 352 Jan 10 10:06 hosts
-rw-r--r-- 1 root root 58 Jan 10 10:06 networks
-rw------- 1 root root 0 Jan 10 10:06 yum.log
查看只复制了文件,没有复制目录
说明:同步数据时,/tmp/目录后有/信息,表示将目录下面的数据内容进行备份同步
同步数据时,/tmp目录后没有/信息,表示将目录及目录下面的数据内容进行备份同步

[root@backup ~]# rsync -rp /tmp 172.16.1.31:/tmp/
root@172.16.1.31's password:
[root@NFS01 ~]# ll /tmp/
total 4
drwxrwxrwt 3 root root 4096 Jan 10 10:10 tmp

3、rsync == rm
说明:rsync实现删除目录中数据内容过程,就将一个空目录和一个有数据的目录进行同步
最终,会将有数据的目录中的文件进行清空
[root@backup ~]# mkdir /null
[root@backup ~]# rsync --delete /null/ /tmp/
rsync: --delete does not work without -r or -d.
rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6]
[root@backup ~]#
[root@backup ~]# rsync -r --delete /null/ /tmp/
[root@backup ~]# ll /tmp/
total 0

4、 rsync == ls
[root@backup ~]# ls /etc/hosts
/etc/hosts
[root@backup ~]# ls -l /etc/hosts
-rw-r--r--. 2 root root 352 Jan 27 01:15 /etc/hosts
[root@backup ~]# rsync /etc/hosts
-rw-r--r-- 352 2018/01/27 01:15:59 hosts

Rsync备份软件的7大特性:
1、支持拷贝普通文件与特殊文件,如链接文件
2、支持排除指定文件或者目录同步的功能,类似tar命令排除功能,--exclude\--exclude-from=文件
3、支持保持原文件或者目录属性不变
4、支持增量同步
5、支持使用rcp\ssh\rsh等方式来配合进行隧道加密传输文件
6、支持使用通过socket(守护进程方式)传输文件或者目录数据信息
7、支持用户认证方式传输数据

Rsync的工作原理:
通过特殊的算法“quick check”来实现增量备份

Rsync的3种传输模式:
1、本地数据备份方式:
Local: rsync [OPTION...] SRC... [DEST]
rsync --- 数据备份传输命令
option --- 可以输入一下和rsync传输数据有关的参数
src --- 要进行备份的数据(文件/目录)
dest --- 将数据信息备份到什么位置(相应路径中)
实践练习:
[root@backup ~]# rsync -a /etc/hosts /tmp/ok.txt
[root@backup ~]# ll /tmp/ok.txt
-rw-r--r-- 1 root root 352 Jan 27 01:15 /tmp/ok.txt

2、 远程数据备份方式
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] 拉
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 推
pull方式语法说明:
rsync --- 数据备份传输命令
option --- 可以输入一下和rsync传输数据有关的参数
[USER@]HOST: --- 需要指定以什么用户身份登录到远程主机,
如果省略USER信息,表示以当前用户身份进行登录
登录主机地址或域名信息
SRC --- 指定远程主机要传输过来到本地的数据信息
dest --- 将数据保存到本地的什么路径中
事件练习:
[root@backup ~]# rsync -avz 172.16.1.31:/test_dir /backup/
root@172.16.1.31's password:
receiving incremental file list
test_dir/
test_dir/a
test_dir/b
test_dir/c
test_dir/d

sent 91 bytes received 230 bytes 49.38 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]# ll /backup/
total 8
-rw-r--r-- 1 rsync rsync 0 Jan 10 15:13 a
-rw-r--r-- 1 rsync rsync 0 Jan 10 15:13 c
-rw-r--r-- 1 rsync rsync 352 Jan 10 04:35 hosts
drwxr-xr-x 2 root root 4096 Jan 10 16:01 test_dir

push方式语法说明:
rsync --- 数据备份传输命令
option --- 可以输入一下和rsync传输数据有关的参数
[USER@]HOST: --- 需要指定以什么用户身份登录到远程主机,
如果省略USER信息,表示以当前用户身份进行登录
登录主机地址或域名信息
SRC --- 指定本地主机要传输到远程主机的数据
dest --- 将本地数据保存到远端的什么路径中

实践练习:
[root@backup ~]# rsync -avz /backup/ 172.16.1.31:/tmp/ 推送
root@172.16.1.31's password:
sending incremental file list
./
a
c
hosts
test_dir/
test_dir/a
test_dir/b
test_dir/c
test_dir/d

sent 542 bytes received 152 bytes 198.29 bytes/sec
total size is 352 speedup is 0.51
[root@backup ~]# rsync 172.16.1.31:/tmp/ 查看是否成功推送
root@172.16.1.31's password:
drwxr-xr-x 4096 2019/01/10 16:04:44 .
-rw-r--r-- 0 2019/01/10 10:12:56 1
-rw-r--r-- 0 2019/01/10 10:12:56 2
-rw-r--r-- 0 2019/01/10 10:12:56 3
-rw-r--r-- 0 2019/01/10 10:12:56 4
-rw-r--r-- 0 2019/01/10 15:13:52 a
-rw-r--r-- 0 2019/01/10 15:13:52 c
-rw-r--r-- 352 2019/01/10 04:35:02 hosts
drwxrwxrwt 4096 2019/01/10 10:06:35 .ICE-unix
drwxr-xr-x 4096 2019/01/10 16:01:51 test_dir
drwxrwxrwt 4096 2019/01/10 10:13:08 tmp

3、 守护进程传输模式
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

pull:rsync [OPTION...] [USER@]HOST::SRC... [DEST]
[USER@]HOST:: --- 指定远程连接的认证用户
SRC --- 指定相应的模块信息
[DEST] --- 将远程数据保存到本地的路径信息

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
[USER@]HOST:: --- 指定远程连接的认证用户
SRC --- 指定本地要进行推送的数据信息
[DEST] --- 远程进行保存数据的模块信息

Rsync常用参数说明:
-v 详细模式输出,显示数据备份情况
-z 传输时压缩以提高效率
-a 归档传输,保持所有文件的属性,相当于-rtopgDI
-r, --recursive(属于-a参数) 对子目录以递归模式,即目录下的所有目录都同样传输
-t, --times(属于-a参数) 保持文件时间属性信息
-o, --owner(属于-a参数) 保持文件属主信息
-g, --group(属于-a参数) 保持文件属组信息
-p, --perms(属于-a参数) 保持文件权限
-D, --devices (属于-a参数)保持设备文件信息
-l, --links(属于-a参数) 保留软链接(小写字母l)
-P(大写), --progress 显示同步的过程及传输时的进度等信息
-e, --rsh=COMMAND 使用的信道协议(remote shell),指定替代rsh的shell程序。例如:ssh
使用方法:rsync -e "ssh -port 22"

--exclude=PATTERN 指定排除不需要传输的文件信息。
--exclude-from=file 文件名所在的目录文件,即可以实现排除多个文件
--bwlimit=RATE 实现数据传输过程限速传输,限制速率单位为kbytes

Rsync守护进程的部署:
服务端的部署:
第一步:检查是否安装rsync
[root@backup ~]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64
第二步:创建rsync配置文件
[root@backup ~]# vim /etc/rsyncd.conf
#rsync_config
#created by HQ at 2017
##rsyncd.conf start##

uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup

第三步:创建备份目录管理用户
useradd rsync -M -s /sbin/nologin

第四步:创建备份目录并授权
mkdir /backup
chown -R rsync.rsync /backup

第五步:创建认证文件并授权
[root@backup ~]# echo "rsync_backup:oldboy123" >>/etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:oldboy123
[root@backup ~]# chmod 600 /etc/rsync.password

第六步:启动rsync服务
[root@backup ~]# rsync --daemon 启动
[root@backup ~]# ps -ef |grep rsync 检查服务是否开启
root 24705 1 0 16:20 ? 00:00:00 rsync --daemon
root 24707 24464 0 16:20 pts/1 00:00:00 grep --color=auto rsync
[root@backup ~]# netstat -lntup |grep rsync 检查端口
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 24705/rsync
tcp 0 0 :::873 :::* LISTEN 24705/rsync

客户端的部署:
第一步:检查是否安装rsync
[root@NFS01 test_dir]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64
第二步:创建认证密码文件
[root@backup ~]# echo "oldboy123" >>/etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
oldboy123
第三步:进行数据备份测试
pull:

push:
[root@NFS01 test_dir]# rsync -avz /test_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
a
b
c
d

sent 201 bytes received 87 bytes 576.00 bytes/sec
total size is 0 speedup is 0.00

服务端配置文件说明:
uid = rsync 指定uid的用户 --指定rsync服务运行的时候,向磁盘进行读取和写入操作的操作者
gid = rsync 指定gid的用户 --指定rsync服务运行的时候,向磁盘进行读取和写入操作的操作者
use chroot = no 进行数据同步存储时,安全相关参数,默认内网进行数据同步,可以关闭
max connections = 200 最大连接数 --定义向备份服务器进行数据存储的并发连接数
timeout = 300 超时时间 --定义与备份服务器建立的网络连接,在多长时间没有数据传输时,就释放连接
pid file = /var/run/rsyncd.pid 进程文件 --服务程序运行时,会将进程的pid信息存储到一个指定的pid文件中
lock file = /var/run/rsync.lock 锁文件 --定义锁文件,主要用于配合max connections 参数,当达到最大连接就禁止继续访问
log file = /var/log/rsyncd.log 日志文件 --定义服务的日志文件保存路径信息
ignore errors 忽略出现的I/O错误 --在进行数据备份传输过程过程中,忽略一些I/O产生的传输错误
read only = false 只读(flash|ture) --设置对备份的目录的具有读写权限,即将只读模式进行关闭
list = false 查看模块列表 --确认是否可以将服务配置的模块信息,在客户端可以查看显示
hosts allow = 172.16.1.0/24 白名单 --设置备份目录允许进行网络数据备份的主机地址或网段信息,即设置白名单
hosts deny = 0.0.0.0/32 黑名单 --设置备份目录禁止进行网络数据备份的主机地址或网段信息,即设置黑名单
auth users = rsync_backup 认证用户 --指定访问备份数据目录的认证用户信息,为虚拟定义的用户,不需要进行创建
secrets file = /etc/rsync.password 认证密码文件 --设置访问备份数据目录进行认证用户的密码文件信息,会在文件中设置认证用户密码信息
[backup] 模块 --指定备份目录的模块名称信息
comment = "backup dir by oldboy" 对模块的注释说明
path = /backup 备份路径 --指定数据进行备份的目录信息

rsync服务错误排查:
1)检查错误日志
2)可以在模拟环境下,模拟练习错误
1. rsync服务端开启的iptables防火墙
【客户端的错误】
No route to host
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
【异常问题解决】
关闭rsync服务端的防火墙服务(iptables)
[root@backup mnt]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@backup mnt]# /etc/init.d/iptables status
iptables: Firewall is not running.

2. rsync客户端执行rsync命令错误
【客户端的错误】
The remote path must start with a module name not a /
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/backup
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【异常问题解决】
rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)

3. rsync服务认证用户失败*****
【客户端的错误】
auth failed on module oldboy
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【异常问题解决】
1. 密码真的输入错误,用户名真的错误
2. secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致
3. /etc/rsync.password文件权限不是600
4. rsync_backup:123456密码配置文件后面注意不要有空格
5. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称

4. rsync服务位置模块错误
【客户端的错误】
Unknown module 'backup'
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【异常问题解决】
1. /etc/rsyncd.conf配置文件模块名称书写错误

5. rsync服务权限阻止问题
【客户端的错误】
Permission denied
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13)
sent 196 bytes received 27 bytes 63.71 bytes/sec
total size is 349 speedup is 1.57
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
【异常问题解决】
1. 备份目录的属主和属组不正确,不是rsync
2. 备份目录的权限不正确,不是755

6. rsync服务备份目录异常
【客户端的错误】
chdir failed
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【异常问题解决】
1. 备份存储目录没有建立
2. 建立的备份存储目录和配置文件定义不一致
说明:如果没有备份存储目录

7. rsync服务无效用户信息
【客户端的错误】
invalid uid rsync
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
【异常问题解决】
rsync服务对应rsync虚拟用户不存在了

8. 客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
【客户端的错误】
password file must not be other-accessible
【错误演示过程】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
password file must not be other-accessible
continuing without password file
Password:
sending incremental file list
sent 26 bytes received 8 bytes 5.23 bytes/sec
total size is 349 speedup is 10.26
【异常问题解决】
rsync客户端的秘钥文件也必须是600权限

9. rsync客户端连接慢问题
IP === 域名 反向DNS解析
【错误日志信息】
错误日志输出
2017/03/08 20:14:43 [3422] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.31: Name or service not known
2017/03/08 20:14:43 [3422] connect from UNKNOWN (172.16.1.31)
2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.31)
2017/03/08 20:14:43 [3422] receiving file list
2017/03/08 20:14:43 [3422] sent 76 bytes received 83 bytes total size 349
正确日志输出
2017/03/08 20:16:45 [3443] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
2017/03/08 20:16:45 [3443] connect from nfs02 (172.16.1.31)
2017/03/08 20:16:45 [3443] rsync to backup/ from rsync_backup@nfs02 (172.16.1.31)
2017/03/08 20:16:45 [3443] receiving file list
2017/03/08 20:16:45 [3443] sent 76 bytes received 83 bytes total size 349
【异常问题解决】
查看日志进行分析,编写rsync服务端hosts解析文件

10 rsync服务没有正确启动
【错误日志信息】
Connection refused (111)
【错误演示过程】
[root@oldboy-muban ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
【异常问题解决】
[root@oldboy-muban ~]# rsync --daemon
[root@oldboy-muban ~]# ss -lntup |grep rsync
tcp LISTEN 0 5 :::873 :::* users:(("rsync",1434,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",1434,4))
[root@oldboy-muban ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
sent 196 bytes received 27 bytes 49.56 bytes/sec
total size is 349 speedup is 1.57

扩展说明:rsync启动服务扩展参数
--port 指定rsync服务端口号信息,默认是873
--config=xxx 指定识别的rsync服务配置文件信息

[root@backup ~]# rsync --daemon --port 8370 --config=/etc/rsyncd.conf
[root@backup ~]# ps -ef |grep rsync
root 24759 1 0 16:50 ? 00:00:00 rsync --daemon --port 8370 --config=/etc/rsyncd.conf
root 24761 24464 0 16:50 pts/1 00:00:00 grep --color=auto rsync
[root@backup ~]# netstat -lntup|grep rsync
tcp 0 0 0.0.0.0:8370 0.0.0.0:* LISTEN 24759/rsync
tcp 0 0 :::8370 :::* LISTEN 24759/rsync

rsync服务扩展应用
① 守护进程多模块功能配置
第一步:修改配置文件
vim /etc/rsyncd.conf
[backup01]
comment = "backup dir by oldboy"
path = /backup
[backup02]
comment = "backup dir by oldboy"
path = /backup02

第二步:创建多模块目录
mkdir /backup02
chown -R rsync.rsync /backup02

第三步:重启服务程序
killall rsync
rsync --daemon

第四步:进行测试检查

② 守护进程的排除功能实践
第一种数据备份排除方式:--exclude
rsync -avz /test_dir/ --exclude=b --exclude=d rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
rsync -avz /test_dir/ --exclude={b,d} rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
rsync -avz /test_dir/ --exclude={b..d} rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
第二种数据备份排除方式:--exclude-from=file
rsync -avz /test_dir/ --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password

③ 守护进程来创建备份目录
rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/sa/ --password-file=/etc/rsync.password
rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/dev/ --password-file=/etc/rsync.password
rsync -avz /etc/hosts --exclude-from=./exclude_file.txt rsync_backup@172.16.1.41::backup01/dba/ --password-file=/etc/rsync.password

④ 守护进程的访问控制配置
三种情况:
1. 只有白名单,白名单网段或主机信息允许。其余阻止
2. 只有黑名单,黑名单网段或主机信息阻止,其余允许
3. 有黑名单也要白名单,白名单网段或主机信息允许,黑名单网段或主机信息阻止,其余允许
建议只选择前两种方式配置
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0./32

⑤ 守护进程无差异同步配置
我有的,你也有;我没有的,你也不能有
rsync -avz /test_dir/ --delete rsync_backup@172.16.1.41::backup01 --password-file=/etc/rsync.password
说明:一定要谨慎使用,否则可能会清空备份目录;
如果要快速清空目录数据,也可以使用无差异同步清空

⑥ 守护进程的列表功能配置
list = false
说明:表示是否列表显示rsync服务端所有模块信息
[root@nfs01 test_dir]# rsync rsync_backup@172.16.1.41::
backup01 "backup dir by oldboy"
backup02 "backup dir by oldboy"

上一篇:Redis GeoHash核心原理解析


下一篇:C++客户端访问WebService VS2008