rsync服务的搭建

article/2025/8/5 9:56:46
  

目录

一、rsync介绍

rsync的安装

二、rsync的语法

三、rsync命令使用

1. 本机同步

2. 远程同步

四、rsync作为服务使用

1、尝试启动rsync程序

2、rsync的配置文件介绍

注意事项:

3. rsync+inotify实时同步

3.依赖服务托管xinetd(CentOS 6中rsync)


一、rsync介绍

  • rsync的好姐妹
    1. sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
    2. async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
    3. rsync 远程同步:remote synchronous。
  • rsync的特点
    1. 可以镜像保存整个目录树和文件系统

    2. 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等

    3. 传输效率高,使用同步算法,只比较变化的(增量备份)

      file1.txt file2.txt file3.txt(A服务器)

      file1.txt file2.txt(B服务器)

      rsync实现数据同步 => 只同步file3.txt => 增量备份

    4. 支持匿名传输,方便网站镜像;也可以做验证,加强安全

rsync与scp区别?

        两者都可以实现远程同步,但是相对比而言,rsync能力更强。表现在:① 支持增量备份;② 数据同步时保持文件的原有属性。

rsync的安装

yum install rsync -y
#在这里我比较推荐yum安装,比较方便

rsync认证方式

        rsync有两种常用的认证方式,一种是rsync-daemon方式(客户端连接873端口,实现数据传输, 传输过程不加密),另外一种是ssh方式(走ssh加密通道)。在 rsync 命令中,如果使用单个冒号(:),则默认使用 ssh 协议; 反之,如果使用两个冒号(::),则使用 rsync 协议。 在平时使用过程,我们使用最多的是rsync-daemon方式。 注意:(1)在使用rsync时,服务器和客户端都必须安装rsync程序。 (2)、rsync-daemon认证方式,需要服务器和客户端都安装rsync服务并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。 客户端启动不启动rsync服务,都不影响同步的正常进行。(3)ssh认证方式,不需要服务器和客户端配置rsync配置文件 只需要双方都安装rsync服务,并且也不需要双方启动rsync。

        两种认证方式的本质区别:(1)、ssh 协议认证连接的两端是通过管道完成通信和数据传输的,当连接到远程主机时,将在远程主 机 fork 出 rsync 进程使其成为 rsync server;(2)、而 rsync 协议认证是事先在远程主机上运行 rsync 守护进 程,监听套接字等待客户端的连接,建立连接后所有通信方式都是通过套接字完成的。

二、rsync的语法

  • man rsync
NAMErsync — a fast, versatile, remote (and local) file-copying tool//一种快速、通用、远程(和本地)的文件复制工具SYNOPSISLocal:  rsync [OPTION...] SRC... [DEST]Access via remote shell://通过远程shell访问(命令)Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST:DESTAccess via rsync daemon://通过后台程序访问(作为服务)Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
  • rsync命令参数
	-v    	详细模式输出-a    	归档模式,递归的方式传输文件,并保持文件的属性,equals -rlptgoD-r    	递归拷贝目录-l		保留软链接-p    	保留原有权限-t     	保留原有时间(修改)-g    	保留属组权限-o     	保留属主权限-D    	等于--devices  --specials    表示支持b,c,s,p类型的文件-R	    保留相对路径-H    	保留硬链接-A    	保留ACL策略-e     	指定要执行的远程shell命令-E     	保留可执行权限-X     	保留扩展属性信息  a属性

三、rsync命令使用

1. 本机同步

注意:
1. 本地数据同步的时候,源目录后面的“/”会影响同步的结果# rsync -av /dir1/ /dir3		//只同步dir1目录下面的文件到指定的路径# rsync -av /dir1 /dir2		//将当前目录dir1和目录下的所有文件一起同步2. -R:不管加不加"/",都会将源数据的绝对路径一起同步# rsync -avR /dir1/ /dir2/
3. --delete:删除目标目录里多余的文件# rsync -avR --delete /dir1/ /dir2/

2. 远程同步

pull: rsync -av user@host:/path local/path
# rsync -av root@10.1.1.1:/etc/hosts /dir1/
# rsync -av root@10.1.1.1:/backup /dir1
push: rsync -av local/path user@host:/path
# rsync -av /dir1/aa1 code@10.1.1.1:/home/code

思考:

rsync远程同步数据时,默认情况下为什么需要密码?如果不想要密码同步怎么实现?

