rsync 可实现全量及增量的本地或远程数据镜像同步备份的优秀工具
rsync官方详细说明:http://www.samba.org/ftp/rsync/rsync.html
rsync学习视频:https://blog.51cto.com/oldboy/1216457

rsync学习整理笔记
1.1 rsync 一种快速、通用、远程(和本地)文件复制工具

rsync特性:
1.支持拷贝特殊文件如链接、设备等;
2.可以有排除指定文件或目录的同步功能,相当于打包命令tar的排除功能;
3.可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变;
4.可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高;
5.可以使用rcp.rsh.ssh等方式来配合传输文件,也可以直接通过socket(进程方式)传输;
6.支持匿名的或认证的进程模式传输,可实现方便安全的进行数据备份及镜像。
7.不需要超级用户权限

1.2 rsync 工作方式:
1.主机本地间的数据传输;
2.借助rcp、ssh等通道来传输数据(类似scp命令);
3.以守护进程socket的方式传输数据(这个是rsync重要功能)。

1.2.1 本地数据传输模式 local-only model
rsync本地传输模式语法:
rsync [OPTION...] SRC... [DEST]
语法说明:
1.rsync 为同步命令
2.[OPTION]为同步时的参数选项
3.SRC为源,即待拷贝的分区、文件或目录等
4.[DEST]为目的分区、文件或目录等

示例1:把系统的hosts文件同步到opt目录

[root@root /]# rsync /etc/hosts /opt/ <== cp -p /etc/hosts /opt/

示例2:把opt目录拷贝到mnt目录下

[root@root /]# rsync -avz /opt/ /mnt/ <== cp -ap /opt/ /mnt/

1.2.2 通过远程shell进行数据传输remote shell model
通过远程shell访问:
拉取Pull:rsync [OPTION...] [USER @]HOST:SRC ... [DEST]
推送Push:rsync [OPTION...] SRC ... [USER @] HOST:DEST
语法说明:
1.rsync 为同步命令;
2.[OPTION...]为同步时的参数选项;
3.[USER @]HOST: 为Rsync同步的远程地连接用户和主机地址;
4.SRC为源;
5.DEST为目的
拉取(get),表示从远端主机把数据同步到执行命令的本地主机相应目录;
推送(put),表示从本地主机执行命令把本地的数据同步到远端主机指定的目录下。

拉取示例语法:远端opt目录抓取到本地tmp目录
rsync -vartopgP -e '-ssh -p 22' [email protected]:/opt/ /tmp/
推送实用语法:本地hosts文件推送到远端家目录
rsync -avz /etc/hosts -e 'ssh -p 22' [email protected]:~
关键语法说明:

  1. -vzrtopg 相当于上文的-avz,表示同步时文件和目录属性不变;
    2.--progress 显示同步过程,可以用-P替换;
    3.-e 'ssh -p 22',表示通过ssh的渠道传输数据,-p 22可省略。

1.2.3 使用守护进程的方式数据传输 daemon mode
通过守护进程方式传输同样分为两种情况,每种情况又有两种语法写法。分别如下:
通过rsync守护进程访问:
拉取: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
特别值得注意的是,与远程shell方式的命令不同的是,第一种语法格式,本节命令[USER @] HOST :: DEST 结尾处,均为双冒号连接SRC与DEST,另外,这个SRC或DEST也不在是路径了,而是守护进程中配置的模块名称,下文会有例子详细说明。
拉取实践命令:

>>>rsync -vzrtopgP rsync://[email protected]:/tmp/ /opt/ \
--password-file=/etc/rsync.password #自动读取密码文件中的密码,免密登录

推送实践命令:

>>>rsync -vzrtopgP /test/ rsync://[email protected]:/tmp/ \
--password-file=/etc/rsync.password #自动读取密码文件中的密码,免密登录

特别说明:以上的用法是个不错的方法,他在拉取和推送时的写法极其类似,尤其是最后的守护进程服务时,第一种方法通过双冒号家加模块名的方法不利于记忆。所以对于初学者,建议大家也可以记忆这个语法格式。

