rsync远程同步工具的使用

rsync远程同步

rsync是一个开放源代码的文件同步工具,它可以同步文件和目录,支持本地和远程同步。rsync通过比较源文件和目标文件的差异来实现同步,只有差异部分会被传输,这使得同步效率非常高。
以下是rsync远程同步的一些关键特点:

  1. 高效的数据传输:rsync通过比较文件差异来传输数据,只有差异部分会被传输,这使得同步效率非常高。
  2. 支持多种传输协议:rsync支持多种传输协议,包括SSH、rsh、sftp等,这使得它可以在不同的操作系统之间进行同步。
  3. 目录同步:rsync可以同步整个目录结构,包括子目录和文件。
  4. 镜像同步:rsync可以实现源目录和目标目录的镜像同步,确保两个目录的内容完全一致。
  5. 支持排除和包含:rsync允许用户指定排除或包含的文件或目录,以控制同步的范围。
  6. 可配置性:rsync有丰富的配置选项,用户可以根据需要调整同步策略。
  7. 安全性:rsync支持通过SSH进行加密传输,确保数据传输的安全性。
  8. 版本控制:rsync支持通过–archive选项来实现文件的版本控制。
    要使用rsync进行远程同步,您需要配置一个rsyncd.conf配置文件,并指定远程服务器的地址、端口、用户名、密码等参数。然后,在客户端使用rsync命令来同步文件和目录。

rsync同步方式

  1. 完整备份
    每次备份都是将源文件系统中所有文件和目录的当前状态完全复制到目标文件系统中。如果目标文件系统中已经存在与源文件系统中相同的文件,rsync会比较文件差异,只传输差异部分,以提高同步效率。
  2. 差量备份
    差量备份是相对于上一次的完整备份来说的。它会记录自上一次完整备份以来,源文件系统中所有发生变化的数据。这意味着差量备份不包括那些在上一次完整备份后未发生变化的文件。
  3. 增量备份
    增量备份是相对于上一次备份(无论是完整备份还是差量备份)来说的。它会记录自上一次备份以来,源文件系统中所有发生变化的数据。与差量备份不同,增量备份不会清除存档属性,它只是记录变化的数据。

备份过程

  1. 发起端(客户端)
    发起端是负责发起同步操作的客户机。它告诉服务器(备份源)要进行数据同步,并且指定同步的源路径和目标路径。
  2. 备份源(服务端)
    备份源是响应来自发起端的rsync同步操作的服务器。它是需要备份的服务器,负责处理发起端的请求,并将数据同步到指定的目标路径。
  3. 服务端
    服务端是指运行rsyncd服务的主机,它监听来自客户端的同步请求,并根据配置文件rsyncd.conf执行相应的同步操作。
  4. 客户端
    客户端是指存放备份数据的主机。它接收来自服务端的同步数据,并将其存储在指定的路径中。

在rsync备份过程中,发起端和服务端之间的通信是加密的,确保了数据传输的安全性。而客户端则负责存储同步后的数据,以实现数据的备份和保护。

配置rsync服务器(下行同步)

源服务器(192.168.20.10)配置

mkdir /bak
vim /etc/rsyncd.conf				#添加以下配置项
uid = root
gid = root
use chroot = yes										#禁锢在源目录
address = 192.168.80.10									#监听地址
port = 873												#监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log							#日志文件位置
pid file = /var/run/rsyncd.pid							#存放进程 ID 的文件位置
hosts allow = 192.168.20.0/24							#允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z		#同步时不再压缩的文件类型

[bak]												#共享模块名称
path = /bak									#源目录的实际路径
comment = Document Root of www.kgc.com
read only = yes											#是否为只读
auth users = bak									#授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db						#存放账户信息的数据文件

在这里插入图片描述
为备份账户创建数据文件

vim /etc/rsyncd_users.db
bak:123123

权限必须是600否则报错!

chmod 600 /etc/rsyncd_users.db

保证所有用户对bak目录都有可读权限

