rsync远程同步

 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

rsync远程同步 

一.rsync概述

  • rsync是一个开源的、快速的、多功能的、可以实现全量和增量的本地或者远程数据同步备份的工具。
  • 它可以不进行原有数据属性的改变去实现数据的备份迁移。
  • rsync适用于多种操作系统,其监听端口为:tcp/udp 873,模式为:C/S

1.1rsync的同步方式

 ①全量备份

  • 把原有的数据全部去传送,全量复制,效率比较低

②增量备份

  • 在传输数据之前会通过算法把你原有的数据和需要传送的数据进行比较,把不一样的数据通过网络传输,增量复制,效率比较高

③差量备份

  • 备份上一次完全备份后有变化的数据

1.2rsync的特点

  • 可以镜像的保存整个目录和文件系统
  • 可以保存源文件的权限、时间、软硬连接等等
  • 快速:第一次同步时rsync会复制全部的内容,在下一次只会去传输修改过的文件。并且在传输数据的过程中可以实现压缩及解压的操作,这样就可以使用更少的带宽
  • 安全:可以使用scp、ssh等方式去传输文件,也能支持socket连接,支持匿名传输

1.3rsync同步的关系

  • 上行同步(上传):同步源负责提供文件的原始位置,发起端对应位置有读取的权限
  • 下行同步(下载):同步源负载提供文件的目标位置,发起端对应有写入的权限

 1.4rsync命令格式与常用选项

#基本格式
rsync  -选项   原始位置  目标位置

 常用选项:

-r 递归模式,包含目录及子目录中的所有文件
-l 对于符号链接文件仍然复制为符号链接文件
-v 显示同步过程的详细信息
-z 在传输时进行压缩
-a 归档模式,递归并保留对象属性,等同于-rlptgoD
-p 保留文件的权限标记
-t 保留文件的时间标记
-g 保留文件的属组标记(仅超级用户使用)
-o 保留文件的属主标记(仅超级用户使用)
-H 保留硬链接文件
-A 保留ACL属性信息
-D 保留设备文件及其他特殊文件
--delete 删除目标位置有而原始位置没有的文件
--checksum 根据对象的校验和来决定是否跳过文件

 

1.5配置rsync源的两种方法

①用户名@主机地址::共享模板名

rsync -avz backuper@192.168.61.100::wwwroot   /opt/

#backuper指的是我在同步的时候用的哪个用户身份
#wwwroot代表的是模块,模块下面会写同步的默认路径和一些特性,所以我们只需要写模块就好了
#/opt指的是本地节点

②rsync:/用户名@主机名/共享模版名

rsync -avz rsync://backuper@192.168.61.100/wwwroot  /opt/

#URL:具体的位置点,例如:http://www.baidu.com./class1/test/index.html
#URI:标识的是拥有同一类特性或类型的一个集合 ,例如http://www.baidu.com./class1/test

二.rsync实现思路

rsync是一种常用的文件同步工具,可以实现在两个主机之间同步文件和目录。其实现思路如下:

  1. 判断源文件和目标文件的差异性:rsync使用一种叫做“差异化算法”的方法来判断源文件和目标文件的差异性。它会通过计算两个文件的哈希值来判断它们是否一致。如果文件的哈希值不同,那么它们就不一致。

  2. 传输差异数据:如果源文件和目标文件不一致,rsync会计算出两个文件之间的差异,并将这些差异数据传输给目标主机。这些差异数据可以是源文件中新增的内容、目标文件中缺失的内容或者是两个文件中不同的内容。

  3. 更新目标文件:一旦目标主机接收到了差异数据,它会使用这些数据来更新目标文件,使其与源文件保持一致。

  • rsync的实现思路主要包括了文件差异性判断和差异数据的传输和更新,这种方法可以大大减少数据传输量和传输时间,提高了文件同步的效率。同时,rsync还具有断点续传、压缩传输、备份等功能,是一种非常实用的文件同步工具。

三.inotify介绍和应用

3.1inotify概述

  • 监控文件系统的各种变化,实现文件异动告警
  • 增量备份与数据的强一致性

3.2rsync+inotify

  • 使用inotify通知接口,去监控文件的各种变化情况,比如文件的存储、删除、移动、修改等等。利用监控可以方便的去实现文件的增量备份。
  • inotify和rsync结合,可以实现触发式备份(实时备份),一旦原始位置的文件发生变化,则会立即启动增量备份的操作,否则会处于等待的状态

3.3inotify的内核参数

vim /etc/sysctl.conf (内核参数配置文件)
inotifywait:    #用于持续监控,实时输出结果
inotifywatch:   #用于短期监控,任务完成后再输出结果
max_queue_events   //监控事件队列大小,默认值16384
max_user instances      //最多监控实例数,可以看成最多可以监控多少个实例,默认值128
max_user_watches        //每个实例最多监控文件数,默认值8192

#############################
当要监控的目录,文件数量较多或者变化频繁时,建议加大三个参数的值

3.4inotifywait命令格式和选项

#命令格式
inotify  -选项  监控的操作  目标位置

选项:
-e     指定要监控哪些事件类型
-m     持续进行监控
-r     递归监控所有子对象
-q     简化输出信息

四.rsync部署下行同步

4.1部署环境

服务端rsync:192.168.61.100

客户端rsync:192.168.61.101

4.2rsync服务端

#关闭防火墙及安装机制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

#rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
yum install -y httpd rsync

#编辑rsync配置文件
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
address = 192.168.111.30
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.111.0/24
[wwwroot]        
path = /var/www/html
comment = Document Root of www.yxp.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper    
secrets file = /etc/rsyncd_users.db

