5.6 Linux rsync 服务

1、rsync 概念介绍

官方网站:rsync

rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具。Rsync通过"rsync算法"提供了一个客户机和远程服务器的文件同步的快速方法。

采用C/S模式

端口tcp:873

a. rsync 特性

可以镜像保存整个目录树和文件系统。

可以很容易做到保持原来文件的权限、时间、软硬链接等

b. rsync 优点

快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。

压缩传输:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

安全:可以使用ssh协议来传输文件

支持匿名传输,以方便进行网站镜象。

选择性保持:符号连接,硬链接,文件属性,权限,时间等,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。

c. rsync 备份分类
  • 完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地
  • 差异备份:备份上次完全备份以后有变化的数据
  • 增量备份:备份上次备份以后有变化的数据
d. rsync 同步方式

push:数据源服务器把数据推送给数据备份服务器,类似于数据上传,在备份服务器上配置rsync服务,如果后端备份服务器较多,数据源服务器开销会很大。

pull:所有的数据备份服务器去找数据源服务器拉数据,类似于数据下载,在数据源服务器上配置rsync服务,如果后端服务器同时去拉数据,会导致数据传输缓慢。

e. rsync 命令

描述:同步数据

语法:rsync [选项] 源文件 目标文件

  • -a, --archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等
  • -r, --recursive 复制所有下面的资料,递归处理
  • -p, --perms 保留档案权限 ,文件原有属性
  • -t, --times 保留时间点,文件原有时间
  • -g, --group 保留原有属组
  • -o, --owner 保留档案所有者(root only)
  • -D, --devices 保留device资讯(root only)
  • -l, --links 复制所有的连接 ,拷贝连接文件
  • -z, --compress 压缩模式, 当资料在传送到目的端进行档案压缩.
  • -H, --hard-links 保留硬链接文件
  • -A, --acls 保留ACL属性文件,需要配合--perms
  • -P,---partial --progress 只是为了把参数简单化,表示传进度
  • --version, 输出rsync版本
  • -v , --verbose 复杂的输出信息
  • -u, --update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件
  • --port=PORT 定义rsyncd(daemon)要运行的port(预设为tcp 873)
  • --delete 删除那些目标位置有的文件而备份源没有的文件
  • --password-file=FILE 从 FILE 中得到密码
  • --bwlimit=KBPS 限制 I/O 带宽
  • --filter "-filename" 需要过滤的文件
  • --exclude=filname 需要过滤的文件
  • --progress 显示备份过程、

注意:如果传输的特别大的文件,就不要用-z参数,因为压缩和解压比较耗时

-----------------------------------------------------------

配置rsync数据同步(push)

在远程同步任务中,负责发起rsync同步操作的主机称为发起端,而负责响应rsync同步操作的主机称为rsync服务器(也称为同步源)。

使用rsync同步工具时,同步源可以是服务器模式运行的rsync程序, 也可以是SSH服务器。

|----------|----------------|---------------|
| 主机名 | 角色 | Ip 地址 |
| Client01 | rsync客户端, 数据源 | 192.168.137.6 |
| Server | rsync服务端,备份服务器 | 192.168.137.5 |

2、使用ssh作为同步源

使用SSH协议的好处是能够基于更安全的远程连接,增强备份的保密性。这种方式的同步源最容易配置,只要确认源文件夹的位置,并准备一个同步操作的系统用户,设置好相关权限即可。

a. 客户端和服务端安装rsync
yum install -y rsync
b. rsync 服务器配置
# 创建数据同步账号
useradd backup
# 设置账号密码
echo "backup:123456" | chpasswd

# 创建备份目录
mkdir /opt/webbackup
# 修改备份目录的所有者和所在组
chown -R backup:backup /opt/webbackup/
c. rsync 客户端配置
# 创建测试数据
mkdir -p /var/www/html
cp -r /boot/grub2 /var/www/html/
d. 测试数据同步
  • 将本地的/var/www/html/目录下的所有数据同步到的备份服务器的/webbackup目录下

  • 由于用户backup并非root用户,因此"-g"、"-o"、"-t"选项将不生效

    --delete 删除那些目标位置有的文件而备份源没有的文件

    去掉--delete选项,只同步更新文件

    rsync -avz --delete /var/www/html backup@192.168.137.5:/opt/webbackup

e. 服务端查看文件
3、使用rsync服务器作为同步源

