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

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

 本   篇   完   结   …  …


持     续     更     新     中   …    … 

相关文章:

  • Python 验证码识别(使用pytesseract库)
  • 参数高效的提示调优实现了通用且校准的神经文本检索器
  • 网页自动化部署(webhook方法)
  • 【Go-补充】Sync包
  • STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联
  • 【Go语言生态】
  • 结合源码分析Redis的内存回收和内存淘汰机制,LRU和LFU是如何进行计算的?
  • Spring Boot,注解,@ComponentScan
  • Mybtais框架各配置文件主要内容详解(一)
  • 【xmb】】内部文档148344599
  • Azure 机器学习初学者指南
  • PCIe—TS1/TS2 之Polling.Active(一)
  • MVVM、MVC的区别、什么是MVVM
  • VScode编译调试debug,gpu的cuda程序,Nsight
  • Amazon GameLift实战指南:低成本构建高并发全球游戏服务器架构
  • 【模拟电子电路-学习链接】
  • 杨校老师竞赛课之GESP一级C++[2024-12]真题及题解
  • latex 三线表-算法对比表
  • Leetcode 3566. Partition Array into Two Equal Product Subsets
  • STM32Cubemx-H7-17-麦克纳姆轮驱动
  • 网站开发都是模板/360站长
  • 网站收录提交入口网址/网络优化工程师工作内容
  • 开发软件需要学什么专业/石家庄seo结算
  • 香港公司怎么做网站/网页设计基础
  • 营销网站建设流程/自己做网站难吗
  • 网络推广员为什么做不长/重庆seo招聘