1.3 rsync 命令同步参数选项
rsync [IPTION...] SRC... [DEST]
常用参数选项说明:
-v, --verbose 详细模式输出,传输时的进度等信息;
-z, --compress 传输时进行压缩以提高传输效率, --compress-level=NUM可按级别压缩;
-r, --recursive 对子目录以递归模式,即目录下的所有目录都同样传输,注意小写r;
-t, --times 保持文件时间信息;
-o, --owner 保持文件属主信息;
-p, --perns 保持文件权限;
-g, --group 保持文件属组信息;
-P, --progress 显示同步的过程及传输时的进度等信息;
-a, --archive 归档模式(archive mode),表示以递归的方式传输文件,并保持所有文件属性,等于 -rtopgDl;
-D, --devices 保持设备文件信息;
-l, --links 保留软链接;
-e, --rsh=COMMAND 使用的信道协议,指定代替rsh的shell程序。例如:ssh --exclude=PATTERN 指定排除不需要传输的文件模式
保持同步目录及文件属性:
这里的-avzP 相当于 -vzrtopDlP (还多了个Dl功能),生产环境常用的参数选项为-avzP或者-vzrtopgP如果是放在加入脚本中,也可以把-v和-pqudiao 。这里的--progress 可以用-P代替。
特别提示:请注意一下两个命令的差别:
a. rsync -avz /opt/ /tmp/
b. rsync -avz /opt /tmp/
1.中/opt/意思是,仅把opt目录里面的内容同步过来,opt目录本身并不同步,而后者b中/opt表示把opt本身及其内容全部同步到/tmp/下,仅一个/(斜杠之差),意义就大不相同,请注意使用的差别。
2.后面要说的通过远程shell进行数据传输的内容也会有类似的问题,请牢记。

1.4 借助ssh通道在不同主机间传输数据
借助ssh通道从远端主机拉取数据例子实践:
1.4.1 拉取实践:

[root@root ~]# rsync -avzP -e 'ssh -p 22' [email protected]:/opt /tmp

关键语法说明:

  1. -avz 相当于-vzrtopgDl ,表示同步时文件和目录属性不变;
  2. -P 显示同步的过程,可以用--progress替换;
  3. -e 'ssh -p 22',表示通过ssh的通道传输数据,ssh默认端口没变的话-p 22 可省略;
  4. [email protected]:/opt 远程的主机系统用户,地址,路径;
    5./tmp 本地的路径
    实例实践:通过root用户从10.0.0.11的/opt目录(包含目录本身)把数据拉取到本地的/tmp目录
    [root@root ~]# rsync -avzP -e 'ssh -p 22' [email protected]:/opt /tmp

1.4.2 借助ssh key密钥实现数据免密登录验证加密传输
说明:如果事先设置了ssh key密钥免登录验证,即可用rsync通过ssh方式免登录验证同步传输数据,这是生产场景常用的方法之一。
配置ssh key密钥实现数据免登录验证:
https://blog.51cto.com/000011211684/1693597
轻松实现远程批量拷贝文件脚本:
https://blog.51cto.com/oldboy/1205715

特别提示:本文免验证连接分发文件是基于普通用户oldboy的,如果要实现hosts文件等的推送工作,是需要root权限的,我们应该怎么办呢?
方法大概有三:
方法一:此时可以把oldboy用户配置sudo权限用户,然后就可以实现通过sudo功能来实现普通用户推送只有root才能处理的问题了,此法为推荐的方法。
方法二:还记得前面讲的setuid权限位么?可以把所有客户端如echo、cp、scp命令,修改为setuid位,这样在推送文件时就可以使用以上命令,来搞定了。不过这个方法,不推荐。
方法三:可以配置root用户的免密登录认证,但这又会带来一定的安全问题(虽然可以防火墙封堵ssh端口),此方法比方法一稍逊一筹。
更详细的说明可见ssh key的相关章节, 分发数据免密码登录的几点须知!
-e, - rsh = COMMAND 指定要使用的远程shell

