目录
引言
一、Rsycn基础介绍
(一)基本概念
(二)特性
(三)同步方式
(四)服务备份角色
(五)命令工具
(六)配置格式
(六)同步类型
三、实现远程同步
(一)实现下行同步
1.服务端配置
1.1 修改服务端配置文件
1. 2 添加访问信息
2.客户端同步
2.1 使用命令进行同步
2.2 免密同步
2.3 同步删除
(二)实现上行同步
(三)实现实时同步
1.确认服务端配置文件
2.调整客户端内核参数
3.安装 inotify-tools工具
4.实时监控
5.实时同步
总结
引言
在日常的数据管理和备份工作中,一款优秀的文件同步工具显得尤为重要。今天,我们将聚焦于Linux世界中备受推崇的一款实用工具——Rsycn。这款工具以其高效、灵活、可靠的特性,在数据迁移、备份、镜像创建等领域发挥着至关重要的作用。本文将深入剖析Rsycn的基本原理,并结合实际案例探讨其在不同场景下的应用。
一、Rsycn基础介绍
(一)基本概念
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
它采用增量同步技术,仅传输文件的差异部分,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用,极大地提高了数据传输效率。其支持本地到本地、本地到远程、远程到本地等多种同步方式,并且可以跨越多种文件系统进行操作。
(二)特性
它的特性如下:
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。 无须特殊权限即可安装。
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜像
(三)同步方式
完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地。
差量备份:备份上次完全备份以后有变化的数据(针对的上次的完全备份,备份过程中不清除存档属性
增量备份:备份上次备份以后有变化的数据(不论哪种类型的备份,有变化的数据就备份,会清除存档属性)
(四)服务备份角色
在 rsync 工具中,涉及到的几个角色概念解释如下:
备份源(Backup Source): 这是指实际包含需要备份数据的机器或系统。当进行远程同步时,备份源通常是提供数据的服务器,即你想要从那里复制或同步数据的位置。在 rsync 进程中,它可以是本地的一个目录,也可以是远程服务器上的目录。
发起端(Initiator / Sender): 发起端是启动 rsync 同步操作的那台计算机或进程。通常,它是执行 rsync 命令的一方,并向服务端发送同步请求以及相关数据。发起端可能需要指定源路径(要同步的文件和目录),以及目标路径(同步到何处)。
服务端(Server): 在 rsync 中,服务端可以指运行 rsync daemon(服务程序)的机器,这个守护进程监听特定端口等待客户端连接并发起同步请求。服务端提供了待同步的数据资源,并接收发起端发来的差异数据,完成同步操作。服务端通常配置了固定的同步模块(module)和相应的访问权限。
客户端(Client): 客户端则是与服务端进行交互以执行同步任务的机器或进程。在 rsync 中,发起同步操作的一方同时也是客户端。它既可以连接至 rsync daemon 进行同步,也可以通过 SSH 协议直接与另一台机器上的 rsync 客户端进行点对点的同步。客户端会根据指令从备份源获取数据,并将其传输至目标位置。
总结起来,在一次 rsync 数据同步过程中:
- 备份源提供数据;
- 发起端(同时也是客户端)启动同步操作;
- 服务端响应同步请求并提供同步服务;
- 数据从备份源经过发起端(客户端)和/或服务端的协调处理,最终到达目标位置
(五)命令工具
基本格式:rsync [选项] 原始位置 目标位置
-r | 递归模式,包含目录及子目录中的所有文件。 |
-l | 对于符号链接文件仍然复制为符号链接文件。 |
-v | 显示同步过程的详细(verbose)信息。 |
-z | 在传输文件时进行压缩(compress)。 |
-a | 归档模式,保留文件的权限、属性等信息,等同于组合选项“rlptgoD”。 |
-p | 保留文件的权限标记。 |
-t | 保留文件的时间标记。 |
-g | 保留文件的属组标记(仅超级用户使用)。 |
-o | 保留文件的属主标记(仅超级用户使用)。 |
-H | 保留硬连接文件。 |
-a | 保留 ACL 属性信息。 |
-D | 保留设备文件及其他特殊文件。 |
--delete | 删除目标位置有而原始位置没有的文件。 |
--checksum | 根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。 |
以本机同步为例
(六)配置格式
主要是远程同步的配置格式
主要区别在于是否通过 rsync 的守护进程 (daemon) 来进行通信:
格式一:
用户名@主机地址::共享模块名
#这个格式是用于连接到运行 rsync 守护进程(rsync daemon)的远程服务器,
#并指定一个共享模块(module)进行同步。
格式二:
rsync://用户名@主机地址/共享模块名
#这个格式也是用来连接到运行 rsync 守护进程的远程服务器,
#但是采用了 URI(统一资源标识符)的形式。虽然看上去和格式一稍有不同,但其实它们的功能是一样的
两种格式的主要应用场景是当你需要从一个设置了rsync守护进程的远程服务器进行高效、大规模的
数据同步时。守护进程模式下的rsync可以提高并发性能和灵活性,允许管理员设置更复杂的访问控制策略
(六)同步类型
在使用rsync进行文件同步时,上行同步(Upstream Sync)和下行同步(Downstream Sync)是指数据流向的不同方向:
1.上行同步
上行同步(Upstream Sync)是指从本地机器(发起端)向远程服务器(同步源)上传数据的过程。例如,你可能想要将本地计算机上的某个目录或文件同步到云服务器或其他远程主机上。
2.下行同步
下行同步(Downstream Sync)是指从远程服务器下载数据到本地机器的过程。这种情况下,你会从远程服务器获取数据同步到本地存储。
三、实现远程同步
环境准备
服务端 | 192.168.83.40 |
客户端 | 192.168.83.30 |
默认情况下,rsync服务是已经安装的,如果是最小化安装的系统,可能需要手动去安装rsync服务
官方网站为:rsync
(一)实现下行同步
1.服务端配置
1.1 修改服务端配置文件
在配置文件(/etc/rsyncd)中添加以下信息
uid = root 和 gid = root
#设置rsync守护进程以root用户和root组的身份运行,确保其有足够的权限访问和同步文件。
use chroot = yes
#当此选项启用时,rsync在处理客户端请求时,会在path指定的目录内创建一个虚拟的根目
#录,限制客户端对服务器其余部分的访问。
port 873
#设置rsync服务监听的端口号,默认rsync守护进程监听的就是873端口。
log file = /var/log/rsyncd.log
#指定rsync守护进程的日志文件路径,所有服务相关的活动将记录在此文件中。
pid file = /var/run/rsyncd.pid
#保存rsync守护进程PID(进程标识符)的文件路径,用于监控和管理rsync守护进程。
hosts allow = 192.168.83.0/24
#允许来自192.168.83.0/24这个IP段的客户端连接rsync服务。
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
#不对这些后缀名的文件进行压缩传输,因为这些文件已经是压缩格式,再压缩意义不大,
#反而可能增加CPU负担。
[test] #定义了一个名为test的模块,客户端在连接时需要指定这个模块名称。
path = /data/test/ #为test模块指定实际的同步目录路径。
comment = Document Root of www.rsynctest.com
#对模块的注释,描述模块的作用。
read only = yes
#设定模块为只读模式,客户端只能从该模块下载数据,不能上传或修改数据。
auth users = testuser
#定义了允许访问此模块的认证用户列表,此处只有centos用户有权限。
secrets file = /etc/rsyncd_users.db
#指定包含用户凭据的文件,客户端在连接时需要提供对应的用户名和密码。
#此文件应为每行一个条目,格式为username:password。
1. 2 添加访问信息
[root@rsync-server ~]#mkdir /data/test
#创建共享目录
[root@rsync-server ~]#vim /etc/rsyncd_users.db
[root@rsync-server ~]#cat /etc/rsyncd_users.db
testuser:123456
#添加客户端访问时使用的用户与密码,用户名与配置文件中的auth users值相等
[root@rsync-server ~]#chmod 600 /etc/rsyncd_users.db
#给该文件属主只读权限,保证用户信息安全
[root@rsync-server ~]#chmod +r /data/test
#给同步目录添加所有的读取权限,保证所有用户都能读取该目录
[root@rsync-server ~]#ll -d /etc/rsyncd_users.db;ll -d /data/test
-rw-------. 1 root root 16 Apr 8 15:25 /etc/rsyncd_users.db
drwxr-xr-x. 2 root root 6 Apr 8 15:25 /data/test
[root@rsync-server ~]#rsync --daemon
#以守护进程开启rsync服务
[root@rsync-server ~]#echo "welcome to rsync" >/data/test/rsync.txt
[root@rsync-server ~]#cat /data/test/rsync.txt
welcome to rsync
#创建同步文件
2.客户端同步
2.1 使用命令进行同步
格式一:
rsync -avz 用户名@服务端IP::模块名 本机同步目录
格式二:
rsync -avz rsync://用户名@服务端IP/模块名 本机同步目录
用户名与密码为服务端/etc/rsyncd_users.db文件中添加的信息
2.2 免密同步
2.3 同步删除
可以将同步命令写入crontab计划任务当中,定时进行数据同步
(二)实现上行同步
(三)实现实时同步
rsync 实现实时同步并非其默认功能,但可以通过结合inotify工具来间接实现近乎实时的文件同步。rsync 是基于文件差异对比进行同步的,它的优点在于仅传输文件的不同部分,非常适合增量备份和同步场景
1.确认服务端配置文件
以上行同步为例
确认同步目录有读写权限
2.调整客户端内核参数
fs.inotify.max_queued_events
#这个参数表示inotify队列中可以存储的最大事件数量。
#当超过这个值时,旧的未读取的事件将会被丢弃。
#如果你想监控大量文件变动并确保不会丢失事件,可以适当增大这个值。
fs.inotify.max_user_instances
#这个参数指定了单个用户可以创建的inotify实例的最大数量。
#每个inotify实例对应着对一个文件系统目录树的监控。
#如果你需要同时监控多个目录,可能需要增加这个值。
fs.inotify.max_user_watches
#这个参数限制了单个用户可以监控的最大文件数量(或目录数量,因为监控目录实际
#上是对目录及其所有子目录和文件的监控)。
#当你需要监控的文件或目录很多时,就需要增大这个值。
3.安装 inotify-tools工具
[root@rsync-client opt]#yum install gcc gcc-c++ make -y
#安装编译环境
[root@rsync-client opt]#ls
inotify-tools-3.14.tar.gz
#准备源码包,可以从官网下载
[root@rsync-client opt]#tar xf inotify-tools-3.14.tar.gz
[root@rsync-client opt]#ls
inotify-tools-3.14 inotify-tools-3.14.tar.gz
#解压源码包
[root@rsync-client opt]#cd inotify-tools-3.14/
[root@rsync-client inotify-tools-3.14]#./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
.......................
[root@rsync-client inotify-tools-3.14]#make -j 4 && make install
#编译安装
安装完毕后会生成inotifywait与inotifywatch两个工具
inotifywait
#是一个用于监控文件或目录变化的命令行工具,当指定的文件或目录发生指定类型的事件时
#(如打开、关闭、修改、移动、删除等),它会阻塞并报告这些事件。这对于自动化脚本和实
#时监控文件系统活动非常有用,例如在文件修改后触发 rsync 进行同步。
inotifywatch
#是一个用于统计给定文件或目录在一段时间内的事件发生的次数的工具。
#它不会实时报告每一次事件,而是汇总一段时间内的事件统计数据。
4.实时监控
-e #用来指定要监控哪些事件
-m #表示持续监控
-r #表示递归整个目录
-q #简化输出信息
modify,create,move,delete 表示监控四种类型的事件:
modify #文件内容被修改。
create #在监视目录下创建了新文件或目录。
move #文件或目录被移动(重命名)。
delete #文件或目录被删除。
5.实时同步
可以通过脚本的方式来监控,从而触发同步命令,达到实时同步的效果
#!/bin/bash
inot_cmd="inotifywait -mrq -e modify,create,attrib,move,delete /bak/"
#将执行inotifywait实时监控的命令定义成变量inot_cmd
sync_cmd="rsync -azH --delete --password-file=/etc/rsync_pass.txt
/bak/ testuser@192.168.83.40::test"
#将执行rsync远程同步的命令定义成变量sync_cmd
#需要注意的是,在同步目录后面加/,如/bak/表示同步该目录下的文件,不加/,则直接同步该目录
$inot_cmd | while read DIRECTORY EVENT FILE
#执行 inotifywait 命令并将其输出通过管道传递给 while 循环。循环读取每一行输出,
#按空格拆分成 DIRECTORY(发生事件的目录)、EVENT(事件类型)和 FILE(受影响的文件
#或目录)三个变量
do
if [ $(pgrep rsync | wc -l) -le 0 ]
then
$sync_cmd
fi
#检查当前系统中是否有正在运行的 rsync 进程。如果有,则跳过本次循环;
#如果没有正在运行的 rsync 进程,则执行sync_cmd变量中定义的同步命令。
done
在客户端建立文件进行测试
设置脚本开机自启动
上述设置完毕后,每次开机都会加载rc.local文件,并以绝对路径(/data/romove_sync.sh)执行脚本文件,开启实时监控同步
总结
rsync 是一款广泛应用于Linux和其他类Unix系统中的强大文件同步工具,它的核心特点和优势包括:
增量同步:rsync通过比较源文件和目标文件的差异,仅传输有变动的部分,极大地提高了数据同步速度和带宽利用率。
双向同步:不仅可以将数据从源端推送到目标端,也可从目标端拉取数据,支持本地与本地、本地与远程等多种同步场景。
文件属性保持:rsync在同步过程中能保留文件的元数据,包括权限、所有权、时间戳、软硬链接等。
安全传输:可通过SSH等安全协议进行加密传输,确保敏感数据的安全性。
删除选项:提供 -delete 参数可以删除目标目录中源目录不再存在的文件,实现两边目录结构一致。
断点续传:在同步过程中如果因故中断,下次同步可以从上次中断的地方继续,避免重复传输。
高效与低负载:rsync使用高效的算法计算文件差异,且能够在同步时启用压缩功能以节省带宽。
多种工作模式:rsync支持通过本地文件系统拷贝、通过SSH连接远程主机、连接到rsync daemon等多种工作模式。
总之,rsync是一个功能全面、灵活且高效的文件同步工具,适用于日常备份、网站镜像、数据迁移等各种场合。