################详解################################################################
uid = root                //用户id,表示共享权限能执行的身份
gid = root                 //组id
use chroot = yes       //开启,禁锢在源目录,表示允许在访问我备份的目录或文件的时候,使用的角色是root,同时你访问本地目录时拥有的也是root权限
address = 192.168.58.88           //监听地址
port 873                           //默认端口号为873
log file = /var/log/rsyncd.log               //日志文件存放位置
pid file = /var/run/rsyncd.pid                 //存放进程id的文件位置
hosts allow = 192.168.58.0/24                //允许访问的主机网段,有点类似于黑白名单


###############以上是全局配置,以下是模块配######################################################################
[wwwroot]                                   //共享模块的名称,rsync默认调用该模块,默认我调用的路径是该模块指定的路径
path = /var/www/html                //源目录路径
comment = Document Root of www.yxp.com                
read only = yes                                       //是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z    //同步时不再压缩的文件类型,因为同步时,-avz已经进行压缩
auth users = backuper                                    //授权用户,使用wwwroot模块的用户是哪个用户,多个账户以空格隔开
secrets file = /etc/rsyncd_users.db                    //存放账号信息的数据文件,一行一个
##############小结##################################################
第一部分定义共享模块全局模块配置
第二部分:共享模块(可以为多个)  可以对应不同的“源目录” 和授权账号信息
第三部分,此配置文件是为rsync --daemon模式设置的
#如采用匿名的方式,只要将其中的 “auth users” 和 “secrets file”配置项去掉即可
####################################################################
 
vim /etc/rsyncd_users.db
backuper:123123

#官方要求,最好只是赋权600!
chmod 600 /etc/rsyncd_users.db

#开启服务
rsync --daemon

#检测端口号,确认服务是否成功开启
netstat -natp | grep rsync

#切换至共享目录下
cd /var/www/html

4.3rsync客户端

#关闭防火墙及安装机制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

#安装rsync
yum install -y rsync

#创建一个目录/abc,用来同步
mkdir /abc
cd /abc/

#使用rsync同步备份源的同步文件
rsync -avz backuper@192.168.58.88::wwwroot /abc

#查看同步是否成功
ls 

#编辑免交互密钥文件,第一行为密码
vim /etc/server.pass
123456

#给密钥文件赋权600
chmod 600 /etc/server.pass

#rsync,使用密钥文件/etc/server/pass对应backuper用户,IP地址为192.168.111.30的共享模块文件进行压缩,并归档同步至当前服务器的/abc目录下,同时删除差异内容,如果原目标有的,会增加,原目标没有的,会删除。保持一致性。
rsync -az --delete --password-file=/etc/server.pass backuper@192.168.58.88::wwwroot /abc

#查看下行同步是否成功
ls /abc

4.3关闭rsync服务

kill  $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid 

五.rsync部署下行同步

将client服务器上的数据备份到server服务器(上行同步)

rsync(远程复制)+  inotify(监控)+  脚本(添加到计划任务)== 实现一个自动化效果

5.1部署环境

服务端rsync:192.168.61.100

客户端rsync:192.168.61.101

5.2服务端

vim /etc/rsyncd.conf
read only = no    //关闭只读模式,否则将不可写入

#修改完配置文件需要重启服务,这里采用直接杀掉进程号的方式
kill `cat /var/run/rsyncd.pid`

#检查一下服务是否已被终止
netstat -natp | grep rsync

#再次开启服务并检查端口号确认
rsync --daemon
netstat -natp | grep rsync

5.3客户端

①优化client的内核参数

cat /proc/sys/fs/inotify/max_queued_events      //监控事件队列
cat /proc/sys/fs/inotify/max_user_instances     //最多监控实例数
cat /proc/sys/fs/inotify/max_user_watches       //每个实例最多监控文件数
 
#当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值
vim /etc/sysctl.conf   
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
 
sysctl -p        //刷新 

②客户端编译安装inotify-tools

#安装gcc gcc-c++ 
yum install -y gcc gcc-c++ 

#切换至/opt上传inotify-tools安装包
cd /opt
tar zxf inotify-tools-3.14.tar.gz   //解压
 
#编译安装 
cd /opt/inotify-tools-3.14/
./configure
make -j 4 && make install

③客户端启动监听
#持续监听对/abc的modify,create,move,delete操作
inotifywait -mrq -e modify,create,delete /abc 
④编写触发同步脚本

#######脚本内容############################################
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /abc/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /abc/ backuper@192.168.61.100::wwwroot/"
 
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
    fi
done
#########脚本详解############################################
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /abc/"
#INOTIFY_CMD变量:持续监控 /opt/abc目录中的创建,删除,移动,修改,改变时间的操作
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /abc/ xixi@192.168.61.100::wwwroot"
#RSYNC_CMD变量:使 xixi 用户,/etc/server.pass 密钥文件,将 /xcf1 目录下的文件进行压缩,归档,保留硬链接文件同步至 192.168.61.100 的共享模块定义的目录 /var/www/html 下,并删除差异性内容,保持一致性
 
$INOTIFY_CMD | while read DIRECTORY EVENT FILE        #持续监控...
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then        #如果服务并未启动,则执行同步
        $RSYNC_CMD
    fi
done
#########################################################################
 
cd /opt/
chmod +x inotify.sh  //给脚本赋权

#设置开机自启动
chmod +x /etc/rc.d/rc.local 
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local 

#执行脚本
sh -x ./inotify.sh  

#创建一个新的html文件并删除之前的qwe
cd /abc
touch suoluo.html

#再次确认一下
ls

⑤在服务端查看同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Linux运维老纪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值