rsync 备份工具(附rsync+inotify 实时同步部署实例)

rsync 备份工具(附rsync+inotify 实时同步部署实例)

1、rsync概述

1.1关于rsync

Rsync ( Remote sync)是一个远程数据同步工具,一款快速增量备份工具,使用于unix/Linux/windows等多种平台。

Rsync 使用所谓的"Rsync 演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

运行 Rsync server 的机器也叫 backup server,一个 Rsync server 可同时备份多个 client 的数据;也可以多个Rsync server 备份一个 client 的数据。

Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。

Rsync server 会打开一个873的服务通道(port),等待对方 Rsync 连接。

连接时,Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。

第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

官方网站: http://rsync.samba.org

1.2rsync 的特点

  • 可以镜像保存整个目录树和文件系统;
  • 可以很容易做到保持原来文件的权限、时间、软硬链接等;
  • 无须特殊权限即可安装;
  • 优化的流程,文件传输效率高;
  • 可以使用 rcp、ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;
  • 支持匿名传输。

1.3工作原理

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为rsync同步源。

首先服务器B(发起源)向服务器A(同步源)进行数据备份,将自己的数据备份到服务器A中。

当服务器B中的数据遭到损失或者增量的时候,都会从服务器A中进行数据同步。

服务器B数据丢失则从服务器A中同步数据丢失的部分。

当服务器B数据增多了,就会再次向服务器A进行数据备份,但是备份的不是完整备份,而是增量备份,即备份同步源中没有的数据。

2、rsync相关命令

2.1基本格式和常用选项

#基本格式

rsync [选项] 原始位置 目标位置

2.2启动和关闭rsync服务

  • 启动服务
powershell 复制代码
//启动 rsync 服务,以独立监听服务的方式(守护进程)运行 
rsync --daemon				
  • 关闭服务
powershell 复制代码
//关闭 rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid

2.3下行同步基本格式

从源服务器拉数据

rsync [选项] 源服务器位置 本地位置

powershell 复制代码
##举个例子#
#格式一
rsync -avz test@192.168.2.102::message /opt/					

#格式二
rsync -avz rsync://test@192.168.2.102/message /opt/

#test为配置文件中的授权账户
#IP地址为同步源地址
#message 为配置文件中定义的共享模块

2.4上行同步基本格式

推数据到源服务器

powershell 复制代码
rsync [选项] 本地位置 源服务器位置

2.5免交互

2.5.1指定密码文件

powershell 复制代码
echo "abc123" > /etc/server.pass
chmod 600 /etc/server.pass

2.5.2rsync-daemon方式

powershell 复制代码
rsync -avz --delete --password-file=/opt/userlist yiliangchen@192.168.80.30::wwwky31  /opt/data/          #rsync-daemon方式

2.5.3rsync-ssh方式

powershell 复制代码
rsync -avz --delete -e 'sshpass -p abc1234 ssh -p 22' /etc/yum.repos.d root@192.168.80.20:/opt/data       #rsync-ssh方式

2.6定期同步

结合crontab计划任务,可以实现定期同步。

powershell 复制代码
#举个例子 
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@192.168.80.10::wwwroot /opt/
#为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。
#在执行 rsync 同步时使用选项 "--password-file=/etc/server.pass" 指定即可。

systemctl restart crond
systemctl enable crond

3、部署rsync定期同步

3.1配置rsync源服务器(节点1)

powershell 复制代码
yum install -y rsync
//安装rsync服务
powershell 复制代码
rpm -qc rsync		//查看rsync配置文件位置

#建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf	//添加以下配置项

uid = root
gid = root
use chroot = yes		#禁锢在源目录
max connections = 4
address = 192.168.190.100	#监听地址
port = 873	#监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log	#日志文件位置
pid file = /var/run/rsyncd.pid	#存放进程 ID 的文件位置
hosts allow = 192.168.190.0/24	#允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z		#同步时不再压缩的文件类型

[wwwroot]			#共享模块名称
path = /var/www/html			   #源目录的实际路径
comment = document Root of www
read only = no		#是否为只读
auth users = fsj	#授权账户,多个账号以空格分隔
secrets file = /opt/rsyncd_userlist#存放账户信息的数据文件
#如采用匿名的方式,只要将其中的"auth users"和"secrets file"配置项去掉即可。
#为备份账户创建数据文件


powershell 复制代码
vim /opt/rsyncd_userlist
fsj:abc123  #无须建立同名系统用户
powershell 复制代码
chmod 600 /etc/rsyncd_users.db
powershell 复制代码
mkdir -p /var/www/html  //创建文件夹