因为两台Linux服务器在连接时,默认使用的还是SSH协议。由于没有做免密登录,所以还是需要输入对方服务器的密码。
如果不想输入密码,可以使用免密登录来实现。
# ssh-keygen
# ssh-copy-id root@10.1.1.250

四、rsync作为服务使用

思路:

对外提供服务——>端口监听——>启动服务——>启动脚本(没有)——>配置文件(修改需求)

1、尝试启动rsync程序

[root@jumper ~]# rsync --daemon
Failed to parse config file: /etc/rsyncd.conf
说明:先尝试以后台程序的方式启动它
原因:没有配置文件(默认没有)
解决:创建配置文件
[root@jumper ~]# touch /etc/rsyncd.conf
[root@jumper ~]# rsync --daemon        
[root@jumper ~]# ps -ef|grep rsync
root       3814      1  0 11:43 ?        00:00:00 rsync --daemon
root       3817   2826  0 11:44 pts/0    00:00:00 grep rsync
[root@jumper ~]# netstat -nltup|grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      3814/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      3814/rsync    
结论:
1. rsync启动时必须要读取配置文件,如果没有报错
2. rsync默认情况下,端口是873,协议tcp#或者启动rsyncd服务(CentOS6中没有,CentOS7中有这个服务)
# systemctl start rsyncd 

2、rsync的配置文件介绍

man 5 rsyncd.conf
全局的参数port = xxxpid file = xxx...
局部模块
[模块名1]path = /dir1uid = xxxgid = xxxlog file = xxxmax connections =4.....
[模块名2]path = /dir2uid =xxxgid = xxx.....# 以 rsync 用户启动进程
# 传输文件使用的用户和用户组,如果是从服务器=>客户端,要保证rsync用户对文件有读取的权限;如果是
从客户端=>服务端,要保证rsync对文件有写权限。
uid = rsync
gid = rsync
# uid和gid表明同步上来的文件写入的时候是使用哪个用户身份进行写入的。所以,这个用户必须要对 
path 定义的目录有写入权限。否则会在客户端报:rsync: xxx failed: Permission denied (13)
fake super = yes    
# 如果设置为yes,那么文件的所有者和所属组信息变成rsync虚拟用户的UID,GID,想要所有者和所属组信
息不变可以设置fake super   
use chroot = yes
# 禁锢推送的数据至某个目录, 不允许跳出该目录
#允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下,chroot为yes时
必须使用root权限,且不能备份path路径外的链接文件max connections = 200                   # 最大连接数
timeout = 300                           # 超时时间
pid file = /var/run/rsyncd.pid          # pid文件路径
lock file = /var/run/rsync.lock         # 锁文件路径
exclude = lost+found/                   # 剔除某些文件或目录,不同步
transfer logging = yes                  # 记录传输文件日志
log file = /var/log/rsyncd.log          # 指定日志文件
log format = %t %a %m %f %b             # 日志文件格式
ignore errors                           # 忽略错误信息
list = false                            # 不允许查看模块信息
hosts allow = 192.168.42.0/24           # 只允许192.168.42.0/24段ip连接
hosts deny = *                          # 不允许所有网段ip连接
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 设置不需要压缩的文件
path = /home/nebula/backup              # 上传的文件存储的目录,下载文件的读目录
comment = nebula userdata backup        #共享给客户端看到的名字,可以自己定义
read only = false                       # backup这个模块儿,是否可以被写入。
auth users = youyou                     # 虚拟用户名,即就是上传时rsync命令书写中写的。
secrets file = /etc/rsync.password      #密码文件,服务端书写格式为虚拟用户名:密码 客户端的书写格式为  虚拟用户所对应的密码# 以下为安全配置,请按照具体的生产环境需求配置。如:上传到服务端上的文件,并不希望被客户端同步
删除refuse options = delete delete-delay delete-before delete-excluded deleteaftermax-delete force partial P
# pre-xfer 用于可以在rsync传送之前,执行一些操作,如建立锁定文件,保证每次只有一个链接进行
数据传输,
# post-xfer 可以保证数据传输完毕之后可以自动执行后续动作。
pre-xfer exec = sh /root/.rsync_pre.sh
post-xfer exec = rm -f /var/rsync.lock

日志文件格式补充:

