Linux rsync 守护进程管理及数据同步实践

一、rsync 软件简介

rsync 常用于做为 Linux 系统下的数据镜像备份工具,实现远程同步,支持本地复制,或者与其他 ssh、rsync主机同步数据,支持增量备份,配合任务计划,rsync 能实现定时或间隔同步,配合 inotify 或 sersync,可以实现触发式的实时数据同步。

二、工作方式

  1. 本地文件系统上实现同步。

  2. 本地主机使用远程ssh和远程主机通信。

  3. 本地主机通过网络套接字连接远程主机上的 rsync daemon。

前两者的本质是通过本地或远程 shell,第3种方式则是让远程主机上运行 rsyncd 服务,通过监听端口,等待客户端的连接,使用的 rsync 的专有协议。

三、命令样式及常用选项

本地文件同步

rsync [OPTION]... SRC [SRC]... DEST

远程文件同步

rsync [OPTION]... [USER@]HOST:SRC [DEST]           #PULL 拉,将远程主机上的文件拉到本地
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST    #PUSH 推,将本地文件推送到远程主机上

守护进程方式

rsync [OPTION]... [USER@]HOST::SRC [DEST]                         #将远程主机上的文件拉到本地
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]           #将远程主机上的文件拉到本地
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST                  #将本地文件推送到远程主机上
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST    #将本地文件推送到远程主机上

常用选项

  • --verbose|-v : 显示详细过程,最多可以 -vvvv

  • --quiet|-q : 不输出错误信息

  • --archive|-a : 归档模式,保留文件属性

  • --recursive|-r : 递归

  • --backup|-b : 如果目标文件存在,先做备份,默认备份后缀是 ~

  • --backup-dir=DIR : 指定备份目录

  • --suffix=SUFFIX : 指定备份后缀

  • --update|-u : 仅在源mtime比目标已存在文件的mtime新时才拷贝,该选项是接收端判断的,不会影响删除行为

  • --links|-l : 传输软链接文件,而不是传输其指向的文件

  • --copy-links|-L : 跟随软链接,传输其指向的目标文件或目录

  • --perms|-p : 保留权限(不包括特殊权限)

  • --owner|-o : 保持owner属性

  • --group|-g : 保持group属性

  • -D : 传输设备文件和特殊文件,同 --devices --specials

  • --times|-t : 保留mtime属性

  • --dry-run|-n : 测试模式,不实际传输,常合 -vvvv 配合查看细节

  • --whole-file|-W : 不使用增量传输,而使用全量传输,在网络带宽高于磁盘带宽时,该选项比增量传输更高效

  • --rsh=COMMAND|-e : 指定所要使用的远程shell程序,默认为ssh

  • --existing : 只更新远端已存在的文件,远端不存在的文件不传输。使用相对路径时如果上层目录不存在也不会传输

  • --ignore-existing : 只传输远程主机不存在的文件

  • --remove-source-files : 删除己传输成功的源文件

  • --del : 在传输中删除,同 --delete-during

  • --delete : 文件传输时,删除DEST中在SRC 中不存在的文件

  • --delete-before : 传输开始前先删除

  • --delete-during : 在传输过程中删除

  • --delete-delay : 在传输中确定要删除的文件,传输结束后删除

  • --delete-after : 传输结束后再删除

  • --delete-excluded : 删除远程主机上在此项中指定的文件

  • --force : 强制删除目录,哪怕不为空

  • --max-delete=NUM : 最多删除NUM个文件

  • --max-size=SIZE : 限制rsync传输的最大文件大小,可以使用单位后缀,可以写小数值

  • --min-size=SIZE : 限制rsync传输的最小文件大小。可用于禁止传输小文件或垃圾文件,可以写小数值

  • --size-only : 默认传输有变化的文件,默认检查文件大小变化和 mtime,此项表示只检查文件大小变化

  • --compress|-z : 压缩传输

  • --exclude=PATTERN : 用正则来指定排除规则来排除不需要传输的文件

  • --exclude-from=FILE : 从文件中读取不需要被传送的文件

  • --include=PATTERN : 用正则来指定要传输的文件

  • --include-from=FILE : 从文件中读取要传输的文件

  • --port=PORT : 连接daemon时使用的端口号,默认为873端口

  • --human-readable|-h : 以人类友好的格式显示相关信息

  • --progress : 显示进度条

  • -P : 显示进度条,同 --partial --progress

  • --password-file=FILE : daemon模式时密码文件,读取密码非交互式操作 这不是远程shell认证的密码,而是rsync模块认证的密码

  • --version|-V : 显示版本信息

  • --help|-h (*) : 显示帮助信息

