rsync服务详解

rsync命令参数

-v, --verbose  显示输出过程
-z, --compress 压缩
-a, --archive  多参数集合(-rtopgDl)
-r, --recursive 递归
-t, --times    保持修改时间属性
-o, --owner    保持属主不变
-p, --perms    保持权限不变
-g, --group    保持用户组不变
-l, --links    保持拷贝软连接
-q, --quiet    安静的拷贝
--bwlimit=KBPS 限制I/O带宽,KBytes per second。
--delete       删除
--exclude      排除
--exclude-from 从文件中排除

# 常用组合:-avz或者-vzrtopg(rtopg=a)

rsync守护进程模式

服务端配置

首先要搭建rsync服务端(要有守护进程),然后才能在客户端实现推拉数据。
rsync服务模式:开启后台进程,接受别人访问。

# 1. 配置配置文件/etc/rsyncd.conf
cat > /etc/rsyncd.conf <<EOF
uid = rsync             #指定启动用户
gid = rsync             #指定组
use chroot = no         #一个安全方面的配置,不配置也可以
max connections = 200   #设置最大连接数,默认为0,意思为无限制,负值为关闭这个模块
timeout = 600           #默认为0,意思为超时时间无限制
pid file = /var/run/rsyncd.pid   #pid文件
lock file = /var/run/rsync.lock   #指定lock文件
log file = /var/log/rsyncd.log    #日志文件
ignore errors    #忽略io错误
read only = false       #指定客户端是否可以上传文件
list = false            #是否允许客户端可以查看可用模块列表
hosts allow = 100.100.137.0/24   #指定可以连接的ip段
hosts deny = 0.0.0.0/32          #指定不可以连接的ip段,黑名单,拒绝和允许安全配置参数二选一进行配置
auth users = rsync_backup        # 定义了一个需要进行身份验证的用户名列表。这意味着当客户端尝试连接到这个 rsync 服务时,它们必须提供一个在此列表中的用户名和对应的密码才能访问资源。 
secrets file = /etc/rsync.password   #指定用户名和密码存放的文件

[backup]    #模块的名称
comment = welcome to zqf backup!
path = /backup/     #这个模块使用的路径
fake super = yes     #允许非超级用户(即普通用户)在传输文件时保留文件的特殊属性,比如所有者、组信息以及设置权限等
EOF

# 2. 创建备份目录
mkdir /backup -p

# 3. 创建用户
useradd -s /sbin/nologin -M rsync
id rsync
uid=1003(rsync) gid=1003(rsync) 组=1003(rsync)

# 4. 授权rsync管理backup目录
chown -R rsync.rsync /backup
ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 6月  28 16:58 /backup/

# 5. 创建密码文件并设置权限,格式:用户:密码 ,#文件名随意起,但是要和rsyncd.conf secrets file = /etc/rsync.password一致。
echo "rsync_backup:1qaz@WSX" >/etc/rsync.password 
chmod 600 /etc/rsync.password

# 6. 启动rsync服务和检查
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
netstat -lntup|grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      7521/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      7521/rsync 

客户端配置

在客户端服务器操作,配置认证密码文件并授权:

# 配置认证密码文件并授权: 以下方法2选1
# 方法1:认证密码文件
echo "1qaz@WSX" >/etc/rsync.password #只有密码,没有用户,密码和服务的配置相同。
chmod 600 /etc/rsync.password

方法2:配置环境变量
echo 'export RSYNC_PASSWORD=1qaz@WSX' >>/etc/bashrc 
. /etc/bashrc 

测试完成结果:

# 拉取实践
rsync -avz rsync_backup@100.100.137.200::backup /data --password-file=/etc/rsync.password

