当前位置: 首页 > news >正文

rsync远程同步服务

1. rsync概述

1.1 rsync简介

rsync 是一种非常强大的文件传输工具,它在 Unix-like 系统中广泛使用,用于同步文件和目录。以下是对您提供信息的简要概述和补充:

  • rsync 的基本功能

    • 全量同步:复制客户端的所有文件到服务器,不考虑服务器上已有的文件。

    • 增量同步:仅同步自上次同步以来发生变化的文件,这样可以节省带宽和时间。

  • rsync 的使用场景

    • 备份服务:结合定时任务(如 cron job),可以实现自动化的定期备份。

    • 数据同步:在多台服务器之间同步数据,保持数据一致性。

  • rsync 的默认端口

    • rsync 默认使用 873 端口,但也可以通过命令行参数自定义端口。

  • rsync 的运行模式

    • 客户端/服务器模式:rsync 可以作为守护进程在服务器上运行,客户端通过命令行与之通信。

  • rsync 的备份示例

    • 如果客户端有文件 xyz1, xyz2, xyz3,而服务器上只有 xyz1,使用 rsync 可以:

      • 完全备份:将所有文件复制到服务器,包括重复的 xyz1。

      • 增量备份:只复制 xyz2 和 xyz3 到服务器。

  • rsync 的传输方式

    • push(推):从客户端推送数据到服务器。

    • pull(拉):从服务器拉取数据到客户端。

  • rsync 的传输模式

    • 本地模式:在本地文件系统内复制文件,不支持网络传输。

    • 远程模式:通过网络在远程主机之间复制文件,支持增量和差异备份。

    • 守护进程模式:rsync 作为守护进程运行,等待客户端的连接请求。

使用 rsync 时,可以通过命令行参数来控制同步的行为,例如 -a(归档模式,保留原有属性)、-v(详细模式,显示更多信息)、--incremental(增量备份)等。此外,rsync 还支持通过 SSH 进行加密传输,增加了数据传输的安全性。

1.2 rsync官网

  • https://rsync.samba.org

  • GitHub - RsyncProject/rsync: An open source utility that provides fast incremental file transfer. It also has useful features for backup and restore operations among many other use cases.

1.3 rsync直接安装

 [root@node1 ~]# yum install rsync -y

2.rsync使用

2.1 参数

  • -a 或 --archive:归档模式,等效于 -rlptgoD(不包括 -A、-X、-U、-N、-H)。这个选项会保留符号链接、设备文件、权限、属主和组信息。

  • -v 或 --verbose:详细模式,显示传输过程中的详细信息。

  • -z 或 --compress:在传输文件的同时压缩数据,节省网络带宽。

  • -e 或 --rsh=COMMAND:指定远程 shell 命令,默认为ssh的22号端口。

  • -r 或 --recursive:递归地复制目录及其子目录。

  • -h 或 --human-readable:以人类可读的格式输出数字

  • -O或--omit-dir-times 是 rsync 命令的一个选项,用于在同步过程中忽略目录的修改时间

  • -H 保留源文件的硬链接文件

  • -n 或 --dry-run:试运行模式,不会真正执行任何操作,只显示会发生的变化。

  • -b 或 --backup:在数据同步期间进行备份。

  • -u 或 --update:跳过目标机器上新的文件。

  • -p 或 --perms:保留文件权限。

  • -t 或 --times:保留文件修改时间。

  • -o 保留文件的属主标记

  • --exclude=PATTERN 指定排除不需要传输的文件模式

  • -progress:显示传输进度。

2.2 rsync模式

rsync 支持两种操作模式:推(push)和拉(pull)。这两种模式的区别在于你在命令行中首先指定的是源文件还是目标文件。

  • 推(Push):如果你首先指定的是本地文件,那么就会启动一个推操作。在这种情况下,你要将本地文件同步到远程服务器上。

  • 拉(Pull):如果你首先指定的是远程文件,那么就会启动一个拉操作。在这种情况下,你要从远程服务器上同步文件到本地服务器

2.2.1 push推

 # node1[root@node1 ~]# echo 'iyuyi.xyz@aliyun.com' >> /opt/xyz.txt[root@node1 ~]# rsync -a /opt/xyz.txt 192.168.110.143:/opt/  #将opt下的文件xyz.txt向node2的/opt目录下​Authorized users only. All activities may be monitored and reported.​# node2[root@node2 ~]# ll /opt/total 8drwxr-xr-x. 4 root root 4096 Jan 24 18:21 patch_workspace-rw-r--r--. 1 root root   21 Jan 24 18:20 xyz.txt[root@node2 ~]# cat /opt/xyz.txt iyuyi.xyz@aliyun.com