1.5 rsync守护进程传输文件
1.5.1 rsync服务端配置
编辑rsync配置文件并启动rsync服务

[root@root ~]# vim /etc/rsyncd.conf #rsync服务端配置,没有的话需要手动生成
uid = rsync  ##运行rsync守护进程的用户-rsync
gid = rsync  ##运行rsync守护进程的组-rysnc
use chroot = no ##不实用chroot
max connections = 200 ##并发设置及最大连接数
strict modes = yes ##是否检查口令文件权限
#port = 873  ##rsync服务默认端口873
timeout = 100 ##超时设置
###安装完rsync服务后自动生成的文件,添加一下也无妨###
pid file = /var/run/rsyncd.pid  ##pid文件的存放位置
lock file = /var/run/rsync.lock ##锁文件的存放位置
log file = /var/log/rsyncd.log  ##日志记录文件的存放位置
###模块参数配置####
[oldboy] ##模块名,可根据实际情况设定
path = /oldboy/ ##备份路径
comment = This is a oldboy. ##这是模块注释信息,可忽略。
ignore errors  ##可以忽略一些无关的IO错误
read only = false ##只读为假,可写文件
list - false  ##不允许列文件
hosts allow = 192.168.120.0/24 ##允许主机
hosts deny = 0.0.0.0/32 ##禁止主机
auth users =rsync_backup #认证用户/授权用户,如果没有这行则表明是匿名,此用户与系统无关
secrets file = /etc/rsync.password #上面虚拟用户的密码文件:明文的

dos2unix /etc/rsyncd.conf (格式化,当windows文件拉入linux中时操作由于格式问题可以先格式化一下)

[root@root /]# useradd rsync -s /sbin/nologin -M #添加用户不用登陆不需要家目录
[root@root /]# mkdir /oldboy
[root@root /]# chown -R rsync.rsync oldboy
[root@root /]# chown -R rsync.rsync oldboy

配置用于rsync同步的账号、密码及账号文件权限

[root@root etc]# echo "rsync_backup:oldboy" >> /etc/rsync.password
[root@root etc]# cat rsync.password 
rsync_backup:oldboy
[root@root etc]# ls -l rsync.password 
-rw-r--r--. 1 root root 20 12月 21 17:45 rsync.password
[root@root etc]# chmod 600 /etc/rsync.password #明文密码文件权限给到最小-保密
[root@root etc]# ll rsync.password
-rw-------. 1 root root 20 12月 21 17:45 rsync.password

rsync启动服务

[root@root etc]# rsync --daemon  ##后台运行rsync服务
[root@root etc]# netstat -natp | grep rsync 
tcp  0   0 0.0.0.0:873     0.0.0.0:*       LISTEN      9985/rsync          
tcp  0   0 :::873          :::*            LISTEN      9985/rsync          
[root@root etc]# lsof -i :873 
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   9985 root    4u  IPv4  35058      0t0  TCP *:rsync (LISTEN)
rsync   9985 root    5u  IPv6  35059      0t0  TCP *:rsync (LISTEN)
[root@root etc]# ps -ef | grep 873
root      10005   9801  0 17:50 pts/1    00:00:00 grep 873

1.5.2 rsync客户端配置

##设定密码文件,注:客户端密码文件路径与服务端全无关系,弄得一样便于记忆
[root@root /]# echo "oldboy" > /etc/rsync.password
[root@root /]# cat rsync.password 
oldboy
[root@root etc]# ls -l rsync.password 
-rw-r--r--. 1 root root 20 12月 21 17:45 rsync.password
#明文密码文件权限给到最小600,切莫忘记不然后续从客户端推送数据时会报错
[root@root etc]# chmod 600 /etc/rsync.password 
[root@root etc]# ll rsync.password
-rw-------. 1 root root 20 12月 21 17:45 rsync.password

1.5.3 下面进行守护进程传输文件测试:
rsync服务端192.168.120.120
rsync客户端192.168.120.121
要求:将本地客户端的web数据打包备份后传输到服务端上

