rsync服务的搭建

  

目录

一、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.pswp.cn/bicheng/83269.shtml

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

相关文章

【C/C++】面试基础题目收集

C 软件开发面试中常见的刷题题目通常可分为以下几大类:数据结构与算法、系统编程、面向对象设计、C 语言特性、并发编程等。 🧠 一、数据结构与算法(力扣/牛客经典题) 掌握 STL 和底层结构实现能力: 📌 数…

将手机网络经USB数据线和本地局域网共享给华为AP6050DN无线接入点

引言 由于最近装毕的新家所在的小区未能及时通宽带,于是家中各类无线设备如何上网就成了首要要解决的问题。 鉴于家中要联网的设备多、类型杂、支持频段也不一,总是开手机热点不是回事儿,于是就想着把手机网络引至华为AP6050DN无线接入点中,让家中所有的无线设备都能快速高…

【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​

深度优先搜索 导读:从广度到深度,探索图的遍历奥秘一、深度优先搜索二、算法思路三、算法逻辑四、算法评价五、深度优先生成树六、有向图与无向图结语:深潜与回溯,揭开图论世界的另一面 导读:从广度到深度,…

Flink CEP实践总结:使用方法、常见报错、优化与难点应对

Flink CEP实践总结:使用方法、常见报错、优化与难点应对 随着实时数据分析需求的提升,Flink CEP(Complex Event Processing,复杂事件处理)成为事件流检测中的利器。本文结合实际项目经验,总结Flink CEP的基…

Python数据类型详解:从字符串到布尔值,一网打尽

Python是现代编程语言中非常流行的一种,它的语法简洁、易懂,非常适合初学者。而在Python编程中,“数据类型”是最基础也是最重要的概念。理解这个概念,将为你之后的编程打下坚实的基础。 1. 什么是数据类型? 在Pytho…

python打卡day42

Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 在深度学习中,我们经常需要查看或修改模型中间层的输出或梯度,但标准的前向传播和反向传播过程通常是一个黑盒,很难直接访问中间层的信息。PyT…

中国风展示工作总结商务通用PPT模版

中国风展示工作总结商务通用PPT模版:中国风商务通用PPT 模版https://pan.quark.cn/s/42ad18c010d4

TeleAI发布TeleChat2.5及T1正式版,双双开源上线魔乐社区!

5月12日,中国电信开源TeleChat系列四个模型,涵盖复杂推理和通用问答的多个尺寸模型,包括TeleChat-T1-35B、TeleChat-T1-115B、TeleChat2.5-35B和TeleChat2.5-115B,实测模型性能均有显著的性能效果。TeleChat系列模型基于昇思MindS…

机器视觉2D定位引导一般步骤

机器视觉的2D定位引导是工业自动化中的核心应用,主要用于精确确定目标物体的位置(X, Y坐标)和角度(旋转角度θ),并引导机器人或运动机构进行抓取、装配、对位、检测等操作。其一般步骤可概括如下: 一、系统规划与硬件选型 明确需求: 定位精度要求(多少毫米/像素,多少…

儿童节快乐,聊聊数字的规律和同余原理

某年的6月1日是星期日。那么,同一年的6月30日是星期几? 星期是7天一个循环。所以说,这一天是星期几,7天之后同样也是星期几。而6月30日是在6月1日的29天之后:29 7 4 ... 1用29除以7,可以得出余数为1。而…

最佳实践|互联网行业软件供应链安全建设的SCA纵深实践方案

在数字化转型的浪潮中,开源组件已成为企业构建云服务与应用的基石,但其引入的安全风险也日益凸显。某互联网大厂的核心安全研究团队,通过深度应用软件成分分析(SCA)技术,构建了一套覆盖开源组件全生命周期管…

Docker Compose(容器编排)

目录 什么是 Docker Compose Docker Compose 的功能 Docker Compose 使用场景 Docker Compose 文件(docker-compose.yml) Docker Compose 命令清单 常见命令说明 操作案例 总结 什么是 Docker Compose docker-compose 是 Docker 官方的开源项…

【网络安全】轻量敏感路径扫描工具

订阅专栏,获取文末项目源码。 文章目录 工具简介工具特点项目结构使用方法1.环境准备2.配置目标URL3.运行扫描4.结果查看5.自定义扩展项目源码工具简介 该工具是一款基于Python的异步敏感路径扫描工具,用于检测目标网站是否存在敏感文件或路径泄露(如配置文件、密钥、版本控…

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

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

高温炉制造企业Odoo ERP实施规划与深度分析报告

摘要 本报告旨在为高温炉生产企业提供一个基于Odoo 18平台的企业资源规划(ERP)系统实施的全面分析与规划。报告首先系统梳理了高温炉制造业独特的业务流程特点,随后详细映射了Odoo 18各核心模块功能与这些业务需求的匹配程度。重点分析了生产…

简述什么是全局锁?它的应用场景有哪些?

全局锁是数据库管理系统中的一种特殊锁机制,用于对整个数据库实例进行加锁,使数据库处于只读状态,阻止所有数据更新(DML)、数据定义(DDL)及更新类事务提交等操作。 其核心应用场景包括&#xf…

window 显示驱动开发-呈现开销改进(二)

对共享表面的纹理格式支持 驱动程序应支持共享资源和可共享的后台缓冲区,以使用 DXGI_FORMAT 枚举中的这些附加纹理格式: DXGI_FORMAT_A8_UNORMDXGI_FORMAT_R8_UNORMDXGI_FORMAT_R8G8_UNORMDXGI_FORMAT_BC1_TYPELESS\*DXGI_FORMAT_BC1_UNORMDXGI_FORMAT…

jenkins集成gitlab实现自动构建

jenkins集成gitlab实现自动构建 前面我们已经部署了Jenkins和gitlab,本文介绍将二者结合使用 项目源码上传至gitee提供公网访问:https://gitee.com/ye-xiao-tian/my-webapp 1、创建一个群组和项目 2、添加ssh密钥 #生成密钥 [rootgitlab ~]# ssh-keyge…

barker-OFDM模糊函数原理及仿真

文章目录 前言一、巴克码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、barker-OFDM 模糊函数②、barker-OFDM 距离分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高线图 四、资源自取 前言 本文进行 …

深入解析 Redis Cluster 架构与实现(一)

#作者:stackofumbrella 文章目录 Redis Cluster特点Redis Cluster与其它集群模式的区别集群目标性能hash tagsMutli-key操作Cluster Bus安全写入(write safety)集群节点的属性集群拓扑节点间handshake重定向与reshardingMOVED重定向ASK重定向…