2.2.2 pull拉

 [root@node1 ~]# rsync -a 192.168.110.143:/opt/ ./  #将node2的/opt目录的内容拉到本地[root@node1 ~]# lltotal 12-rw-------. 1 root root 1066 Jan 21 14:59 anaconda-ks.cfgdrwxr-xr-x. 2 root root 4096 Jan 21 19:31 mysql-rw-r--r--. 1 root root   21 Jan 24 18:20 xyz.txt[root@node1 ~]# cat xyz.txt iyuyi.xyz@aliyun.com
  • 简单来说,推就是把自己文件推的给别人,拉就是把别人文件的拉过给自己

2.3 rsync守护进程

  • Rsync守护进程,通常被称为rsyncd,是一个在后台运行并等待客户端连接的服务器。它允许你在没有SSH访问的情况下同步文件

  • 配置node1为服务端

2.3.1 Rsync 配置文件

 [root@node1 ~]# vim /etc/rsyncd.conf #默认打开都是注释(可以当模板),谁是服务端配谁uid = rsync                          #指定运行rsync守护进程的用户                        gid = rsync                          #指定运行rsync守护进程的组use chroot =no                       #不使用chroot安全机制选项,chroot指定系统目录结构的位置,关闭则默认从/根开始max connections = 100                #最大连接数timeout = 300                        #超时时间,超时则断开连接pid file = /var/run/rsyncd.pid       #存储rsync守护进程的进程ID的文件的路径lock file = /var/run/rsync.lock      #存储rsync守护进程的锁文件的路径log file = /var/log/rsyncd.logignore errors                        #忽略错误dont commpress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2  #指定在rsync守护进程传输文件时不进行压缩的文件,后面是不压缩文件的扩展名hosts allow= 192.168.110.0/24        #允许192.168.110.0/24 访问的网段,这里写自己的hosts deny =0.0.0.0/32               #0.0.0.0/32,表示拒绝所有IP地址的连接fake super =yes                      #指定rsync守护进程是否假装拥有root权限,无需使用root用户启动,解决故障(必须配置,不配置无法启动服务)auth users = rsync_backup            #指定rsync守护进程的认证用户,虚拟用户不用创建secrets file= /etc/rsync.passwd      #指定rsync守护进程的用户密码文件的路径[bak]                                #[bak] 是一个模块的定义。模块是一个目录,客户端可以访问这个目录,进行文件的同步,可以定义多个comment = my backup          #对这个模块的备注,随便写path = /backup               #块的物理路径,也就是这个模块在服务器上的实际目录read only= false             #是否只读list = false                 #是否允许客户端列出这个模块的内容[root@node1 ~]# mkdir /backup   #创建上传的目录
 # 其他选项--delete 表示:目标和源目录数据保持一致 /home/xyz/ 后面得有斜线(注意一般是小的向大的同步,不要搞反,不然文件会丢失)rsync -avz --delete /opt/demo.txt rsync_backup_xyz@::backup --password-file=/etc/rsync.passwd--exclude-from 参数指定排除多个数据信息文件(排除一些文件,加-from可以指定一个脚本,里面写多个要排除的文件)rsync -avz /home/xyz/ --exclude-from= rsync_backup_xyz@10.0.1.51::backup–password-file=/etc/rsync.passwd
  • 启动

 [root@node1 ~]# useradd rsync -s /sbin/nologin -M   #创建用户,/sbin/nologin这个用户不需要登录不设置家目录,-M不创建用户的家目录[root@node1 ~]# cat > /etc/rsync.passwd << EOF  # 配置用户名(虚拟用户)和密码rsync_backup:123456EOF[root@node1 ~]# chmod 600 /etc/rsync.passwd   #将该文件权限设置为600(必须设置否则传不了[root@node1 ~]# ll /etc/rsync.passwd -rw-------. 1 root root 20 Jan 24 20:05 /etc/rsync.passwd[root@node1 ~]# setfacl -R -m u:rsync:rwx /backup/  #修改用户目录权限,也可以用chown[root@node1 ~]# systemctl start rsyncd  #启动服务
  • 测试

 # node2[root@node2 ~]# echo " hello " > /opt/xyz.txt[root@node2 ~]# rsync -avz /opt/xyz.txt rsync_backup@192.168.110.142::bakPassword: sending incremental file listxyz.txt​sent 127 bytes  received 43 bytes  11.72 bytes/sectotal size is 15  speedup is 0.09​# node1[root@node1 ~]# ll /backup/total 8-rw-r--r--. 1 rsync rsync 15 Jan 24 20:29 xyz.txt[root@node1 ~]# cat /backup/xyz.txt    #成功传输hello
  • 配置免密操作

 配置免密操作​# node2[root@node2 ~]# echo "123456" >> /etc/rsync.passwd   #直接写密码到一个文件[root@node2 ~]# chmod 600 /etc/rsync.passwd   #权限也是600[root@node2 ~]# echo "kdsg" >> /opt/xyz.txt   #再追加内容,放便测试[root@node2 ~]# rsync -avz /opt/xyz.txt rsync_backup@192.168.110.142::bak --password-file=/etc/rsync.passwd  #指定密码文件,即可免密传输sending incremental file listxyz.txt​sent 132 bytes  received 49 bytes  17.24 bytes/sectotal size is 20  speedup is 0.11​# node1[root@node1 ~]# cat /backup/xyz.txt   #成功传输hello