注意事项:

  1. 不论是在服务端还是客户端,密码文件的权限都必须是600,否则就会报错。服务端rsync服务是以什么用户运行,则必须保证secrets file文件拥有者必须是同一个。假设root运行rsync --daemon,则secrets file的owner也必须是root;secrets file权限必须是600。
  2. 在服务器端端尽量将所同步的文件的属主和属组改为rsyncd.conf文件中对应的uid和gid对应的用户和用户组。避面上传和下载的时候发生不必要的错误。
  3. 要想给服务端的模块下上传文件,就必须要在服务端的配置文件中对相应的模块中添加 read only=false,否则上传文件就会失败。
  4. auter users中的用户是不用在服务端创建的(只是虚拟存在而已),而uid和gid对应的用户和用户组必须是存在的(一般我们把uid指定为useradd -r系统用户或useradd -M不创建家目录,并且会指定shell为/sbin/nologin);虽然我们在远程上传和本地下载的时候用的是对应的虚拟用户,但是在rsync在验证的是时候是这里uid和gid。
  5. 没有密码有好处也有坏处,好处是不需要密码方便写脚本做远程同步;坏处就是不安全,但你可以使用防火墙等来加强安全。
  6. 同步可能出现的问题:
    • 如果同步报permission denied这种,可能是服务端selinux没有关闭
    • 同步时间慢:解决方法——绑定对方主机名
  7. 如果你希望有密码,可以用rsyncd本身自带的secrets file来做用户验证

3. rsync+inotify实时同步

需求:app1-server服务器上的/app/java_project目录的文件和backup主机上的/backup目录实时同步
分析:rsync本身不可以做到数据的实时同步,需要借助第三方工具,intotify工具。实现线上环境目录发生改变立马同步到backup主机,是单向同步。

参考-------备份端的rsyncd.conf的配置如下:

[my_java]
path=/root/java
comment=my_java.bak
log file=/var/log/rsyncd.log
uid=java_user
gid=java_user
auth users=xiaowang
secrets file=/etc/rsyncd.secrets
read only=false
ignore errors
服务端得创建用户
useradd -s /sbin/nologin -M java_user
服务端的密码文件
echo "xiaowang:123456" >> /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
客户端的密码文件
echo "123456" >> /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

步骤:
1. 在服务器端上安装inotify工具

  • 原码安装或者结合epel源使用yum 进行安装
  • 安装完后,就会产生下面两个命令

/usr/local/bin/inotifywait      等待  、/usr/local/bin/inotifywatch     看守

2. 查看命令如何使用,然后编写脚本来实现目录的监控

  • 注意:该脚本应该在备份服务器运行,该服务器是往备份服务器上进行推送
# inotifywait --help

  • -m 保持监控状态
  • -r 递归监控
  • -q 只打印事件
  • -e 指定事件

事件:

  • move    移动、delete    删除、create    创建、modify    修改、attrib    属性信息
  • 编写脚本-----实时监控要镜像备份的目录(脚本我们后面会讲到)
vim /root/inotify.sh#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /root/java.bak | while read events
dorsync -av --delete --password-file=/etc/rsyncd.secrets /root/java.bak/ xiaowang@192.168.17.3::my_java/   &> /dev/nullecho "`date +%F\ %T`出现事件$events" >> /var/log/rsyncd.log 2>&1
done# chmod +x inotify.sh        增加可执行权限
# ./inotify.sh  &            将脚本放到后台去运行

注意:
        如果单纯使用命令去推的话,正常情况下需要密码,不利于脚本编写,在这里提供2中解决方案:1)设置免密码登录;2)在backup服务器上将rsync作为后台程序运行

3. 测试验证

[root@localhost java.bak]# touch file.c
[root@localhost java.bak]# rm -rf file.c
[root@localhost java.bak]# cat /var/log/rsyncd.log
2025-06-01 22:25:54出现事件/root/java.bak/ CREATE file.c
2025-06-01 22:25:55出现事件/root/java.bak/ ATTRIB file.c
2025-06-01 22:25:56出现事件/root/java.bak/ DELETE file.c

3.依赖服务托管xinetd(CentOS 6中rsync)

独立服务:独立启动脚本 ssh ftp nfs dns …

依赖服务: 没有独立的启动脚本  依赖xinetd服务(独立服务)

  1. 平时不占用系统的运行资源
  2. xinetd服务管理依赖服务
  3. 一些轻量级服务会托管给xinetd服务

如何将rsync托管给xinetd服务去管理?

