rsync服务的搭建

news2025/6/5 0:40:04
  

目录

一、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
NAME
       rsync — a fast, versatile, remote (and local) file-copying tool
       //一种快速、通用、远程(和本地)的文件复制工具

SYNOPSIS
       Local:  rsync [OPTION...] SRC... [DEST]

       Access via remote shell:
       //通过远程shell访问(命令)
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

       Access via rsync daemon:
       //通过后台程序访问(作为服务)
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [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 = xxx
	pid file = xxx
	...
局部模块
[模块名1]
	path = /dir1
	uid = xxx
	gid = xxx
	log file = xxx
    max connections =4
    .....
[模块名2]
	path = /dir2
	uid =xxx
	gid = 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 deleteafter
 max-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
do
        rsync -av --delete --password-file=/etc/rsyncd.secrets /root/java.bak/ xiaowang@192.168.17.3::my_java/   &> /dev/null
        echo "`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        = IPv6
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon
    log_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.coloradmin.cn/o/2396575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode 配置 QtCreat Cmake项目

1.vscode安装CmakeTool插件并配置QT中cmake的路径,不止这一处 2.cmake生成器使用Ninja(Ninja在安装QT时需要勾选),可以解决[build] cc1plus.exe: error: too many filenames given; type ‘cc1plus.exe --help’ for usage 编译时…

HTML实现端午节主题网站:龙舟争渡,凭吊祭江诵君赋。

名人说:龙舟争渡,助威呐喊,凭吊祭江诵君赋。——苏轼《六幺令天中节》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、项目概览:传统与现代的技术碰撞1. 核心特…

uniapp uni-id 如果是正式项目,需自行实现发送邮件的相关功能

(3) 使用云对象sendEmailCode 发送邮箱验证码,报错送邮箱验证码失败 Error: 已启动测试模式,直接使用:123456作为邮箱验证码即可。 如果是正式项目,需自行实现发送邮件的相关功能 - DCloud问答 uni-id 没有实现邮箱验证码逻辑&am…

C++学习-入门到精通【12】文件处理

C学习-入门到精通【12】文件处理 目录 C学习-入门到精通【12】文件处理一、文件和流二、创建顺序文件三、从顺序文件读取数据文件定位指针对之前的程序进行修改:贷款查询程序 四、更新顺序文件五、随机存取文件1.创建随机存取文件2.修改程序:贷款处理程序…

记一次 Starrocks be 内存异常宕机

突发性 be 内存飙高,直至被系统 kill 掉,be 内存如下:其中 starrocks_be_update_mem_bytes 指标打满,重启也是如此 [rootlocalhost bin]# curl -XGET -s http://192.168.1.49:8040/metrics | grep "^starrocks_be_.*_mem_b…

LangChain-结合GLM+SQL+函数调用实现数据库查询(一)

业务流程 实现步骤 1. 加载数据库配置 在项目的根目录下创建.env 文件,设置文件内容: DB_HOSTxxx DB_PORT3306 DB_USERxxx DB_PASSWORDxxx DB_NAMExxx DB_CHARSETutf8mb4 加载环境变量,从 .env 文件中读取数据库配置信息 使用 os.getenv…

2025年渗透测试面试题总结-匿名[校招]安全工程师(甲方)(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 匿名[校招]安全工程师(甲方) 1. 介绍自己熟悉的渗透领域 2. 编程语言与开发能力 3. 实习工作内容与流程 …

PySide6 GUI 学习笔记——常用类及控件使用方法(地址类QUrl)

文章目录 地址类QUrl主要功能URL 格式介绍常见 scheme(协议)类型QUrl 类常用方法常用方法示例典型应用场景 地址类QUrl QUrl 是 PySide6.QtCore 模块中的一个类,用于处理和操作 URL(统一资源定位符)。它可以解析、构建…

任务23:创建天气信息大屏Django项目

任务描述 知识点: Django 重 点: Django创建项目Django视图函数Django路由Django静态文件Django渲染模板 内 容: 使用PyCharm创建大屏项目渲染大屏主页 任务指导 1. 使用PyCharm创建大屏项目。 创建weather项目配置虚拟环境创建ch…

数学分析——一致性(均匀性)和收敛

目录 1. 连续函数 1.1 连续函数的定义 1.2 连续函数的性质 1.2.1 性质一 1.2.2 性质二 1.2.3 性质三 1.2.4 性质四 2. 一致连续函数 2.1 一致连续函数的定义 2.2 一致连续性定理(小间距定理)(一致连续函数的另一种定义) 2.3 一致连续性判定法 2.4 连…

Flutter GridView网格组件

目录 常用属性 GridView使用配置 GridView.count使用 GridView.extent使用 GridView.count Container 实现列表 GridView.extent Container 实现列表 GridView.builder使用 GridView网格布局在实际项目中用的也是非常多的,当我们想让可以滚动的元素使用矩阵…

【深度学习】18. 生成模型:Variational Auto-Encoder(VAE)详解

Variational Auto-Encoder(VAE)详解 本节内容完整介绍 VAE 的模型结构、优化目标、重参数化技巧及其生成机制。 回顾:Autoencoder(自编码器) Autoencoder 是一种无监督学习模型,旨在从未标注的数据中学习压…

解决Window10上IP映射重启失效的问题

问题 在实际网络搭建过程中,大家有可能会遇到在局域网范围内,在自己本机上搭建一个网站或者应用时,其他设备通过本机的IP地址无法访问的问题,这个问题可以通过设置IP映射来解决,但是通过netsh interface命令设置的IP映射&#xf…

python h5py 读取mat文件的<HDF5 object reference> 问题

我用python加载matlab的mat文件 mat文件: 加载方式: mat_file h5py.File(base_dir str(N) _nodes_dataset_snr- str(snr) _M_ str(M) .mat, r) Signals mat_file["Signals"][()] Tp mat_file["Tp"][()] Tp_list mat_fil…

linux命令 systemctl 和 supervisord 区别及用法解读

目录 基础与背景服务管理范围配置文件和管理方式监控与日志依赖管理适用场景常用命令对照表实际应用场景举例优缺点对比小结参考链接 1. 基础与背景 systemctl 和 supervisord 都是用于管理和控制服务(进程)的工具,但它们在设计、使用场景和…

Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例

📁 示例项目结构(基于 Maven) user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

stm32 + ads1292心率检测报警设置上下限

这个项目是在做心率检测的时候一个小伙伴提出来的,今年五一的时候提出来的想法,五一假期的时候没时间,也没心情做这个,就把这个事情搁置了,在月中做工作计划的时候,就把这个小项目排进来了,五一…

项目练习:element ui 的icon放在button的右侧

文章目录 一、需求描述二、左侧实现三、右侧实现 一、需求描述 我们知道&#xff0c;element ui的button一般都会配置一个icon 这个icon默认是放在左侧的。 如何让它放在右侧了&#xff1f; 二、左侧实现 <el-buttontype"primary"plainicon"el-icon-d-arr…

性能诊断工具AWR配置策略与报告内容解析

AWR&#xff08;Automatic Workload Repository&#xff09;是 Oracle 数据库中的一个重要性能诊断工具。AWR 会按照固定的时间间隔自动收集数据库系统的性能统计信息。这些信息涵盖了数据库运行状态的方方面面&#xff0c;像SQL 执行情况、系统资源利用率、等待事件等。AWR抓取…

Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(三):实现暗黑模式主题切换

基于前两篇的内容&#xff0c;为页面添加主题切换功能&#xff0c;实现网站页面的暗黑模式&#xff1a; Tailwind css实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;一&#xff09;-CSDN博客 Tailwind css实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;…