rsync --daemon		#启动 rsync 服务,以独立监听服务的方式(守护进程)运行 
powershell 复制代码
netstat -anpt | grep rsync
powershell 复制代码
cd /var/www/html

cp /etc/fatab ./

3.2发起端(节点2)

powershell 复制代码
yum install -y rsync
//安装rsync服务
powershell 复制代码
启动 rsync 服务程序
rsync --daemon		
#启动 rsync 服务,以独立监听服务的方式(守护进程)运行 

netstat -anpt | grep rsync
powershell 复制代码
cd /opt  //切换到opt目录
ls
mkdir data //在opt目录下创建data目录
cd data  //切换到data目录
ls
powershell 复制代码
#将指定的资源下载到本地/opt 目录下进行备份。
格式一:
rsync -avz fsj@192.168.190.100::wwwky31 /opt/data	#密码abc123
powershell 复制代码
格式二:
rsync -avz rsync://fsj@192.168.190.100/wwwky31 /opt/data
powershell 复制代码
免交互格式配置:
echo "abc123" > /etc/server.pass
chmod 600 /etc/server.pass
powershell 复制代码
rsync -avz --delete --password-file=/opt/rsync_passwd fsj@192.168.190.100::wwwky31 /opt/data



3.3发起端配置 rsync+inotify

使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。

因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。

powershell 复制代码
修改rsync源服务器配置文件
vim /etc/rsyncd.conf
......
read only = no											#关闭只读,上行同步需要可以写
powershell 复制代码
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon	
netstat -anpt | grep rsync

chmod 777 /var/www/html/
powershell 复制代码
调整 inotify 内核参数
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

安装 inotify-tools 用 inotify 机制还需要安装 inotify-tools,以便提供 inotifywait、inotifywatch 辅助工具程序,用来监控、汇总改动情况。

inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。

inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。

powershell 复制代码
cd /opt
tar zxvf inotify-tools-3.14.tar.gz
cd /opt/inotify-tools-3.14
./configure
make && make install


powershell 复制代码
然后另外再开启一个新终端向 /var/www/html 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
inotifywait -mrq -e modify,create,move,delete /var/www/html


在另外一个终端编写触发式同步脚本(注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效)

powershell 复制代码
yum install -y rsync
//安装rsync服务
powershell 复制代码
cd /opt
tar zxvf inotify-tools-3.14.tar.gz 
cd /opt/inotify-tools-3.14
./configure
make && make install
powershell 复制代码
vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/opt/rsync_passwd /vopt/data/fsj@192.168.190.100::wwwky31/"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
	#如果rsync未在执行,则立即启动
        $RSYNC_CMD
    fi
done
powershell 复制代码
chmod +x inotify.sh
powershell 复制代码
echo admin123 > /opt/rsync_passwd
chmod 600 /opt/rsync_passwd


4、使用rsync快速删除大量文件

使用rm -rf *删除大量文件时,效率较低。

此时,利用rsync的替换原理,结合--delete选项,可以实现快速删除大量文件,比如服务的缓存。

相关推荐
₯㎕星空&繁华10 小时前
阿里云服务器安装MySQL服务器
服务器·ubuntu·阿里云·云计算
你的大佬9991 天前
阿里云百炼ai模型
人工智能·阿里云·云计算
一只栖枝1 天前
备考华为HCIA - 云计算,培训与自学到底该怎么选?
云计算·华为认证·hcia·考证·职业规划
数据与人工智能律师1 天前
AI的法治迷宫:技术层、模型层、应用层的法律痛点
大数据·网络·人工智能·云计算·区块链
荣光波比2 天前
Docker(三)—— Docker Compose 编排与 Harbor 私有仓库实战指南
运维·docker·容器·云计算
企鹅侠客2 天前
mysqldump导入备份数据到阿里云RDS会报错吗
阿里云·adb·云计算
iHero2 天前
【Jitsi Meet】阿里云Docker安装Jitsi Meet后的调整
阿里云·docker·云计算
荣光波比2 天前
Ansible(三)—— 使用Ansible自动化部署LNMP环境实战指南
运维·自动化·云计算·ansible
荣光波比2 天前
Docker(五)—— Docker Compose 一键搭建 LNMP 架构并部署 WordPress
运维·docker·容器·云计算
mjhcsp2 天前
深入解析 IDM 插件开发挑战赛:技术要点与实践指南
服务器·阿里云·云计算