2.4 补充命令

2.4.1 setfacl命令

  • setfacl 是 Linux 中的一个命令,全称为 Set File Access Control List,用于设置文件和目录的访问控制列表(Access Control Lists,ACLs)。与传统的文件权限(如读、写和执行)不同,ACLs 提供了更详细的控制级别,允许用户为特定的用户和组指定权限

2.4.2 参数

  • -m 或 --modify=acl:修改文件或目录的 ACL。

  • -M 或 --modify-file=file:从文件中读取 ACL 条目进行修改。

  • -x 或 --remove=acl:从文件或目录的 ACL 中移除指定的条目。

  • -X 或 --remove-file=file:从文件中读取 ACL 条目进行移除。

  • -b 或 --remove-all:移除所有的扩展 ACL 条目。

  • -k 或 --remove-default:移除默认的 ACL。

  • --set=acl:设置文件或目录的 ACL,替换当前的 ACL。

  • --set-file=file:从文件中读取 ACL 条目进行设置。

  • --mask:重新计算有效权限掩码。

  • -n 或 --no-mask:不重新计算有效权限掩码。

  • -d 或 --default:操作应用于默认的 ACL。

  • -R 或 --recursive:递归进入子目录。

  • -L 或 --logical:逻辑步行,跟随符号链接。

  • -P 或 --physical:物理步行,不跟随符号链接。

  • --restore=file:恢复 ACLs(getfacl -R 的反向操作)。

  • --test:测试模式(ACLs 不被修改)。

  • -v 或 --version:打印版本并退出。

  • -h 或 --help:打印帮助文本。

2.4.3 示例

[root@node2 ~]# setfacl -m u:user:rwx file  #用户 'user' 添加了对文件 'file' 的读、写和执行权限
[root@node2 ~]# setfacl -R -m u:user:rwx /test  #用户 'user' 添加了对目录test及其所有子目录的读、写和执行权限
[root@node2 ~]# setfacl -x u:user file

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot解决创建项目无法选择JDK8和JDK11
  • 互斥锁以及进程间通信
  • 无人机之飞控系统基本功能
  • 遗传算法与深度学习实战(4)——遗传算法详解与实现
  • 视觉SLAM第六讲
  • vue3项目中使用 vue-i18n国际化插件,实现多语言效果
  • 响应式Web设计:纯HTML和CSS的实现技巧
  • Dapp链游如何应对DDoS攻击的全方位策略
  • PHP概述、环境搭建与基本语法讲解
  • Eureka 原理与实践详解:深入理解与代码分析
  • 【LeetCode Cookbook(C++ 描述)】一刷二叉树综合(上)
  • 算法刷题day35|动态规划:121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II、123. 买卖股票的最佳时机 III
  • Hbase图形化界面
  • Mapreduce_wordcount自定义单词计数
  • 【Python爬虫】技术深度探索与实践
  • [译]前端离线指南(上)
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • github指令
  • Netty 4.1 源代码学习:线程模型
  • 高度不固定时垂直居中
  • 记录一下第一次使用npm
  • 马上搞懂 GeoJSON
  • 强力优化Rancher k8s中国区的使用体验
  • 入手阿里云新服务器的部署NODE
  • 使用API自动生成工具优化前端工作流
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 数据仓库的几种建模方法
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 一些关于Rust在2019年的思考
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ### RabbitMQ五种工作模式:
  • #git 撤消对文件的更改
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (十) 初识 Docker file
  • (十三)Flask之特殊装饰器详解
  • (四)Controller接口控制器详解(三)
  • (转)使用VMware vSphere标准交换机设置网络连接
  • **CI中自动类加载的用法总结
  • .NET 5种线程安全集合
  • .net CHARTING图表控件下载地址
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .net8.0与halcon编程环境构建
  • .ui文件相关
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @angular/cli项目构建--Dynamic.Form
  • @RestControllerAdvice异常统一处理类失效原因
  • [001-03-007].第07节:Redis中的管道
  • [04]Web前端进阶—JS伪数组
  • [2021 蓝帽杯] One Pointer PHP