rsync远程同步

文章目录

    • 一、rsync同步简介
      • 1.1 关于rsync
      • 1.2 Rsync服务器
      • 1.3 同步方式
    • 二、rsync语法结构
      • 2.1 rsync常用参数
      • 2.2 本地使用
      • 2.3 远程使用
      • 2.4 删除命令
    • 三、rsync守护进程
      • 3.1 部署
      • 3.2 拷贝复制操作
      • 3.3 免交互配置
    • 四、rsync + inotify

一、rsync同步简介

1.1 关于rsync

Remote Sync,远程同步
支持本地复制,或者与其他SSH,rsync主机同步

1.2 Rsync服务器

1.Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。

2.Rsync软件适用于unix/linux/windows等多种操作系统平台。

3.Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。

4.以其delta-transfer算法闻名。 rsync监听端口:873 rsync运行模式:C/S

1.3 同步方式

全量备份

所有数据全部传送
把原来的文件和新的文件一起统一传送
全量复制,效率低

增量备份

在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输
增量复制,效率较高

检查是否安装rsync
在这里插入图片描述

二、rsync语法结构

2.1 rsync常用参数

参数 说明
-a 归档模式传输, 等于-tropgDl(打包)
-v 详细模式输出, 打印速率, 文件数量等
-z 传输时进行压缩以提高效率
-r 递归传输目录及子目录,即目录下得所有目录都同样传输。
-t 保持文件时间信息
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属组信息
-l 保留软连接
-P 显示同步的过程及传输时的进度等信息
-D 保持设备文件信息
-L 保留软连接指向的目标文件
-e 使用的信道协议,指定替代 rsh 的 shell 程序
参数 说明
–exclude=PATTERN 指定排除不需要传输的文件模式
–exclude-from=file 文件名所在的目录文件
–bwlimit=100 限速传输
–partial 断点续传
–delete 让目标目录和源目录数据保持一致

2.2 本地使用

类似于cp命令,将aaa目录及里面的文件归档、压缩拷贝到/opt下面并显示详细信息

rsync -avz /aaa /opt

rsync远程同步_第1张图片
两者对比

rsync -avz /aaa1 /opt
rsync -avz /aaa1/ /opt

rsync远程同步_第2张图片

2.3 远程使用

1.对server1根目录下的aaa1目录及三个文件进行备份
rsync远程同步_第3张图片
将根目录下的aaa1目录及文件备份到server2根目录下的server1文件中(server2下面要提前创建目录)

rsync -avz /aaa1 [email protected]:/server1

rsync远程同步_第4张图片
在server2上面查看根目录下的server1目录
rsync远程同步_第5张图片

2.在已经备份完的情况下,server1下的aaa1有添加了新的内容

rsync -avz /aaa1 [email protected]:/server1

rsync远程同步_第6张图片

rsync远程同步_第7张图片
3.总结:在备份文件时,备份后的目录没有源文件,那么会完全复制过去,在此基础上源文件做了改动(添加了新的文件),再次备份的时候,只需要备份添加的文件

2.4 删除命令

删除源文件上不存在的文件,目标文件上进行删除,保证与源文件内容一致

举例

在根目录下创建一个bbb目录,并在里面创建三个文件
rsync远程同步_第8张图片

在/opt下面创建一个bbb目录,并在里面创建四个文件,与根目录下的bbb稍做区分
rsync远程同步_第9张图片

rsync -avP --delete /bbb/ /opt/bbb/

-P:显示同步的过程及传输时的进度等信息
--delete:让目标目录和源目录数据保持一致
rsync远程同步_第10张图片

三、rsync守护进程

3.1 部署

vi /etc/rsyncd.conf
uid = nobody      运行用户
gid = nobody      运行组
use chroot = no   锁定宿主目录
max connections = 200 最大连接数
pid file = /var/run/rsyncd.pid 进程文件
log file = /var/log/rsyncd.log 日志文件
# exclude = lost+found/        执行权限
# transfer logging = yes       传输日志
# timeout = 900                连接超时时间
# ignore nonreadable = yes     忽略不可读属性
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 压缩
hosts allow = 20.0.0.0/24    允许网段
address = 20.0.0.11   监听地址
port 873   监听端口

[wwwroot]    共享目录名称
path = /rsync    路径
comment = test    描述
read only = yes    只读
auth user = zhangsan    用户
secrets file = /etc/user.db    用户数据文件路径

rsync远程同步_第11张图片
编辑用户文件

vi /etc/user.db

rsync远程同步_第12张图片

赋只读权限

chmod 600 /etc/user.db

守护进程形式去启动服务

rsync --daemon

查看端口状态

netstat -anpt | grep 873

在这里插入图片描述
server1创建测试用的文件
rsync远程同步_第13张图片

3.2 拷贝复制操作

方法一 :在server2(20.0.0.12)上发起请求,备份到serve2的/rsync下面

rsync -avz [email protected]::wwwroot /rsync

与server1之间的对应关系
rsync远程同步_第14张图片

rsync远程同步_第15张图片

方法二 :类似网页形式

rsync -avz rsync://[email protected]/wwwroot /rsync2

rsync远程同步_第16张图片

rsync远程同步_第17张图片

3.3 免交互配置

rsync远程同步_第18张图片

chmod 600 password
rsync -avz --password-file=/root/password rsync://[email protected]/wwwroot /rsync3

rsync远程同步_第19张图片

四、rsync + inotify

保证两个设备上的一个文件数据信息保持一致性

在server2(20.0.0.12)上
rsync远程同步_第20张图片
解压、编译、安装

tar xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14/
./configure && make && make install

创建测试用的目录
在这里插入图片描述
对文件进行修改并测试
rsync远程同步_第21张图片

创建一个密码文件(文件名自定义)
rsync远程同步_第22张图片
赋予只读权限

chmod 600 /etc/test.pass

编辑脚本

vi inotify.sh 
#!/bin/bash
INOTIFY="inotifywait -mrq -e modify,create,attrib,move,delete /test/inotify"
RSYNC_CMD="rsync -avz --delete --password-file=/etc/test.pass /test/inotify [email protected]::name"
$INOTIFY | while read DIRECTORY EVENT FILE
do
       if [ $(pgrep rsync | wc -l) -le 0 ];then
           $RSYNC
        fi
done

在server1(20.0.0.11)上

vi /etc/rsyncd.conf

rsync远程同步_第23张图片

执行脚本测试
rsync远程同步_第24张图片
内核参数

[root@server2 ~]# vi /etc/sysctl.conf 
[root@server2 ~]# sysctl -p  写入系统,启用
在末尾添加
fs.inotify.max_queued_events = 16384   监控事件的最大队列数
fs.inotify.max_user_instances = 1024      监控的最大实例数
fs.inotify.max_user_watches = 1048576   监控的每个实例的最大文件数

你可能感兴趣的:(Linux,rsync)