Rsync(Remote Sync)

本文介绍了rsync这款开源的数据同步备份工具,详细讲解了rsync的服务器介绍,包括其适用平台、工作模式和特色。接着,文章介绍了rsync的配置方法,如rsyncd.conf配置文件和账号文件的设置。还探讨了rsync命令的常用选项,以及rsync部署过程,包括实验环境的搭建、防火墙设置和配置文件修改。最后,文章讨论了如何结合inotify实现rsync的实时监控,包括inotify的安装、内核参数调整和触发同步脚本的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、rsync服务器介绍

① rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
②rsync软件适用于unix/linux/windows等多种操作系统平台
③ rsync是一个快速和非常方便的文件复制工具。它能本地复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制
④以其delta-transfer算法闻名。
⑤rsync监听端口:873
⑥rsync运行模式: c/s
主要是一款基于增备的工具

配置rsync源
基本思路:
1、建立rsyncd.conf配置文件、独立的账号文件
2、启用rsync的–daemon模式

账号文件
1、需要对应的配置文件模块(使用不同的账号+功能模块)就可以使用不同的同步策略/方式
2、在使用同步时,我们需要指定账号+功能模块来指定我们同步的策略

在这里插入图片描述

rsync命令用法

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

常用选项:

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

在这里插入图片描述
配置源的两种方法

用户名@主机地址::共享模块
rsync://用户名@主机地址 /共享模块名

在这里插入图片描述

rsync部署

实验环境

rsync192.168.59.129
client192.168.59.128

1、关闭防火墙,安全 同步时间

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

ntpdate ntp.aliyun.com

2、安装rsync

yum -y install rsync

3、修改rsync配置文件

[root@rsync www]# vim /etc/rsyncd.conf 					#修改配置文件
##删除原本内容,添加以下内容
uid = root											# 表示管理rsync的用户,默认是nobody
gid = root										
use chroot = yes										# 表示是否禁锢在源目录                                                
address = 192.168.59.129								# 监听地址
port 873                     	                        # 监听端口                   
log file = /var/log/rsyncd.log							# 日志文件位置                  
pid file = /var/run/rsyncd.pid	                		# 存放进程id的文件位置
hosts allow = 192.168.59.0/24							# 允许访问的客户及地址
[wwwroot]   					                                                         
path = /var/www/html     		                  		# 源目录的实际路径             
comment = Document Root of www.ljm.com	
read only = yes             	 						#是否为只读                              
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z  		#同步时不再压缩的文件类型
auth users = dyf                                   #授权账户,多个账户以空格分隔
secrets file = /etc/users.db 							#存放账户信息的数据文件

vim /etc/user.db                           #为账户设置密码
dyf:abc123

[root@rsync ~]# chmod 600 /etc/user.db 				#为数据文件设置权限,保证安全性
[root@rsync ~]# mkdir -p /var/www/html				#创建源目录并给予权限
[root@rsync ~]# chmod +r /var/www/html/
[root@rsync ~]# ls -ld /var/www/html/
drwxr-xr-x. 2 root root 6 八月 11 05:27 /var/www/html/
[root@rsync ~]# rsync --daemon						#开启服务
[root@rsync ~]# netstat -antp | grep rsync
tcp        0      0 192.168.118.100:873     0.0.0.0:*               LISTEN      88951/rsync  

关闭服务(两种方式)

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

在共享目录创建文件创建文件

echo "ni hao" >> /var/www/html/1.txt

客户端同步

mkdir /aaa
cd /aaa
[root@client aaa]# rsync -avz dyf@192.168.59.129::wwwroot /aaa
Password: 
receiving incremental file list
./
1.txt

设置客户端面交互

[root@client aaa]# echo "abc123" > /etc/server.pass
您在 /var/spool/mail/root 中有邮件
[root@client aaa]# chmod 600 /etc/server.pass 
[root@client aaa]# rm -rf 1.txt
[root@client aaa]# rsync -avz --password-file=/etc/server.pass dyf@192.168.59.129::wwwroot /aaa
receiving incremental file list
./
1.txt

sent 46 bytes  received 141 bytes  374.00 bytes/sec
total size is 21  speedup is 0.11
[root@client aaa]# ls
1.txt  2.txt

部署实时监控inotify+rsync

修改rsync配置文件

[root@rsync]# vim /etc/rsyncd.conf
read only = no		//关闭只读,上行同步需要可写权限
[root@rsync]# kill `cat /var/run/rsyncd.pid`
[root@rsync]# netstat -antp | grep rsync
[root@rsync]# rsync --daemon
[root@rsync]# netstat -antp | grep rsync
tcp        0      0 192.168.220.101:873     0.0.0.0:*               LISTEN      83693/rsync         

客户端安装inotify

yum -y install gcc gcc-c++

cd /opt
[root@client opt]# tar -xzvf inotify-tools-3.14.tar.gz 
[root@client opt]# cd inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure && make && make install

修改inotify内核参数

[root@client opt]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 32768      #监控时间队列,默认为16384
fs.inotify.max_user_instances = 1024	  #最多监控实例数,默认为128
fs.inotify.max_user_watches = 1048576	  #每个实例最多监控文件数,默认为8192
#当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值


[root@client opt]# sysctl -p
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

可以查看参数

[root@client inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_queued_events 
32768
[root@client inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_user_instances 
1024
[root@client inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_user_watches 
1048576

执行实时命令inotifywait

[root@client inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /aaa

重启一个端口,观察
在这里插入图片描述

在这里插入图片描述
编写触发同步脚本

[root@client aaa]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /aaa/"		//实时监控的命令
RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /aaa/ dyf@192.168.59.129::wwwroot/"	//远程同步命令
$INOTIFY_CMD | while read DIRECTORY EVENT FILE	
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then	//先判断是否有同步操作在进行,如没有则同步
        $RSYNC_CMD
        fi
done


chmod +x /opt/inotify.sh //给与执行权限
chmod +x /etc/rc.d/rc.local //系统启动脚本
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local //系统启动时加载inotify.sh脚本

测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值