一、rsync指令简介
rsync 是Linux体用下的数据镜像备份文件,是一个远程数据同步工具。可通过LAN/WAN快速同步 多台主机间的文件信息等。
对于rsync命令来说,其内部使用所谓的“rsync算法”,来使得本地和远程两个主机之间文件达到同步。

但是在Linux中,有一个指令和rsync 及其相似,scp指令也可以实现远程拷贝,实现远程文件的传输
但是两者之间的最大区别在于:rsync不支持远程到远程的拷贝,但scp支持。

二、rsync同步说明
rsync的目的是实现本地主机和远程主机上的文件同步(包括本地推到远程,远程拉到本地两种同步方式)
注:也可以实现本地不同路径下文件的同步,但不能实现远程路径1到远程路径2之间的同步(scp可以实现)。

同步原理介绍:不考虑rsync的实现细节,就文件同步而言,涉及了源文件和目标文件的概念,还涉及了以哪边文件为同步基准。
例如,1、要向让远程主机上的文件和本地文件保持同步,则是以本地文件作为同步基准,将本地文件作为源文件推送到远程主机上。
2、要向让本地文件和远程主机上的文件保持同步,则是以远程主机文件作为同步基准,将远程主机文件作为源文件推送到本地主机上。

三、实例演示
1、测试环境
Centos 7 server:192.168.100.1 【本地机器】
Centos 7 client: 192.168.100.2 【远程机器】
2、rsync同步方式
下面以两种方式实现文件同步
第一种方式:rsync 通过ssh方式同步
1、Rsync server端和client端都需要安装rsync
可通过yum安装

yum install -y rsync

2、使用
前提:需知道远程服务器开启ssh端口和账号密码
A、推文件:【本地到远程】

rsync -av /etc/passwd  192.168.100.2:/tmp/passwd.txt

B、拉文件 【远程到本地】

rsync -av  192.168.100.2:/tmp/passwd.txt  /tmp/test.txt

指定ssh端口进行远程连接

rsync -av -e "ssh -p 22" 192.168.100.2:/tmp/passwd.txt  /tmp/a.txt

第二种方式:rsync通过服务的方式同步
1、服务端server配置:
对应机器:192.168.100.1
1、编辑配置文件/etc/rsyncd.conf

vim /etc/rsyncd.conf
motd file = /etc/rsyncd.motd
transfer logging = yes
log file = /var/log/rsyncd.log   【log文件】
port = 873
address = 192.168.100.1   【server端IP】
uid = nobody
gid = nobody
use chroot = no
read only = no
max connections = 10
[common]
comment = rsync info
path = /tmp       【server端基础路径】
ignore errors
auth users = admin
secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.204.0/255.255.255.0  【允许远程连接的client】
hosts deny = *
list = false

2、创建用户密码文件

echo "admin:123456" > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

3、创建提示信息文件:

echo  "rsync  info"  >  /etc/rsyncd.motd

4、启动服务:

rsync  --daemon
echo  "rsync  --daemon"  >>  /etc/rc.local

客户端client端 配置:

2、客户端client配置:

# 创建密码文件(免密码输入):
echo  "123456"  >  /root/passwd
chmod  600  /root/passwd

3、远程拉取文件:

rsync -avz --password-file=/root/passwd  admin@192.168.100.2【远程机器】::common /tmp

4、本地推送到远程

rsync -avz --password-file=/root/passwd /tmp/ admin@192.168.100.2【远程机器】::common

四、常见用例:
有时,我们需要将远程数据和本地数据进行实时同步,但是总是这样执行任务,太过于麻烦,为了方便起见,通常我们会做定时cron 来执行同步指令。
实现步骤:
1、新建一个rsync.sh 文件,在文件中写入执行同步的命令

#!/bin/bash
rsync -avz --password-file=/root/passwd  admin@192.168.100.2::common /tmp  >/dev/null 2>&1

2、赋予执行权限

chmod 755 rsync.sh

3、然后添加到定时任务中:

crontab -e

例如:

在定时文件中写入定时执行任务,实例如下:
       * * * * * /home/rsync.sh                 每分钟执行一次同步脚本;
        0 * * * * /home/rsync.sh                 每小时执行一次同步脚本;
        0 0 * * * /home/rsync.sh                 每天零点执行一次同步脚本; 
        0 9,18 * * * /home/rsync.sh            每天的9AM和6PM执行一次同步脚本;

4、添加成功后,可以通过查询log文件来判断
日志存放地方:/var/log/cron