1. 安装相应的软件

 yum -y install xinetd

2. 查看软件类别

rpm -ql xinetd
/etc/rc.d/init.d/xinetd
/etc/xinetd.conf
/etc/xinetd.d   xinetd服务管理的所有轻量级服务的目录
/usr/sbin/xinetd
/usr/share/man/man5/xinetd.conf.5.gz

3. 查看rsync软件列表

rpm -ql rsync
/etc/xinetd.d/rsync
/usr/bin/rsync

4. 了解配置文件

  • 1)xinetd服务的配置文件
man 5 xinetd.conf
only_from        只允许访问
no_access        拒绝访问
access_times    控制访问服务的时间段
log_type            指定日志类型
interface        并发连接数
per_source        每个IP的最大连接数
  • 2)rsync配置文件 /etc/xinetd.d/rsync
service rsync
{disable    = no        //开关;no表示开启该服务;yes表示关闭服务flags        = IPv6socket_type     = streamwait            = nouser            = rootserver          = /usr/bin/rsyncserver_args     = --daemonlog_on_failure  += USERID
}

5. 把rsync服务的开关打开
6. 启动xinetd服务

service xinetd restart
[root@jumper ~]# netstat -nltp|grep 873
tcp        0      0 :::873                      :::*                        LISTEN      6209/xinetd    

到此,rsync服务就托管给了xinetd服务管理;后续需要有些需求,修改配置文件:
/etc/rsyncd.conf/etc/xinetd.d/rsync

 本   篇   完   结   …  …


持     续     更     新     中   …    … 


http://www.hkcw.cn/article/LrjbWPopre.shtml

相关文章

UE5.4.4+Rider2024.3.7开发环境配置

文章目录 一、UE5安装 安装有两种方式一种的源码编译安装、一种是EPIC安装,推荐后者,只需要注册一个EPIC账号就可以一键安装。 二、C环境安装 1.下载VisualStudioSetup 下载链接如下下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 选择社…

spining-lidar的电机和激光雷达体(lidar-imu)之间的标定

一、使用的是面结构标定 也就是用场景中的面结构来约束标定。 二、电机转轴和激光雷达之间的参数有哪些? 1.位置方面,显然,电机转轴是没有高度的,所以优化的相对量就是detax和detaY. 2.角度方面,显然,一开…

内存管理 : 06 内存换出

内存换出的重要性及与换入的关系 现在我们讲第25讲,主题是内存的换出(swipe out)。实际上,上一讲我们讲的是内存的换入,而这一节聚焦于内存的换出。 换入和换出必须合在一起工作,不能只有换入而没有换出。…

SAP财务过账BAPI函数使用以及代码

本文只是整理备用大部分整理自:https://www.cnblogs.com/chaguoguo/p/14006892.html 一、BAPI介绍 BAPI_ACC_GL_POSTING_POST: 主要用于处理总账凭证的过账。 它允许外部系统或程序直接向SAP的总账模块发送过账请求,而无需通过传统的用户…

PyTorch ——torchvision数据集使用

如果下载的很慢,可以试试下面这个

C#里与嵌入式系统W5500网络通讯(4)