chmod +r /bak

在这里插入图片描述
创建100个测试文件

touch {1..100}

在这里插入图片描述
用户端(192.168.20.20)

rsync -avz bak@192.168.20.10::bak /opt

在这里插入图片描述
备份成功

rsync 命令的使用方法

rsync 选项       用户@ip地址::共享模块名称    拷贝到的目录
例如 rsync -avz bak@192.168.20.10::bak /opt 

选项有
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)。
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
-p:保留文件的权限标记。
-t:保留文件的时间标记。
-g:保留文件的属组标记(仅超级用户使用)。
-o:保留文件的属主标记(仅超级用户使用)。
-H:保留硬连接文件。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
--delete:删除目标位置有而原始位置没有的文件。
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件
--password-file=/etc/server.pass:免密登录/etc/server.pass是你选项密码的配置文件

免密选项密码只需要填入文件就行了
在这里插入图片描述
免密交互选项可以设置crontab -e 用来自动备份

配置上行同步(依赖inotify可以实时备份)

服务端配置
在服务端修改/etc/rsyncd.conf
将只读修改成no,改成可读可写
在这里插入图片描述
重启rsync服务

ps aux | grep rsync
kill 61095
rsync --daemon

在这里插入图片描述
客户端配置
调整内核参数

vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p

在这里插入图片描述

  1. fs.inotify.max_queued_events:
    • 含义:这个参数设置了 inotify 事件队列的最大长度。如果一个事件队列满了,新的事件将会被丢弃,但是会触发 IN_Q_OVERFLOW 事件,这样可以通知用户应用程序事件队列已满。
    • 默认值:16384
    • 解释:这意味着 inotify 队列可以存储最多 16384 个事件,超过这个数量的事件将会被丢弃。
  2. fs.inotify.max_user_instances:
    • 含义:这个参数限制了每个用户可以创建的 inotify 实例的最大数量。
    • 默认值:1024
    • 解释:每个用户最多可以创建 1024 个 inotify 实例。每个实例可以监控不同的文件或目录。
  3. fs.inotify.max_user_watches:
    • 含义:这个参数限制了每个用户可以监控的文件或目录的总数。
    • 默认值:1048576
    • 解释:每个用户可以监控最多 1048576 个文件或目录。如果超出这个限制,将会收到一个错误。

安装inotify服务

cd /opt
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
 inotifywait -mrq -e modify,create,move,delete /bak

vim bak.sh
写一个触发脚本

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /bak"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /bak bak@192.168.20.10::bak/"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        #如果rsync未在执行,则立即启动
        $RSYNC_CMD

    fi
#  echo "At ${DATE}${TIME}, file ${FILE} was changed in${DIR}"
done

检测
在这里插入图片描述
在这里插入图片描述
同步成功

相关推荐

  1. 【Linux】rsync远程数据同步工具使用

    2024-04-08 20:08:04       8 阅读
  2. rsync同步/传输工具ssh使用方法

    2024-04-08 20:08:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 20:08:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 20:08:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 20:08:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 20:08:04       20 阅读

热门阅读

  1. Istio-learning-note-about-Fault Injection(二)

    2024-04-08 20:08:04       12 阅读
  2. Web爬虫

    Web爬虫

    2024-04-08 20:08:04      13 阅读
  3. js与jq之间的联系(补)

    2024-04-08 20:08:04       15 阅读
  4. RPA投资:成本效益分析秘籍

    2024-04-08 20:08:04       14 阅读
  5. 基于 Spring Task实现单体项目架构的定时任务

    2024-04-08 20:08:04       16 阅读
  6. jquery

    2024-04-08 20:08:04       14 阅读
  7. js中filter,map,forEach,indexOf的用法和区别详解

    2024-04-08 20:08:04       15 阅读
  8. 网络安全教程及案例分析

    2024-04-08 20:08:04       14 阅读
  9. 前端开发语言都有哪些?

    2024-04-08 20:08:04       15 阅读