rsync远程同步

rsync介绍:

  • rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具,可以在不改变原有数据属性信息的前提下实现数据的备份迁移特性。

  • 它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码)以减少数据的传输。

  • rsync算法并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。

  • rsync可拷贝、显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝,它能本地复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。

工作原理:

  • 客户端构造FileList,FileList包含了需要与服务器同步的所有文件信息对name->id (id用来唯一表示文件例如MD5)

  • 客户端将FileList发送到服务器。

  • 服务器上rsync处理客户端发过来的FileList,构建新的NewFileList。 其中根据MD5值比较,删除服务器上已经存在的文件信息对,只保留服务器上不存在或变化的文件。

  • 客户端得到服务器发送过来的NewFileList,然后把NewFileList中的文件重新传输到服务器。

 

rsync优点:

  • 可以镜像保存整个目录树和文件系统。

  • 可以很容易做到保持原来文件的权限、时间、软硬连接等。

  • 无需特殊权限即可安装。

  • 快速:第一次同步时rsync复制全部内容,但在下一次值传输修改过的内容

  • 压缩传输:rysnc在传输的过程中可以实行压缩及解压缩操作,可以使用更少的带宽

  • 安全:可以使用scp、ssh等方式来进行文件传输

  • 支持匿名传输,以方便进行网站镜像

  • rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),做差异同步

 

rsync同步方式:

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

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

rsync认证方式

1.ssh认证

rsync在ssh认证方式下,可通过系统用户进行认证。

在rsync上通过ssh隧道进行传输,类似于scp工具。

此时同步操作不在局限于rsync中定义的同步文件夹。

ssh认证方式,不需要服务器和客户端配置rsync配置文件。

只需要双方都安装rsync服务,并且也不需要双方启动rsync。

若rsync服务端SSH为标准端口,使用方式如下:

rsync -avz /root/test root@192.168.100.20:/root/

若rsync服务端SSH为非标准端口,可通过rsync的-e参数进行端口指定,使用方式如下:

rsync -avz /root/test -e 'ssh -p1234' root@192.168.100.20:/root/

2.rsync-daemon 认证

rsync在rsync-daemon认证方式下,默认监听TCP的873端口。

并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。

rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。

客户端启动不启动rsync服务,都不影响同步的正常进行。

 

rsync选项

选项                                                                         说明

-v                                                               显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。

-P                                                              显示文件传输的进度信息。

-n --dry-run                                                仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。

-a --archive                                                归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。

-r --recursive                                              递归到目录中去。

-t --times                                                   保持mtime属性。

-o --owner                                                 保持owner属性(属主)。

-g --group                                                 保持group属性(属组)。

-p --perms                                                保持perms属性(权限,不包括特殊权限)。

-D                                                             是"–device --specials"选项的组合,即也拷贝设备文件和特殊文件。

-l --links                                                    如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。

-z                                                             传输时进行压缩提高效率。

-R --relative                                             使用相对路径。

–size-only                                                默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。

-u --update                                              仅在源mtime比目标已存在文件的mtime新时才拷贝。

-d --dirs                                                   以不递归的方式拷贝目录本身。

–max-size                                               限制rsync传输的最大文件大小。

–min-size                                                限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。

–exclude                                                 指定排除规则来排除不需要传输的文件。

–delete                                                    以SRC为主,对DEST进行同步。多则删之,少则补之。

-b --backup                                              对目标上已存在的文件做一个备份,备份的文件名后默认使用"~“做后缀。

–backup-dir                                             指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。

-e                                                             指定所要使用的远程shell程序,默认为ssh。

–port                                                        连接daemon时使用的端口号,默认为873端口。

–password-file daemon                           模式时的密码文件,可以从中读取密码实现非交互式。

-W --whole-file rsync                               将不再使用增量传输,而是全量传输。

–existing                                                 要求只更新目标端已存在的文件,目标端还不存在的文件不传输。

–ignore-existing                                      要求只更新目标端不存在的文件。

–remove-source-files                              要求删除源端已经成功传输的文件。

 

常用选项:                                                   说明

-v –verbose                                         详细模式输出。

-a –archive                                          归档模式,表示以递归方式传输文件,并保持所有文件属性不变。

-z –compress                                      对备份的文件在传输时进行压缩处理。

–delete:                                            删除那些DST中存在而在SRC中没有的文件。

 

rsync本地复制实例

rsync -avz abc/ /opt/ :只会拷贝abc目录下面的文件,而不会拷贝abc这个目录

cd /opt

mkdir /abc

cd /abc/

touch 1.txt 2.txt

cd /

rsync -avz abc/ /opt/

cd /opt/

ls

 

 

 

rsync -avz /abc /opt/:会连着目录一起拷贝到/opt下

cd /opt/

rm -rf *

rsync -avz /abc /opt/

ls

 

 

 

rsync 同步源

在远程同步任务中,负责发起 rsync 同步操作的客户机称为客户端,而负责响应来自客户端的 rsync 同步操作的服务器称为备份源,也称之为同步源。

在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限

在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限

主机操作系统IP 地址主要软件
Master CentOS7 192.168.100.20 rsync
Slave CentOS7 192.168.100.10 rsync / inotify-tools-3.14.tar.gz