rsync不仅仅用作远程同步的发起端(客户端),也可以作为守护进程运行,为其他客户机提供同步源,配置rsync同步源需要建立配置文件rsync.conf,创建备份账户(虚拟用户),然后将rsync程序以"- -daemon"选项运行。

a. 修改服务器配置文件
vim /etc/rsync.conf

# 运行进程的身份
uid = root
# 运行进程的组
gid = root
# 监听ip
address = 192.168.137.5
# 监听端口
port = 873
# 允许同步客户端的IP地址,可以使网段
hosts allow = 192.168.137.0/24
# 锁定家目录
use chroot = yes
# 最大连接数
max connections = 5
# PID文件
pid file = /var/run/rsyncd.pid
# 指定 max connections 参数的锁文件
lock file = /var/run/sync.lock
# 日志文件位置
log file = /var/log/syncd.log
# 客户端登录之后弹出的消息,需要创建
motd file = /etc/rsyncd.motd

# 共享模块名称
[wwwroot]
# 备份路径
path = /opt/webbackup
# 描述
comment = user for web-data root
# 设置服务端文件读写权限
read only = false
# 是否允许查看模块信息
list = yes
# 备份的用户和系统用户无关
auth users = backupuser
# 存放用户的密码文件
secrets file = /etc/rsync.passwd
b. 创建虚拟用户文件

创建账号数据文件,添加一行用户记录,以冒号分隔,用户名称为backupuser,密码为123456。由于账号信息采用明文存放,因此应调整文件权限,避免账号信息泄露。

# 创建虚拟用户文件
vim /etc/rsync.passwd
# 修改虚拟用户文件权限
chmod 600 /etc/rsync.passwd 
c. 创建用户登录消息
echo "Welcome to Backup Server" > /etc/rsync.motd
d. 启动服务并设置开机自启动
rsync --daemon --config=/etc/rsyncd.conf
echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local
e. 客户端测试

格式1:rsync选项 用户名@同步源服务器IP::共享模块名目标目录

rsync -avz --delete /var/www/html/ backupuser@192.168.137.5::wwwroot

格式2:rsync选项 rsync://用户名@备份源服务器IP/共享模块名目标目录

rsync -avz --delete /var/www/html/ rsync://backupuser@192.168.1.12/wwwroot
f. 客户端传输时使用密码文件
# 编辑同步密码文件
vim /etc/rsyncd.passwd
	123456
# 修改密码文件权限
chmod 600 /etc/rsyncd.passwd 

# 传输时使用密码文件
rsync -avz --delete /var/www/html backupuser@192.168.137.5::wwwroot --password-file=/etc/rsyncd.passwd 
g. 配置计划任务
# 编写rsync备份脚本
vim autobackup_rsync_push.sh
  #!/bin/bash
  /usr/bin/rsync  -avz  --delete  /var/www/html/  backupuser@192.168.137.5::wwwroot --password-file=/etc/rsync.passwd

#  给脚本权限
chmod u+x autobackup_rsync_push.sh

# 计划任务
echo "30 22 * * * /usr/bin/sh /root/autobackup_rsync_push.sh" >> /var/spool/cron/root
4、配置rsync+inotify-tools实时同步

Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

a. 查看linux是否支持inotify

在linux内核中,默认的inotify机制提供了三个调控参数:max_queued_events、max_user_instances、max_user_watches。分别表示监控事件队列、最多监控实例数、每个实例最多监控文件数,当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值

ll /proc/sys/fs/inotify/
b. 安装inotify-tools工具

软件下载地址:https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/i/inotify-tools-3.14-9.el7.x86_64.rpm

# 客户端下载软件包
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/i/inotify-tools-3.14-9.el7.x86_64.rpm

# 客户端安装软件
 rpm -ivh inotify-tools-3.14-9.el7.x86_64.rpm 
c. inotifywait 命令

描述:监听目录

语法:inotifywait [选项] 目录

  • -e: 用来指定要监控哪些事件(create,move,delete,modify)

  • -m:表示持续监控

  • -r: 表示递归整个目录

  • -q: 表示简化输出信息

    监听/var/www/html

    inotifywait -mrqe create,move,delete,modify /var/www/html/

    打开新终端测试监听

    echo "123" > /var/www/html/bb.txt
    echo "456" >> /var/www/html/bb.txt
    rm -rf /var/www/html/bb.txt
    touch /var/www/html/cc.txt

d. 编写触发式同步脚本
# 编写脚本
vim rsync-inotify.sh

#!/bin/bash
# rsync-inotify