# 推送实践
rsync -avz  /data/*   rsync_backup@100.100.137.200::backup --password-file=/etc/rsync.password

rsync断点续传和限速

--partial 默认情况下,rsync将删除所有部分传输的文件,如果传输被中断。在某些情况下,保留部分已经传输的文件是所希望的。使用--partial参数告知rsync保留部分传输过的文件,可以使该文件剩余部分的传输更快速

--partial-dir=DIR 保留部分传输文件时,比--partial参数更好的方法是指定一个目录来保存部分数据(而不是将其写入目标文件)。在下一个传输过程中,rsync将使用这个dir中的文件作为数据,以加快恢复传输的速度,并在它达到目的后将其删除

--bwlimit=KBPS 这个参数允许指定数据最大传输速率为每秒多少K,当使用rsync传输大文件时,参数效果最有效(例如在兆字节以上时)。根据rsync传输的性质,采用数据块发送,如果rsync确定传输速度太快,可以在发送下一个数据块之前进行等待。使平均的传输速率等价于指定的限制速率。如果设定为0将不会做速率限制。

# 限速实践:
rsync -avz --bwlimit=100 /data/ rsync_backup@100.100.137.200::backup --password-file=/etc/rsync.password
# --bwlimit=100	限制传输带宽为 100 KB/s(单位:KB/s)。

主机之间数据无差异复制

rsync推送:数据备份,上传。本地有啥,远端就有啥,本地没有的远端有也要删除,会造成服务器端的目录数据丢失,在备份和上传场景一般不需要--delete功能,除非是像NFS实时复制数据到备份服务器上必须要保持两边一致的情形。

rsync无差异同步非常的危险,而且,有很多的替代方案,因此,生产场景没有特殊的需求,应避免使用。写了这么多内容的目的是警告读者,这个参数很危险,请慎用,切记

# 客户端推:服务端/backup目录数据丢失风险
# 让服务端/backup目录和客户端/null目录数据一致(服务端/backup目录数据丢失风险)
rsync -avz --delete /null/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

# 客户端拉:客户端/data目录数据丢失风险
# 让客户端/data目录和服务端/backup目录和数据一致(客户端/data目录数据丢失风险)
rsync -avz --delete rsync_backup@172.16.1.41::backup /data/ --password-file=/etc/rsync.password

sersync实时复制

Sersync项目利用inotify与rsync技术实现对服务器数据实时复制的解决方案,其中inotify用于监控sersync所在服务器上文件系统的事件变化,当事件发生变化时就调用rsync命令将变化的数据复制到远端服务器上。

sersync特点

  1. 使用c++编写,支持对监控的事件过滤功能。
  2. sersync采用xml配置文件,然后由守护进程启动,配置起来比inotify-tools更简单。
  3. 使用多线程进行复制,即可以并发复制多个不同文件。
  4. sersync自带出错处理机制,通过失败队列对出错的文件重新复制。
  5. sersync自带crontab功能,可实现对失败队列中的文件定时整体复制。
  6. sersync自带socket与http的协议扩展,可以满足有特殊需求的公司二次开发

sersync+rsync实时复制案例

  1. 大前提rsync daemon服务配置成功,可以在rsync客户端推送拉取数据,然后才能配置inotify服务。确保已经配置好rsync服务,并且能在客户端推送和拉取数据信息:
rsync -avz  /data  rsync_backup@100.100.137.200::backup --password-file=/etc/rsync.password
  1. 检查当前系统nfs01是否支持inotify实时监控,通过检查/proc/sys/fs/inotify目中是否存在以下三个文件,可以确认系统是否支持实时监控程序。
uname -r
3.10.0-957.1.3.el7.x86_64  #<==内核是3.10,支持inotify机制。

ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r--. 1 root root 0 Apr 14 18:54 max_queued_events
-rw-r--r--. 1 root root 0 Apr 14 18:54 max_user_instances
-rw-r--r--. 1 root root 0 Apr 14 18:54 max_user_watches
  1. 在需要备份的机器安装配置sersync
wget https://github.com/wsgzao/sersync/blob/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
cd /usr/local/
mv GNU-Linux-x86/ sersync 
ls sersync/
confxml.xml  sersync2
  1. sersync配置文件(confxml.xml):干两件事:
    • 完成监控配置:inotifywait -mrq -e createFolder,close_write,delete,moveFrom,moveTo /data
    • 完整命令拼接:rsync -avz /data rsync_backup@100.100.137.200::backup --password-file=/etc/rsync.password
      20250814125217
  2. 启动sersync
./sersync2 -h
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
________________________________________________________________


/usr/local/sersync/sersync2  -r -o /usr/local/sersync/confxml.xml -d

pstree -a -p 22911
sersync2,22911 -r -o /usr/local/sersync/confxml.xml -d
  ├─{sersync2},22915
  ├─{sersync2},22916
  ├─{sersync2},22917
  ├─{sersync2},22918
  ├─{sersync2},22919
  ├─{sersync2},22920
  ├─{sersync2},22921
  ├─{sersync2},22922
  ├─{sersync2},22923
  ├─{sersync2},22924
  └─{sersync2},22925

# 这里可以看到sersyns是多线程的

配置systemctl start sersync启动方案

cat /usr/lib/systemd/system/sersync.service
[Unit]
Description=sersyncd service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/sersync/sersync2  -r -o /usr/local/sersync/confxml.xml -d
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemctl daemon-reload 
systemctl start sersync.service
systemctl status  sersync.service
systemctl enable  sersync.service
posted @ 2025-08-14 12:58  阿峰博客站  阅读(49)  评论(0)    收藏  举报