[root@root www]# man rsync
##通过man手册可以看下rsync守护进程语法格式(之前详细介绍过)
rsync(1)                                                       rsync(1)
NAME
    rsync — a fast, versatile, remote (and local) file-copying tool
SYNOPSIS
    Local:  rsync [OPTION...] SRC... [DEST] ##本地传输模式
    Access via remote shell:  ##通过shell传输的语法格式
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
    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
...省略若干...

1.5.3.1 守护进程备份操作-Pull推送(适用于数据备份)

#使用tar命令打包本地web数据,参数中的"-"符号加与不加功能一样
[root@root www]# tar -zcvf html_$(date +%F).tar.gz html 
html/
[root@root www]# ll
总用量 28
drwxr-xr-x.  2 root      root 4096 8月   2 2013 cgi-bin
drwxr-xr-x.  3 root      root 4096 11月 19 22:12 error
drwxr-xr-x.  2 root      root 4096 8月   2 2013 html
-rw-r--r--.  1 root      root  109 12月 21 21:13 html_2018-12-21.tar.gz
drwxr-xr-x.  3 root      root 4096 11月 19 22:12 icons
drwxr-xr-x. 14 root      root 4096 11月 19 22:17 manual
drwxr-xr-x.  2 webalizer root 4096 11月 19 22:15 usage
##客户端通过守护进程方式传输web备份数据
[root@root www]# rsync -azvp html_2018-12-21.tar.gz [email protected]::oldboy
Password: 
sending incremental file list
html_2018-12-21.tar.gz

sent 196 bytes  received 27 bytes  49.56 bytes/sec
total size is 109  speedup is 0.49

注意:
##使用上面rsync这条命令语句还需要填写密码,传输比较麻烦,只需要在后面加上 --password-file=/etc/rsync.password 引用密码文件就能达到免密传输的效果

>>推送1 rsync -azvp html_2018-12-21.tar.gz [email protected]::oldboy --password-file=/etc/rsync.password
>>推送2 rsync -azvp html_2018-12-21.tar.gz rsync://[email protected]/oldboy --password-file=/etc/rsync.password

语法解释:看不懂这条命令的,请参考上面的1.2.3 使用守护进程的方式数据传输 部分。

1.5.3.2 进入rsync服务端查看客户端的备份数据

[root@root etc]# cd /oldboy/  ##进入指定的path路径
[root@root oldboy]# ll
总用量 4
-rw-r--r--. 1 rsync rsync 109 12月 21 21:13 html_2018-12-21.tar.gz

1.5.3.3 rsync使用过程中的报错整理
错误1: 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 服务,开启服务。 或者开启了防火墙指定的端口无法访问。

错误2:@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:服务器端同步目录没有权限,cwrsync默认用户是Svcwrsync。为同步目录添加用户Svcwrsync权限。

错误3:@ERROR: failed to open lock file
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:服务器端配置文件 rsyncd.conf中添加 lock file = rsyncd.lock 即可解决。

错误4:@ERROR: invalid uid nobody
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.2]
解决:在rsyncd.conf文件中添加下面两行即可解决问题 。(添加守护进程用户+组)
UID = 0
GID = 0

错误5:@ERROR: auth failed on module test2
rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=3.0.2]
解决:服务端没有指定正确的secrets file,请在 [test2]配置段添加如下配置行:
auth users = coldstar #同步使用的帐号
secrets file = rsyncd.password #密码文件

错误6:password file must not be other-accessible
解决:客户端的pass文件要求权限为600, chmod 600 /etc/rsync.pass 即可。

错误7:rsync: chdir /cygdrive/c/work failed
: No such file or directory (2)
解决:服务器端同步文件夹路径或名称写错了,检查path。

错误8:No route to hosts
解决:先telnet一下,出现连接拒绝,表示被防火墙阻挡,可以关闭防火墙。
===============================================================
rsyncserver 服务启动时报错“rsyncserver服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报”服务。”
解决方法:将安装目录下的rsyncd.pid文件删除,再重新启动RsyncServer服务。一般是异常关机导致的。