怎么样修改W5500里的socket收发缓冲区呢? 需要进行下面的工作,首先要了解socket缓冲区的作用,接着了解缓冲区的硬件资源, 最后就是要了解自己的需求,比如自己需要哪个socket的收发送缓冲区多大。 硬件的寄存器为: 这是 W5500 数据手册中关于 Sn_RXBUF_SIZE(Socket n …

【PostgreSQL 04】PostgreSQL性能飞跃指南:从慢查询到服务器配置的全栈优化实战

PostgreSQL性能飞跃指南:从慢查询到服务器配置的全栈优化实战 关键词: PostgreSQL性能优化、查询优化、数据库调优、执行计划、索引优化、服务器配置、EXPLAIN分析、数据库性能监控 摘要: 你的PostgreSQL查询慢得像蜗牛爬行?数据库…

基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案

在使用 OpenAI、Claude、Gemini 等大语言模型 API 构建对话系统时,开发者普遍面临成本不断上升的挑战。无论是基于检索增强生成(RAG)的应用还是独立的对话系统,这些系统都需要维护对话历史以确保上下文的连贯性,类似于…

Marvin - 生成结构化输出 和 构建AI工作流

文章目录 一、关于Marvin1、项目概览2、相关链接资源3、功能特性4、为什么选择Marvin? 二、安装三、示例1、结构化输出工具marvin.extractmarvin.castmarvin.classifymarvin.generate 2、代理式控制流marvin.runmarvin.Agentmarvin.Task 四、核心抽象概念1、任务2、…

智慧新基建数字孪生,绘就桥梁运维新画卷

图扑融合中国风元素,打造智慧桥梁新基建数字孪生体系。以古韵山水风格呈现桥梁三维模型,精准映射结构细节。实时汇聚应力、位移等数据,兼具古典意境与现代科技。助力桥梁全生命周期管理,在传统美学与前沿技术交融中,提…

Codeforces Round 1028 (Div. 2) C. Gellyfish and Flaming Peony

Codeforces Round 1028 (Div. 2) C. Gellyfish and Flaming Peony 题目 Gellyfish hates math problems, but she has to finish her math homework: Gellyfish is given an array of n n n positive integers a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,…,a…

while循环判断数字位数

while循环 #include <stdio.h> int main() {int x;int n 1;printf("请输入待测数字&#xff1a;\n");scanf("%d",&x);getchar();x / 10;while (x > 0){n;x / 10;}printf("位数为&#xff1a;%d\n",n);printf("请按下回车键退…

牛顿迭代算法-深度解析

牛顿迭代算法-深度解析 一、牛顿迭代算法的起源与基本概念1.1 算法起源1.2 基本概念 二、牛顿迭代算法的原理与推导2.1 几何原理2.2 数学推导2.3 收敛性分析 三、牛顿迭代算法的代码实现3.1 Python实现3.2 C实现3.3 Java实现 四、牛顿迭代算法的时间复杂度与空间复杂度分析4.1 …

SpringAI+DeepSeek大模型应用开发实战

内容来自黑马程序员 这里写目录标题 认识AI和大模型大模型应用开发模型部署方案对比模型部署-云服务模型部署-本地部署调用大模型什么是大模型应用传统应用和大模型应用大模型应用 大模型应用开发技术架构 SpringAI对话机器人快速入门会话日志会话记忆 认识AI和大模型 AI的发…

Python打卡第42天

浙大疏锦行 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 回调函数 Hook本质是回调函数&#xff0c;所以我们先介绍一下回调函数 回调函数是作为参数传递给其他函数的函数&#xff0c;其目的是在某个特定事件发生时被调用执行。这种机制允许代码…

hysAnalyser --- 逐包分析MPEG-TS的功能说明

前言 hysAnalyser 是一款新颖、独具特色的 MPEG-TS 数据分析工具&#xff0c;定位于 1&#xff09;音视频开发和测试人员&#xff1a;和MEPG-TS有关开发、调试、测试辅助&#xff1b; 2&#xff09;和MPEG-TS相关业务系统的运维人员&#xff1a;如数字电视、OTT、互联网流媒体…

语音转文字工具

平时工作和学习比较忙&#xff0c;可能没时间听讲座&#xff0c;只能看回放&#xff0c;回访也很长&#xff0c;这时&#xff0c;我们可以借助语言转文字&#xff0c;通过阅读文字快速了解讲座的重点&#xff0c;今天给大家分享一个本人经常用的语言转文字工具&#xff0c;改工…

vue3(入门,setup,ref,计算属性,watch)

vue3(入门&#xff0c;setup,ref,计算属性,watch) 项目创建 Vue2&#xff08;选项式api&#xff09; 分散 vue3&#xff08;组合式api&#xff09; setUp&#xff08;&#xff09; setup返回值可以是一个渲染函数 面试题&#xff1a; setup和vue2中的配置项可以同时存在吗&a…

c++ 类型转换函数

测试代码&#xff1a; void testTypeTransfer() { // 测试类型转换函数class Distance {private:int meters;public:// 类型转换函数&#xff0c;int表示转化为int类型operator int() {std::cout << "调用了类型转换函数" << endl;return meters; }Dist…

如何使用 Docker 部署grafana和loki收集vllm日志?

环境: Ubuntu20.04 grafana loki 3.4.1 问题描述: 如何使用 Docker 部署grafana和loki收集vllm日志? 解决方案: 1.创建一个名为 loki 的目录。将 loki 设为当前工作目录: mkdir loki cd loki2.将以下命令复制并粘贴到您的命令行中,以将 loki-local-config.yaml …