5.6 Linux rsync 服务

news2024/11/15 6:05:39
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1325006.html

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

相关文章

月薪30k的软件测试工程师,是一个什么样的工作状态?

一位大佬的亲身经历 用了大概6年的时间&#xff0c;成为了年薪30w的测试开发。 回顾我从功能测试到测试开发的成长路径&#xff0c;基本上是伴随着“3次能力飞跃”实现的。 年名企大厂测试岗位内推文末获取&#xff01;2022年名企大厂测试岗位内推文末获取&#xff01; 第一…

OpenCV消除高亮illuminationChange函数的使用

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为1129字&#xff0c;预计阅读4分钟 导语 上一篇《OpenCV极坐标变换函数warpPolar的使用》中介绍了极坐标变换的使用&#xff0c;文中提到过因为手机拍的照片&#xff0c;部分地方反光厉害。OpenCV本身也有一…

使用yarn安装electron时手动选择版本

访问1Password或者其他可以提供随机字符的网站&#xff0c;获取随机密码运行安装命令 操作要点&#xff0c;必须触发Couldnt find any versions for "electron" that matches "*"才算成功 将复制的随机密码粘贴到后面 例如&#xff1a;yarn add --dev elec…

CAS-源码分析引出Unsafe类、Unsafe类详解

CASDemo演示 public class CASDemo {public static void main(String[] args) {AtomicInteger atomicInteger new AtomicInteger(5);System.out.println(atomicInteger.compareAndSet(5, 2022) "\t" atomicInteger.get());//true 2022System.out.println(atomicI…

vit-transfomers 逐段精读

Vision Transformer Explained | Papers With Code 有趣的特性 在cnn中处理的不太好&#xff0c;但是在transformers 都能处理的很好的例子。 Intriguing Properties of Vision Transformers | Papers With Code 标题 AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE…

基于ETM+遥感数据的城市热岛效应现状研究的解决方案

1.引言 城市热岛效应&#xff08;Urban Heat Island Effect&#xff09;是指城市中的气温明显高于外围郊区的现象。在近地面温度图上&#xff0c;郊区气温变化很小&#xff0c;而城区则是一个高温区&#xff0c;就像突出海面的岛屿&#xff0c;由于这种岛屿代表高温的城市区域&…

【已解决】vs2015操作创建声明定义由于以下原因无法完成

本博文解决这样的一个问题&#xff0c;就是vs2015下用qt&#xff0c;在快速创建槽函数时给笔者报了个错误&#xff0c;错误的完整说法是这样子的”操作创建声明/定义“由于下列原因无法完成&#xff0c;所选的文本不包含任何函数签名。第一次遇到这种花里胡哨的问题&#xff0c…

[CVPR-23] PointAvatar: Deformable Point-based Head Avatars from Videos

[paper | code | proj] 本文的形变方法被成为&#xff1a;Forward DeformationPointAvatar基于点云表征动态场景。目标是根据给定的一段单目相机视频&#xff0c;重建目标的数字人&#xff0c;并且数字人可驱动&#xff1b;通过标定空间&#xff08;canonical space&#xff09…

Jmeter实现CSV数据批量导入

CSV&#xff1a;逗号分隔值&#xff0c;是一种简洁且常见的数据存储格式。 1、参数化&#xff1a; 在Jmeter中&#xff0c;可以通过“用户自定义的变量”来实现参数化使操作方便&#xff0c;使用语法位&#xff1a;${参数名}&#xff0c;如下图&#xff1a; 而CSV也同理&…

第二百一十八回 如何修改CircleAvatar的大小

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"修改页面导航中遇到的问题"沉浸式状态样相关的内容&#xff0c;本章回中将介绍如何修改avada的大小.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

代码随想录算法训练营第四十一天|198.打家劫舍 ,213.打家劫舍II ,337.打家劫舍III

198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#…

支持向量机 支持向量机概述

支持向量机概述 支持向量机 Support Vector MachineSVM ) 是一类按监督学习 ( supervisedlearning)方式对数据进行二元分类的广义线性分类器 (generalized linear classifier) &#xff0c;其决策边界是对学习样本求解的最大边距超亚面 (maximum-margin hyperplane)与逻辑回归和…

第二百一十七回 修改页面导航中遇到的问题

文章目录 1. 问题介绍2. 使用方法3. 代码与分析3.1 示例代码3.2 代码分析4. 内容总结我们在上一章回中介绍了"分享一种更新页面数据的方法"相关的内容,本章回中将介绍修改页面导航中遇到的问题.闲话休提,让我们一起Talk Flutter吧。 1. 问题介绍 我们在页面之间导…

C++刷题 -- 字符串

C刷题 – 字符串 文章目录 C刷题 -- 字符串1.重复的子字符串 1.重复的子字符串 https://leetcode.cn/problems/repeated-substring-pattern/submissions/490209402/ 暴力解法 第一个for循环用来标定子串的末尾&#xff0c;根据末尾取出子串 第二个while循环用来检查原字符串是…

WEB渗透—PHP反序列化(六)

Web渗透—PHP反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩…

AT32 F435简介4/N ChibiOS porting plan

AT32 F435简介4/N ChibiOS porting plan 1. 源由2. 框图3. Makefile4. 分析4.1 Startup Code4.2 RT Port Layer4.3 HAL Board Layer4.4 HAL Port Layer 5. 总结6. 参考资料 1. 源由 对比STM32 F405进行AT32 F435 MCU的资料研读&#xff0c;期望获取更多差异化信息&#xff1b;…

Android 架构 - 组件化

一、概念 组件化是对单个功能进行开发&#xff0c;使得功能可以复用。将多个功能组合起来就是一个业务模块&#xff0c;因此去除了模块间的耦合&#xff0c;使得按业务划分的模块成了可单独运行的业务组件。&#xff08;一定程度上的独立&#xff0c;还是依附于整个项目中&…

Python 多维数组详解(numpy)

文章目录 1 概述1.1 numpy 简介1.2 ndarray 简介 2 数组操作2.1 创建数组&#xff1a;array()2.2 裁切数组&#xff1a;切片2.3 拼接数组&#xff1a;concatenate()2.4 拆分数组&#xff1a;array_split()2.5 改变数组形状&#xff1a;reshape() 3 元素操作3.1 获取元素&#x…

uint29传输格式

前言 不知道谁想出来的。 反正我是想不到。 我看网上也没人讲这个。 写篇博客帮一下素未谋面的网友。 uint29 本质上是网络传输的时候&#xff0c;借用至多4字节Bytes&#xff0c;表达29位的无符号整数。 读8位数字&#xff0c;判断小于128? 是的话&#xff0c;返回末7位…

一文读懂PMP项目管理

PMP项目管理是什么 PMP&#xff08;Project Management Professional&#xff09;指项目管理专业人员资格认证&#xff0c;由美国项目管理协会&#xff08;Project Management Institute&#xff0c;简称PMI&#xff09;发起&#xff0c;目前已在全球206个国家和地区进行认证&…