1.5.4 备份全网服务器数据生产架构方案案例模型
上机实战考试题:
某公司里有一台web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其它机器上做一个周期性定时备份。要求如下:
每天晚上0点整在web服务器A上打包备份网站程序目录并通过rsync命令推送到服务器B上备份保留(备份思路可以是先在本地按日期打包,然后在推到备份服务器上)
具体要求如下:
1.web服务器A和备份服务器B的备份目录都必须为/backup
2.web服务器站点目录嘉定为(/var/www/html)
根据 1.5 rsync守护进程传输文件 的配置做修改。其中rsync服务端=备份服务器,rsync客户端=web服务器。

1.5.4.1 web服务器A配置 192.168.120.121

[root@root etc]# mkdir -p /backup/192.168.120.121
[root@root etc]# chown -R rsync  /backup/
[root@root etc]# cd /study/
[root@root study]# vim web_bak.sh  ##编辑web服务器备份脚本
cd /var/www/ &&\
tar -zcvf /backup/192.168.120.121/html_$(date +%F).tar.gz ./html &&\ ##备份数据打包
cd /backup/ &&\
rsync -azvp . [email protected]::backup --password-file=/etc/rsync.password >/dev/null 2>&1 
find /backup -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
[root@root study]# crontab -e ##添加定时任务
00 00 * * * sh /study/web_bak.sh >/dev/null 2>&1 

1.5.4.2 备份服务器B配置 192.168.120.120

[root@root ~]# cd /etc/
[root@root etc]# cp rsyncd.conf rsyncd.conf_bak
[root@root etc]# vim rsyncd.conf
[backup]  ##该模块名,一般都弄一致便于记忆
path = /backup/ ##修改备份目录
[root@root etc]# mkdir /backup
[root@root etc]# chown -R rsync /backup/
[root@root backup]# pkill rsync  #杀掉rsync服务
[root@root backup]# lsof -i :873
[root@root backup]# rsync --daemon #重新启动rsync服务
[root@root backup]# lsof -i tcp:873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   16058 root    4u  IPv4  50262      0t0  TCP *:rsync (LISTEN)
rsync   16058 root    5u  IPv6  50263      0t0  TCP *:rsync (LISTEN)

1.5.5 守护进程分发操作-Push拉取(适用于数据分发)

##web服务器上数据拉取操作##
[root@root study]# rsync -azvp [email protected]::backup /mnt --password-file=/etc/rsync.password
receiving incremental file list
./
192.168.120.121/
192.168.120.121/html_2018-12-22.tar.gz

sent 90 bytes  received 341 bytes  862.00 bytes/sec
total size is 111  speedup is 0.26
[root@root study]# cd /mnt/
[root@root mnt]# ll
总用量 4
drwxr-xr-x. 2 501 501 4096 12月 22 03:10 192.168.120.121

1.5.5 分发数据生产架构方案案例模型
下载、分发数据。

1.6 rsync应用拓展排除打包

首先看tar如何进行排除打包
[root@root 192.168.120.121]# cd /study/
[root@root study]# ll
总用量 20
-rw-r--r--. 1 root root 1471 12月 21 14:32 ssh_expect.sh
-rw-r--r--. 1 root root   17 12月 21 14:26 ssh_host_ip.txt
-rw-r--r--. 1 root root  458 12月 21 14:33 ssh_host.sh
-rw-r--r--. 1 root root 1048 12月 21 14:28 ssh_host.sh_bak
-rw-r--r--. 1 root root  303 12月 22 01:18 web_bak.sh
##使用 --exclude 排除web_bak.sh打包
[root@root study]# tar -zcvf a.tar.gz ./* --exclude=web_bak.sh 
./ssh_expect.sh
./ssh_host_ip.txt
./ssh_host.sh
./ssh_host.sh_bak
[root@root study]# tar -ztvf a.tar.gz ##查看下打包内容
-rw-r--r-- root/root      1471 2018-12-21 14:32 ./ssh_expect.sh
-rw-r--r-- root/root        17 2018-12-21 14:26 ./ssh_host_ip.txt
-rw-r--r-- root/root       458 2018-12-21 14:33 ./ssh_host.sh
-rw-r--r-- root/root      1048 2018-12-21 14:28 ./ssh_host.sh_bak

