rsync远程同步:下行同步、上行同步+inotify实时同步

目录

一、rsync远程同步

1、什么是rsync远程同步

2、rsync备份类型

3、rsync同步方式

4、rsync命令使用

5、rsync同步的表达方式

二、rsync下行同步实验部署

1、实验环境

2、服务端配置

3、客户端配置

三、rsync实时同步部署

1、实验环境及原理

2、服务端配置

3、客户端配置

4、安装inotify

5、验证实时同步

四、rsync删除大量数据

1、本地复制删除

2、rsync+inotify实时同步删除


一、rsync远程同步

1、什么是rsync远程同步

rsync是C/S架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。

rsync默认端口为 873

rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压缩、rsync不需要特殊权限即可安装,centos系统默认安装,支持匿名传输,注意发起端要有对应目录位置的读权限

2、rsync备份类型

完全备份:每次备份将备份源所有文件或目录备份到目的。

差量备份:备份上次完全备份以后有变化的数据。

增量备份:备份上次完全备份以后有变化的数据。

3、rsync同步方式

①本地复制:首先是将源文件和目的位置文件对比找出差异,然后将源文件与目的位置的差异部分进行一致性同步。

②下行同步:客户端与服务端同步内容,可以理解为客户端从服务器上下载内容

③上行同步:服务端与客户端同步内容,可以理解为客户端将内容上传到服务器

4、rsync命令使用

基本格式:rsync    [选项]   原始位置    目的位置

注意:原始位置文件夹若加/则是同步文件夹下所有内容,不包括文件夹本身,若需要整个目录同步则不加/

选项 作用
r 递归,包含目录中所有文件
l 对符号链接仍然复制为符号链接
v 显示同步过程
z 传输时进行压缩
a 归档模式,保留所有属性权限等
e 指定使用什么方式同步ssh等
p 保留文件夹权限的标记
t 保留文件夹时间的标记
g 保留文件属组的标记(只能root使用)
o 保留文件属主的标记(只能root使用)
H 保留硬链接文件
A 保留ACL属性信息
D 保留设备文件及其他特殊文件
delete 删除目的位置有但是原始位置没有的文件同步客户端和服务端数据
checksum 根据校验和(不是文件大小、修改时间)来决定是否跳过文件
password-file password-file=密码文件位置,可以在同步时使用免交互登录

5、rsync同步的表达方式

格式1:rsync -avz 用户名(rsync用户)@主机地址::模块名 文件

例子:rsync -avz [email protected]::wwwroot /opt/

格式2:rsync -avz rsync://用户名(rsync用户)@主机地址/模块名 文件

例子:rsync -avz rsync:// [email protected]/模块名 文件  

二、rsync下行同步实验部署

1、实验环境

客户端ip 服务端ip
192.168.30.11 192.168.30.13:873

2、服务端配置

mkdir    /var/www/html  -p
#创建要同步的文件夹
vim  /etc/rsyncd.conf     
#编辑rsync服务配置文件
文件内容:
uid = root	    #用户id,注意不用root使用rsync同步时可能会报错
gid = root	    #组id,注意不用root使用rsync同步时可能会报错
use chroot =yes	    #开启禁锢目录,只允许模块授权的源路径
address =192.168.30.11	    #监听的地址即server地址
port 873			        #监听地址的那个端口
log file =/var/log/rsyncd.log	#日志文件位置
pid file =/var/run/rsyncd.pid	#pid文件位置
hosts allow = 192.168.30.0/24	#允许谁使用
max connections = 4 			#最大连接数
[lhjhtml]                       #模块名称
path = /var/www/html		    #源文件路径
comment = Document root of www.lhj.com	#模块说明,随便写
read only =yes	                #是否只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z 	#这些类型结尾的文件不压缩
auth users = lhj cxx		                #授权可登录用户 lhj   cxx 多用户以空格隔开
secrets file = /etc/rsyncd_users.db       #rsyncd服务账户密码文件位置,保存退出
vim  /etc/rsyncd.users.db         #编辑rsyncd账户密码文件
lhj:123456          #添加账户密码,以:隔开
cxx:123456          #添加完成后保存退出
chmod 600 /etc/rsyncd_users.db          #修改rsyncd服务文件权限为只允许属主可读写
rsync  --daemon                         #启动rsyncd服务
netstat -antp  |grep  rsync             #查看是否启动成功
echo "test rsync">/var/www/html/a.txt   #同步源目录中创建文件a.txt内容为"test rsync"