四、数据同步实践

1、角色分配

主机 IP主机名角色操作系统
10.0.0.112ubuntu24-112rsync-serverubuntu24
10.0.0.15rocky9-15rsync-clientrocky9

2、软件安装

Centos 系统

yum install -y rsync

Ubuntu 系统

apt install -y rsync

查看版本

3、启动服务

默认情况下,rsync 服务是没有启动的。

服务端以守护进程运行

systemctl enable --now rsync.service

启动失败,原因是配置文件 /etc/rsyncd.conf 不存在

生成配置文件后启动服务

查看监听端口

ss -tunlp | grep rsync

该服务监听在 873 端口上

4、客户端连接测试

在客户端进行rsync连接测试,因为服务端的rsync配置文件是空的,没有监听任何信息,所以没有信息输出,但是命令是执行成功的。

5、匿名同步

编辑配置文件 /etc/rsyncd.conf ,增加相关配置

重启服务

查看服务端目录

客户端再次测试,可以看到内容(命令 2 中的 :: 表示走 rsync 协议)

因为配置里没有指定用户,所以默认情况下传输信息回导致失败(此处的 root 是指 rsync 服务的用户,当前服务端配置里没有 root 相关信息,默认会被映射成 nobody)

服务端授权 nobody 相关权限,

客户端再次测试,分别使用 root 用户和不存在的 tom 用户

服务端查看目录(文件属主为 nobody, 属组为 nogroup)

7、指定用户同步

服务端修改配置,增加用户信息(uid、gid、密码),禁用匿名连接

uid=root                         #设置 rsync 服务运行时使用的用户ID为 root。这意味着 rsync 服务将以 root 用户的权限运行,对于访问和传输的文件和目录,需要有相应的权限。
gid=root                         #设置 rsync 服务运行时使用的组ID为 root。这同样意味着服务将以 root 组的权限运行。
max connections=0                #设置最大并发连接数为0。这里有一个常见的误解,实际上设置为0并不表示不允许任何连接,而是表示没有限制连接数。rsync 官方文档指出,设置为0意味着没有限制,允许任意数量的连接。
log file=/var/log/rsyncd.log     #指定 rsync 服务的日志文件路径为 /var/log/rsyncd.log。所有关于 rsync 服务的日志信息都会被记录在这个文件中,用于调试和监控。
pid file=/var/run/rsyncd.pid     #指定 rsync 守护进程的进程ID(PID)文件路径为/var/run/rsyncd.pid。这个文件包含了 rsync 守护进程的PID,可以用于停止或重启服务。
lock file=/var/run/rsyncd.lock   #指定 rsync 服务的锁文件路径为 /var/run/rsyncd.lock。这个文件用于确保 rsync 服务在同一时间只运行一个实例。

[dir1]                         #模块名,用于在客户端指定要同步的模块。
path=/data/dir1/               #指定模块同步的目录路径为 /data/dir1/。这是客户端将要同步或从中同步数据的目录。
comment=rsync dir1             #对模块的简短描述,通常用于客户端显示信息,帮助用户识别不同的同步模块。
read only=no                   #设置模块为可读可写。如果设置为 yes,则只允许客户端读取数据,不允许写入。
auth users=rsyncer             #指定允许访问该模块的认证用户名。客户端在连接时需要提供这个用户进行认证。
secrets file=/etc/rsyncd.pwd   #指定包含用户名和密码的文件路径。这个文件应该包含一行用户名和密码对(格式为 username:password),用于客户端认证。

配置密码文件(权限必须为 600)

重启服务

客户端再次测试,匿名连接报错

指定用户连接成功

同步文件

服务端查看目录,文件已经同步,且属主和属组均为 root

8、指定密码文件同步

客户端创建密码文件,无需输入用户名

指定密码文件进行同步

rsync -avz --delete --password-file=/etc/rsyncd_passwd.pwd /data/www/ rsyncer@10.0.0.112::dir1

服务端查看

9、停止守护进程

取消开机自启动并查看状态

systemctl disable rsync && systemctl is-enabled rsync

停止服务

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

siriuuus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值