rsync也可以使用--exclude 参数进行排除传输文件

[root@root backup]# mkdir a b d c  ##创建文件a、b、c、d四个文件进行排除推送测试
[root@root backup]# touch a/1 b/2 c/3 d/4
[root@root backup]# tree
.
├── 192.168.120.121
│   └── html_2018-12-22.tar.gz
├── a
│   └── 1
├── b
│   └── 2
├── c
│   └── 3
└── d
    └── 4
[root@root backup]# rsync -azvp --exclude=a/1 --exclude=b . [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
./
a/
c/
c/3
d/
d/4
sent 229 bytes  received 62 bytes  582.00 bytes/sec
total size is 111  speedup is 0.38

另一种方式:修改rsync配置文件。
在/etc/rsyncd.conf配置文件中添加一行 exclude = a b/2
注意: exclude = a b/2 表示排除文件夹a 与文件夹b下面的2文件
[root@root backup]# vim /etc/rsyncd.conf
exclude = a b/2 ##添加需要排除的文件或目录

rsync客户端的排除测试-Push推送:(虽然报错,但是到rsync服务器上确实有这些文件。疑似权限问题)

[root@root backup]# rsync -azvp . [email protected]::backup --password-file=/etc/rsync.password   
sending incremental file list
./
skipping daemon-excluded directory "a"
*** Skipping any contents from this failed directory ***
b/
skipping daemon-excluded file "b/2"
c/
c/3
d/
d/4
sent 255 bytes  received 63 bytes  212.00 bytes/sec
total size is 111  speedup is 0.35
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

rsync客户端的排除测试-Pull拉取:

[root@root backup]# rsync -azvp [email protected]::backup /mnt --password-file=/etc/rsync.password
receiving incremental file list
./
192.168.120.121/
192.168.120.121/html_2018-12-22.tar.gz
b/
c/
c/3
d/
d/4
sent 140 bytes  received 480 bytes  1240.00 bytes/sec
total size is 111  speedup is 0.18

参数说明:
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
注意:服务端的排除参数用于客户端的拉取Push

1.7 rsync应用拓展无差异同步讲解
1.7.1 本地删除--delete参数使用
要实现这种同步方式就要使用rsync的--delete参数。下面是--delete参数使用详解:

[root@root /]# mkdir /boy #创建两个临时文件夹,第一个文件夹空的,第二个有内容
[root@root /]# mv /mnt/ /girl
[root@root /]# rsync -azvP --delete boy/ girl/
#由于boy文件夹内容为空,所以使用--delete参数进行无差异同步时会将girl文件夹内容删除
sending incremental file list
./
deleting d/4
deleting d/
deleting ceshi/
deleting c/3
deleting c/
deleting b/
deleting 192.168.120.121/html_2018-12-22.tar.gz
deleting 192.168.120.121/

sent 29 bytes  received 15 bytes  88.00 bytes/sec
total size is 0  speedup is 0.00
[root@root /]# tree girl/
girl/
0 directories, 0 files

1.7.2 无差异同步-拉取Pull

[root@root ~]# rsync -azvP --delete [email protected]::backup /tmp --password-file=/etc/rsync.password

以上方式表示远程服务端发生变化的文件,例如删除了文件,那么如果本地要保持与服务端数据一致,就可以使用这个命令。
这个命令非常危险,使用不当可能造成本地目录及文件,甚至是根本目录数据丢失,因此要特别注意小心使用。
执行--delete参数从rsync服务端往客户端拉取(Push)数据时,一定要小心,最好不用,它比从rsync客户端带--delete参数往rsync服务端推送(Pull)危险的多,客户端带--delete参数往服务端推送仅删除服务端模块下的数据,而前者有能力删除rsync客户端本地的所有数据包括根下的所有目录。