将 Master 服务器数据备份到 Slave 服务器

Master:192.168.100.20

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

cd /opt

source ./yum.sh

#关闭防火墙及安装机制

yum install -y httpd rsync

vim /etc/rsyncd.conf

uid = root                                                          #用户id,表示共享权限能执行的身份
gid = root                                                          #组id
use chroot = yes                                              #开启,禁锢在源目录,表示允许在访问我备份的目录或文件的时候,使用的角色是root,同时你访问本地目录时拥有的也是root权限
address = 192.168.100.20                               #监听地址
port 873                                                           #默认端口号为873
log file = /var/log/rsyncd.log                            #日志文件存放位置
pid file = /var/run/rsyncd.pid                           #存放进程id的文件位置
hosts allow = 192.168.100.0/24                       #允许访问的主机网段,有点类似于黑白名单
[wwwroot]                                                       #共享模块的名称,rsync默认调用该模块,默认我调用的路径是该模块指定的路径
path = /var/www/html                                     #源目录路径
comment = Document Root of www.yxp.com 
read only = yes                                              #是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z            #同步时不再压缩的文件类型,因为同步时,-avz已经进行压缩
auth users = backuper                                                 #授权用户,使用wwwroot模块的用户是哪个用户,多个账户以空格隔开
secrets file = /etc/rsyncd_users.db                              #存放账号信息的数据文件,一行一个

 

 



 

vim /etc/rsyncd_users.db

backuper:123123                      #编辑用户账号文件,固定格式为[名称:密码],一行一个

 

 

chmod 600 /etc/rsyncd_users.db                #官方要求,最好只是赋权600!

rsync --daemon                                           #开启服务

netstat -natp | grep rsync                            #检测端口号,确认服务是否成功开启

cd /var/www/html                                        #切换至共享目录下

touch 1.html 2.html

ls

 

 

slave:192.168.100.10

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

cd /opt

source ./yum.sh

#关闭防火墙及安装机制

yum install -y rsync                         #安装rsync

mkdir /abc cd /abc/                          #创建一个目录/abc,用来同步

rsync -avz backuper@192.168.100.20::wwwroot /abc

#使用rsync同步备份源的同步文件

ls

 

 

#查看同步是否成功

vim /etc/server.pass

123123                                                      #编辑免交互密钥文件,第一行为密码

chmod 600 /etc/server.pass                      #给密钥文件赋权600

rsync -az --delete --password-file=/etc/server.pass backuper@192.168.100.20::wwwroot /abc                         

#rsync,使用密钥文件/etc/server/pass对应backuper用户,IP地址为192.168.100.20的共享模块文件进行压缩,并归档同步至当前服务器的/abc目录下,同时删除差异内容,如果原目标有的,会增加,原目标没有的,会删除。保持一致性。

ls /abc

 

 

#查看下行同步是否成功

 

 

配置Rsync+Inotify 实时同步

  • 使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

  • 将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。

  • 因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步

Master 关闭只读模式并为共享目录赋权

Master(192.168.100.20)

vim /etc/rsyncd.conf

read only = no                                                                #关闭只读模式,否则将不可写入

kill `cat /var/run/rsyncd.pid`             #修改完配置文件需要重启服务,这里采用直接杀掉进程号的方式

netstat -natp | grep rsync                                               #检查一下服务是否已被终止

rsync --daemon netstat -natp | grep rsync                     #再次开启服务并检查端口号确认

 

 

优化 Slave 内核参数

Slave(192.168.100.10)

cat /proc/sys/fs/inotify/max_queued_events                                  #监控事件队列

cat /proc/sys/fs/inotify/max_user_instances                                  #最多监控实例数

cat /proc/sys/fs/inotify/max_user_watches                                    #每个实例最多监控文件数

 

 

vim /etc/sysctl.conf                                                                        #加大每个参数

fs.inotify.max_queued_events = 16384

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 1048576

 

 

#当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值

sysctl -p #刷新

客户端(192.168.100.10):

编译安装 inotify-tools

yum install -y gcc gcc-c++                            #安装gcc gcc-c++

cd /opt                                                           #切换至/opt上传inotify-tools安装包

tar zxf inotify-tools-3.14.tar.gz                        #解压

cd /opt/inotify-tools-3.14/

./configure

make -j 4 && make install #编译安装

客户端启动监听

inotifywait -mrq -e modify,create,delete /abc                     #持续监听对/abc的modify,create,move,delete操作

 

master编写触发同步脚本

vim /opt/inotify.sh

#!/bin/bash

INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/abc/"

RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/abc/ backuper@192.168.59.111::wwwroot"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE

do

     if [ $(pgrep rsync | wc -l) -le 0 ] ;then

                $RSYNC_CMD

     fi

done

 

 

cd /opt/ chmod +x inotify.sh #给脚本赋权

chmod +x /etc/rc.d/rc.local

echo "/opt/inotify.sh" >> /etc/rc.d/rc.local #设置开机自启动

sh -x inotify.sh #执行脚本

 

 

 

 

 

 

 

posted @   xhx18061794934  阅读(165)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示