一、rsync概述

         rsync是类unix系统下的数据镜像备份工具——remote sync。一款支持快速增量备份的工具,支持本地复制远程同步等,rsync 命令来同步系统文件之前要先登录remote 主机认证,认证过程中用到的协议有2种:ssh 协议和rsync协议。

 rsync特性

  1. 1.     能更新整个目录和树和文件系统

  2. 2.     有选择性的保持符号链接、硬链接、文件属性、权限、设备以及时间等

  3. 3.     对于安装来说,无任何特殊权限要求

  4. 4.     对于多个文件来说,内部流水线减少文件等待的延时

  5. 5.     能用rsh、ssh或直接端口作为传输入口端口

  6. 6.     支持匿名rsync同步文件,是理想的镜像工具

二、同步源

rsync(服务器):

指备份操作的远程服务器,也称为备份源

主要包括两种:ssh源、rsync源

2.1、ssh同步源

实验环境准备:一台服务器,一台客户端

在服务器和客户端上创建单独的测试目录(/server/ssh、/client/ssh)

2.1.1、下行同步(下载)

rsync -avz 服务器地址:/服务器目录/  本地目录

rsync –avz 192.168.115.198:/server/ssh/ /client/ssh/

wKiom1kwycPxzCZiAAGgNxkll2s550.png

-a:归档模式,递归并保留对象属性

-v:显示同步过程

-z:在传输文件时进行压缩

2.1.2、上行同步(上传)

rsync -avz  /本地目录/* 服务器地址:/服务器目录

首先,在服务器端创建用来做上行同步的用户,并给予用户对上行同步文件所在的目录要有权限执行

wKiom1kwydWioBSQAAFwq7vcEf0145.png

要结合setfacl使用,保证安全性

在客户端进行上传文件

wKioL1kwyeXi4U2fAAC_0OoevhI195.png

 

2.2、rsync同步源

实验环境准备:一台服务器,一台客户端

在服务器和客户端上创建单独的测试目录(/server/rsync、/client/rsync)

1)在服务器端创建主配置文件(/etc/rsyncd.conf)

wKioL1kwyfmC1PXSAAD4d6TvAbE585.png

2)创建密码文件

wKioL1kwygaTEk12AABOimyh8Rc870.png

3)启动服务  rsync --daemon

wKioL1kwyiORg5b0AAF9ftnQHeo680.png

2.2.1、下行同步

rsync -avz 用户名@服务器地址::共享模块名 /本地目录

rsync -avz rsync://用户名@服务器地址/共享模块名 /本地目录

wKiom1kwyjbQaOgjAACC_0OMHOw254.png

解决方法,修改密码文件的权限

wKioL1kwykXwLUcSAAEHoLweRG0098.png

之后,重新启动rsync服务

先关闭 kill -s QUIT 进程号

wKioL1kwyl3hxqNOAAKneEbqxZ4554.png

再启动时会启动不成功,这时候要删除进程号的文件

wKioL1kwynLDbDG-AADCl4ZlpIs605.png

再在客户端上连接就会成功了

wKiom1kwyoCxpPs8AACYe9AsZUI094.png

2.2.2、上行同步

rsync -avz  /本地目录/* 用户名@服务器地址::共享模块名

rsync -avz  /本地目录/* rsync://用户名@服务器地址/共享模块名

首先,要修改模块的权限

wKioL1kwypOS5iViAAHP6bLnhHg932.png

再测试,就成功了

wKioL1kwyqfhRybMAACdNk5fhIE202.png

--delete删除目标地址有,而源地址没有的文件

wKiom1kwyr6DOdbyAADmt5boa6Q679.png

三、免密码验证

3.1、ssh源(密钥对)

在客户端生成密钥对

wKioL1kwyteD0vUDAAIShDM5TTI963.png

 

3.2、.rsync同步源(变量)

export RSYNC_PASSWORD=虚拟用户密码

wKioL1kwyuujPb9jAADbt1_2qKI206.png

 

四、自动实时同步备份

定期同步的不足

执行备份的时间固定,延期明显,实时性差

当同步源长期不变化时,密集的定期任务是不必要的

实时同步的优点

一旦同步源出现变化,立即启动备份

只要同步源无变化,则不执行备份

 

4.1、配置inotify

 

配置文件(/etc/sysctl.conf)6.*下的优化可有可无

mak_queue_events = 16384

监控队列大小(16384)

mak_user_instances = 1024

最多监控实例数(1024)

max_user_watches = 1028576

每个实例最多监控文件数(1028576)

 

环境配置:安装gcc*,安装包准备好

1)解压安装

wKioL1kwywCwPoMMAACGu64VEYM969.png

2)inotifywait:用于持续监控,实时输出结果

   inotifywatch:用于短期监控,任务完成后再出结果

wKioL1kwyxHSqablAAFvKkioK4s365.png


创建用来做上行同步的用户,并给予用户对上行同步文件所在的目录要有权限执行

wKioL1kwyyOhEXfQAAE3I0pwSEU829.png

 

4.2、主从服务器单向实时同步

rsync+ inotify(实时同步,单向同步工具。结合下面的脚本使用)

wKiom1kwy0ijhshEAAB3tAHIVLA239.png


注:用户登录时要求免密码验证,so要给asd用户生成密钥对(用户asd要在服务器端存在)

wKioL1kwy2eCg6-WAAGiBDa1zcA293.png

测试验证(实时同步,单向同步工具)

wKioL1kwy3_AUthuAAJhZ2Kd9N8855.png


 4.3unison + inotify 双向实时同步

4.3.1、实现双向免秘钥文件传输

1)实现同步的两个目录

创建目录   客户端: /client/ssh/  服务器端: /server/ssh/

2)如若用root来实现登录的话,生成密钥对,以便于免密码验证

ssh-keygen  -t rsa                        

ssh-copy-id  root@192.168.115.199 (服务器ip)   

ssh-keygen  -t rsa  

ssh-copy-id  root@192.168.115.198(客户端ip)

wKiom1kwy63yzE5OAAKAEnq7OaE334.png

服务器端秘钥生成同上

4.3.2、安装三个软件

1)先安装inotify(需先安装gcc*

wKioL1kwzBfRAwrFAAGjNs_GAbs734.png

2)再安装ocaml

./configurer    make world opt    make install

wKiom1kwzCyx1sezAAHSGqRUI2w689.png


3)安装unison

wKioL1kwzD_hWjWSAAFDZ7c9MCk997.png

wKioL1kwzFPDHVLCAABZ81W2CaI373.png

把生成的脚本拷贝出来

wKiom1kwzGSCDYOyAAC0wCyfk3g528.png

接下来同样的操作在服务器端也做一遍。。。。

4.3.3、配置脚本

客户端

wKioL1kwzHOjWBVWAAB2NzPoeWc514.png

服务器端

wKiom1kwzO_jgWoxAAAqjQyODWQ920.png

wKioL1kwzJHSFmpHAACzDjhZOGs024.png


取消提示信息使用nohup方式执行脚本

wKiom1kwzSWR3XLjAADHH8mnkqQ298.png