1.7.3 无差异同步-生产场景应用
一般是有需要两台服务器之间,必须要求数据一致,且时时性又不是很高的情况下,如果两台负载均衡下面web服务器之间的同步,或者高可用双击配置之间的同步等。rsync无差异同步非常危险,而且有很多的替代方案,因此,生产场景没有特殊的需求,应避免使用。

1.8 rsync应用拓展多模块同步
添加多模块配置,其实并没有多大变化。只是加了一个模块名与Path路径

[root@root backup]# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 100
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list - false
hosts allow = 192.168.120.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#exclude =  a b/2
[backup]
path = /backup/
[oldboy]
path = /oldboy/

特别说明:添加多个模块可以有多个路径(相当于多个共享)
如果需要每个模块都有不同的账号和密码,就需要在每一个模块里面添加账号与密码,由于自学没那么高要求,就简单添加了一个模块名加模块路径。不在模块里面添加的配置就相当于全局变量。

1.9 rsync服务配置回顾
1.9.1 服务端配置
配置rsync的配置文件:/etc/rsyncd.conf
创建同步的本地目录/backup并根据需要授权rsync服务的用户可读写权限,/backup目录和/etc/rsync.password为配置文件中path=/backup参数配置。
账号及密码文件配置

[root@root etc]# echo "rsync_backup:oldboy" >> /etc/rsync.password
[root@root etc]# chmod 600 /etc/rsync.password #明文密码文件权限给到最小-保密

提示:
1./etc/rsync.password为配置文件中secrets file = /etc/rsync.password的参数配置
2.账号rsync_backup为配置文件中auth users = rsync_backup的参数配置

1.9.2 客户端配置
添加密码文件与修改密码文件权限
[root@root /]# echo "oldboy" > /etc/rsync.password
[root@root etc]# chmod 600 /etc/rsync.password

提示:
客户端的密码文件路径/etc/rsync.password与服务端的免密文件路径/etc/rsync.password没有任何关系,只要和客户端rsync命令的参数--password-file=/etc/rsync.password中的路径对应即可

1.9.3 客户端操作命令细节
Pull推送

>>>rsync -avzP . [email protected]::backup --password-file=/etc/rsync.password
>>>rsync -avzP . rsync://[email protected]/backup --password-file=/etc/rsync.password

注意:第二条推送命令的推送路径必须是服务端配置的path路径下才行
Push抓取:

>>>rsync -avzP  [email protected]::backup /mnt --password-file=/etc/rsync.password
>>>rsync -avzP rsync://[email protected]/backup /mnt --password-file=/etc/rsync.password

2.0 rsync配错思路
2.0.1 rsync服务端排错思路
1.查看rsync服务配置文件路径是否正确,正确的默认路径为:/etc/rsyncd.conf;
2.查看配置文件里面的host allow,host deny,允许的ip网段是否是允许客户端访问的ip网段;
3.查看配置文件中的path参数里面的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属主和组);
4.查看rsync服务是否启动。查看宁陵为ps -ef | grep rsync ,端口是否存在netstat -lnt |
grep 873(rsync默认端口为873);
5.查看iptables防火墙和selinux是否开启允许rsync服务通过,也可考虑关闭;
6.查看服务器rsync配置的密码文件是否为600的权限,密码文件格式是否正确,正确格式用户名:密码,文件路径和配置文件里的secrect files参数对应;
7.如果是推送数据,要查看下配置rsyncd.conf文件中用户是否对模块下目录有可读写的权限;

2.0.2 rsync客户端排错思路
1.查看客户端rsync配置的密码文件是否为600权限,密码文件格式是否正确,注意:仅需要有密码,并且和服务端的密码一致;
2.用telnet连接rsync服务器ip地址873端口,查看服务是否启动(可测试服务端防火墙是否阻挡),telnet 10.0.0.141 873
3.客户端执行命令时rsync -avzP [email protected]::backup --password-file=/etc/rsync.password
此命令的细节要记清楚,尤其192.168.120.120::backup 处的双冒号及随其后的backup为模块命令。