inotifywait -mrqe create,move,delete,modify /var/www/html | while read dir event file
do
	/usr/bin/rsync -avz /var/www/html/ backupuser@192.168.137.5::wwwroot --password-file=/etc/rsyncd.passwd &> /dev/null
	echo "$file is rsync"
	echo "++++++++++++++++++++++++++"
done

# 赋予脚本执行权限
chmod u+x rsync-inotify.sh

# 测试脚本
sh rsync-inotify.sh
# 打开新的终端测试
touch /var/www/html/abc.txt
# 查看服务端脚本备份情况
ll /opt/webbackup
5、配置rsync+ sersync实时同步

sersync是基于inotify开发的,类似于inotify-tools的工具,sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录。

sersync特点

① sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤,所以在结合rsync同步的时候,节省了运行时耗和网络资源。 因此更快。

② sersync配置起来很简单,其中bin目录下已经有基本上静态编译的2进制文件,配合bin目录下的xml配置文件直接使用即可。

③ sersync使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。

④ sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则每10个小时对同步失败的文件重新同步。

⑤ sersync自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。无需再额外配置crontab功能。

sersync 同步过程

在源服务器上开启sersync服务,sersync负责监控配置路径中的文件系统事件变化,调用rsync命令把更新的文件同步到目标服务器。

a. 备份服务器配置 rsync

所有服务器配置按照上面的: 3、使用rsync服务器作为同步源配置即可

b. 数据源服务器搭建 sersync

sersync下载地址:https://code.google.com/p/sersync/downloads/list

# 安装sersync
tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/

# 创建GNU-Linux-x86软连接
ln -s /usr/local/GNU-Linux-x86/sersync2 /usr/local/bin
c. 修改配置文件
vim /usr/local/GNU-Linux-x86/confxml.xml 

<localpath watch="/var/www/html">
    <remote ip="192.168.137.5" name="wwwroot"/>
    <!--<remote ip="192.168.8.39" name="tongbu"/>-->
    <!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>

<rsync>
    <commonParams params="-artuz"/>
    <auth start="true" users="backupuser" passwordfile="/etc/rsyncd.passwd"/>
   <userDefinedPort start="false" port="874"/><!-- port=874 -->
    <timeout start="false" time="100"/><!-- timeout=100 -->
    <ssh start="false"/>
</rsync>
d. 开启sersync守护进程同步数据
sersync2  -d -r -o  /usr/local/GNU-Linux-x86/confxml.xml
  • -d run as a daemon
  • -r rsync all the local files to the remote servers before the sersync work
  • -o config xml name
# 查看备份服务器
ls /opt/webbackup
#  设置sersync开机自启
echo "sersync2 -d -r -o /usr/local/GNU-Linux-x86/confxml.xml" >> /etc/rc.d/rc.local
e. 添加脚本监控sersync是否正常运行
# 编辑脚本
vim /usr/local/GNU-Linux-x86/check_sersync.sh

#!/bin/sh
#check_sersync

confxml="/usr/local/GNU-Linux-x86/confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ];then
	sersync2 -d -r -o $confxml &> /dev/null
	else
	exit 0
fi

# 给脚本添加执行权限
chmod +x /usr/local/GNU-Linux-x86/check_sersync.sh

# 设置计划任务
echo "10 * * * * /usr/bin/sh /usr/local/GNU-Linux-x86/check_sersync.sh &> /dev/null" >> /var/spool/cron/root
f. 多实例情况

配置多个confxml.xml文件(比如bbs、blog....等等)

根据不同的需求同步对应的实例文件

sersync2 -d -r -o /usr/local/GNU-Linux-x86/blog_confxml.xml
sersync2 -d -r -o /usr/local/GNU-Linux-x86/bbs_confxml.xml
相关推荐
方竞19 分钟前
Linux空口抓包方法
linux·空口抓包
sun0077001 小时前
ubuntu dpkg 删除安装包
运维·服务器·ubuntu
海岛日记1 小时前
centos一键卸载docker脚本
linux·docker·centos
AttackingLin2 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
吃肉不能购3 小时前
Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪
运维·yolo·自动化
学Linux的语莫3 小时前
Ansible使用简介和基础使用
linux·运维·服务器·nginx·云计算·ansible
qq_312920113 小时前
docker 部署 kvm 图形化管理工具 WebVirtMgr
运维·docker·容器
踏雪Vernon3 小时前
[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
linux·docker·容器·harmonyos