rsync远程同步

随声附和 提交于 2019-12-15 03:51:37

一、rsync同步简介

(1)Remote Sync ----- 远程同步,支持本地复制,或者与其他SSH 、rsync主机同步,功能类似于scp,但是要比scp丰富。
官方网站:http : //rsync.samba.org
(2)特点:
1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等,无须特殊权限即可安装。
3、快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
4、安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜像。
rsync远程同步

二、rsync 命令的用法

命令:

rsync [选项]  原始位置  目标位置

常用选项:

-a  : 归档模式,递归并保留对象属性,等同于 -rlptgoD
-v  : 显示同步过程的详细信息
-z  : 在传输文件时进行压缩
-H  : 保留硬链接文件
-A  : 保留 ACL属性信息
--delete  :删除目标位置有,而原始位置没有的文件
--checksum :根据对象的校验和来决定是否跳过文件

配置源的两种表示方法:

格式1 :用户名@主机地址::共享模块名

格式2: :rsync://用户名@主机地址/共享模块名

rsync 脚本的交互处理:

rsync源的免交互处理:
使用 --password-file=密码文件

三、操作实例:

rsync 是系统自带的,无需额外安装,如果是最小化安装的话,用 yum安装一下即可。
(1)修改配置文件 :/etc/rsyncd.conf

vim /etc/rsyncd.conf
1、开启以下功能:
uid = nobody
gid = nobody
use chroot = yes   
//注:用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。
pid file = /var/run/rsyncd.pid    //存放进程ID的文件位置
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2   //同步时不再压缩的文件类型

2、添加以下选项:
address = 192.168.220.131         //添加本机IP地址
log file = /var/log/rsyncd.log    //日志文件位置
port 893                          //端口号
hosts allow = 192.168.220.0/24    //设置白名单,允许哪些地址可以访问

3、添加共享模块名:
[wwwroot]                 //共享文件名,这个自定义
path = /var/www/html      //源目录的实际路径
comment = www.kgc.com     //描述
read only = yes           //是否为只读
auth users = backuper     //授权账户名
secrets file = /etc/rsyncd_users.db   //存放账户信息的数据文件

(2)编辑存放账户信息的数据文件:

vim /etc/rsyncd_users.db
backuper:abc123   //授权账户:密码

chmod 600 /etc/rsyncd_users.db   //权限设置为600,必须设置为600,否则客户端认证会失败

(3)启动服务:

rsync --daemon   //启动服务(使用--daemon选项,以服务器模式启动)
netstat -natp | grep rsync

rsync远程同步
(4)源服务器安装一个Apache服务:

yum install httpd -y    
cd /var/www/html/
echo "this is test web" > index.html   //新建一个网页
chmod 777 html/      //权限设置为777

(5)客户端使用 rsync 同步:
1、交互

格式1:rsync -avz backuper@192.168.220.131::wwwroot /var/www/html/

格式2:rsync -avz rsync://backuper@192.168.220.131/wwwroot /var/www/html/

rsync远程同步
2、免交互:在客户端写一个文件,将密码放进去即可。

vim /etc/server.pass
abc123  //密码
chmod 600 /etc/server.pass   //授权
rsync -avz --delete --password-file=/etc/server.pass backuper@192.168.220.131::wwwroot /var/www/html/

rsync远程同步

四、配合 inotify 工具使用:

(1)rsync 实时同步:
1、定期同步的不足:

执行备份的时间固定,延迟明细,实时性差;
当同步源长期不变化时,密集的定期任务是不必要的

2、实时同步的优点:

一旦同步源出现变化,立即启用备份;
只要同步源不变化,则不执行备份

(2)关于 inotify:
Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。
1、从版本 2.6.13 开始提供;
2、可以监控文件系统的变化情况,并作出通知响应;
3、辅助软件:inotify-tools
rsync远程同步
(3)rsync + inotify 实时同步:
1、调整 inotify 内核参数:

max_queue_event : 监控队伍大小
max_user_instances : 最多监控实例数
max_user_watches : 每个实例最多监控文件数

2、rsync + inotify 辅助工具:
(1)inotifywait:用于持续监控,实时输出结果;
(2)inotifywatch:用于短期监控,任务完成后再出结果

五、操作实例:

注意,这是在客户端所做的操作
第一步:修改内核参数

vim /etc/sysctl.conf
添加以下代码:
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p    //生效

第二步:编译安装 inotify

yum install gcc gcc-c++ make -y       //安装编译工具
tar zxvf inotify-tools-3.14.tar.gz -C /opt/    //解压
cd inotify-tools-3.14/
./configure            //编译
make && make install    //安装

第三步:监控

inotifywait -mrq -e modify,create,move,delete /var/www/html/
// -m :持续进行监控
   -r :递归监控所有子对象
   -q :简化输出信息
   -e :制定要监控哪些事件类型

写一个脚本,来通过 inotifywait 触发 rsync 同步操作:

vim /opt/inotify.sh

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /var/www/html/"
RSYNC_CMD="rsync -avz --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.220.131::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE  ##读取输出的监控记录
 do
   if [ $(pgrep rsync | wc -l) -le 0 ]; then    ##如果rsync未在执行,则立即启动
      $RSYNC_CMD
   fi
done
chmod +x inotify.sh    //添加权限

第四步:在源端,关闭只读模式,并重启服务

vim /etc/rsyncd.conf 
read only = no
[root@yuan www]# netstat -natp | grep rsync
tcp        0      0 192.168.220.131:873     0.0.0.0:*               LISTEN      100869/rsync 

kill -9 100869  //关闭进程号
如果报错,则需要删除pid进程:
cd /var/run/
rm -rf rsyncd.pid 
rsync --daemon

第五步:启动脚本

./inotify.sh

在开一个终端连接客户端,在 /var/www/html 目录下,创建一个文件:
rsync远程同步
(1)此时,在源服务器的 /var/www/html 目录下,我们会发现实时同步到了这个文件
rsync远程同步
(2)如果在客户端删除这个文件,同时源服务器也会同步删除这个文件的
rsync远程同步
rsync远程同步

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!