3、客户端配置

mkdir  -p /opt/ky26      #创建client同步接收文件位置
chmod 777 /opt/ky26      #接收文件位置权限添加
vim /etc/server.pass     #创建免交互密码文件将密码输入
123456                   #lhj和cxx的密码为123456
chmod  600  /etc/server.pass     #秒交互密码文件只允许属主可读写
rsync  -avz   --password-file=/etc/server.pass  [email protected]::lhjhtml   /opt/ky26 同步到ky26文件夹中
注意:若同步失败需要先在client上ssh一下server登录再退出。
注意:如果报错为 error: some files/attrs were not transferred (see previous errors) (code 23)t main ,c(1179) [sender=3.1.2]则是因为rsyncd.conf配置文件中的uid和组id不是root
cat /opt/ky26/a.tx#client上验证是否有a.txt

三、rsync实时同步部署

1、实验环境及原理

客户端ip 服务端ip
192.168.30.11 192.168.30.13:873

2、服务端配置

#基于下行同步完成的情况下
vim  /etc/rsyncd.conf  
read only =no 
#关闭下行同步的只读,保存退出
kill  `cat /var/run/rsyncd.pid`  
#杀死rsync进程即关闭服务
rsync  --daemon   
#开启rsync服务
chmod  777  /var/www/html 
#给lhjhtml模块的目录加权限

3、客户端配置

#查看inotify内核参数
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  #优化inotify内核参数
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p  #加载内核生效

4、安装inotify

#客户端安装inotify
yum install  gcc gcc-c++ -y   #安装编译工具
cd /opt
#将安装包放入/opt下
tar  zxvf   inotify-tools-3.14.tar.gz  
#解压安装包
cd    inotify-tools-3.14
./configure  && make && make install 
#编译安装inotify
#编写脚本监控客户端/var/www/html目录,当这个目录发生改变时使用rsync同步上传到服务端
vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html [email protected]::lhjhtml"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
        fi
done
#脚本内容解析:定义2个变量,变量INOTIFY_CMD监控客户端的/var/www/html文件夹。变量RSYNC_CMD执行rsync同步将/var/www/html/文件夹内容同步上传到服务端。将变量INOTIFY_CMD监控标准输入结果传给while函数,while函数读取若有后面这些关键字则执行if语句,当执行过滤rsync命令行数小于等于0则执行变量$RSYNC_CMD

5、验证实时同步

cd /opt/
chmod +x inotify.sh 
./inotify.sh 
执行脚本后会在前台执行占用窗口,重新开个窗口执行以下命令验证
cd /opt/ky26
echo "123">1.txt
然后到服务端查看是否上传完成

四、rsync删除大量数据

1、本地复制删除

mkdir -p  /date/blank
#建立一个空的文件夹
mkdir -p  /date/test
cd /date/test
touch {1..10000}
#模拟/date/test文件中有1万个文件数据
rsync --delete-before -avH --progress --stats /home/blank /date/test
#使用rsync删除/date/test目录中的文件,用空文件夹同步了test文件夹
选项说明:
--delete-before 接收者在传输进行删除操作
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性-H 保持硬连接的文件
-v 详细输出模式
-H 保持硬连接的文件
--progress 在传输时显示传输过程
--stats 给出某些文件的传输状态
cd /date/test
ls
#进入查看数据为空

2、rsync+inotify实时同步删除

#基于以上rsync+inotify实时同步实验
服务端:
mkdir -p /date/test
touch {1..10000}
#模拟/date/test文件中有1万个文件数据
客户端:
/opt/inotify.sh 
#运行inotify.sh,前台运行需要再开启一个窗口
新窗口
cd /var/www/html
echo " ">a.txt
rm -rf * 
创建一个空给a.txt
然后再服务端验证/date/test中文件夹已全部删除只有刚同步的a.txt文件

猜你喜欢

转载自blog.csdn.net/weixin_67287151/article/details/129929839