Linux服务器Rsync结合inotify同步文件

1600 2023年04月05日 服务器

一、实现效果

服务器A:192.168.161.150 (分布服务器)(rsync客户端+inotify)
服务器B:192.168.161.151 (WEB服务器1)(rsync服务端)
服务器C:192.168.161.152 (WEB服务器2)(rsync服务端)

说明:服务器A有文件更新,自动同步到服务器B和C

二、配置部署

1、服务器B:192.168.161.151/服务器C:192.168.161.152

1) 安装相应软件


#安装rsync(centos7默认安装)
yum -y install rsync  

2) 修改配置


 #建立数据同步存放目录
mkdir -p /www/wwwroot/rsync   
 #修改权限,必须要有读,写,执行权限,否而会失败。
chmod 755 /www/wwwroot/rsync   
#修改所属
chown nobody.nobody /www/wwwroot/rsync  

3) 修改配置文件,vim /etc/rsyncd.conf


uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
log file = /www/server/rsync/log/rsyncd.log
pid file = /www/server/rsync/rsyncd.pid
lock file = /www/server/rsync/rsync.lock
secrets file = /www/server/rsync/rsyncd.secrets
read only = no
hosts allow = 192.168.161.150
list = yes
use chroot = no

[web1]

path = /www/wwwroot/rsync/ comment = web1 file auth users = rsync

4) 设置密码文件,防火墙


echo "rsync:12345678" > /www/server/rsync/rsyncd.secrets
#一定给600,其他权限错误
chmod 600 /www/server/rsync/rsyncd.secrets 
#一定记得要开启rsync
rsync --daemon --config=/etc/rsyncd.conf    
echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.local
#rsync默认端口是873,设置防火墙永久允许
firewall-cmd --permanent --add-port=873/tcp    
firewall-cmd --reload

2、服务器A:192.168.161.150

1) 安装相应软件


#安装rsync(centos7默认安装)
yum -y install rsync  

#下载inotify-tool软件包
wget http://downloads.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz 
tar -zxvf inotify-tools-3.13.tar.gz  
cd inotify-tools-3.13       
./configure     
make && make install

2)开启rsync


  rsync --daemon 

3)创建密码文件


mkdir /www/server/rsync
#12345678为rsync服务端配置的用户名为rsync的密码
echo "12345678" > /www/server/rsync/rsync.passwd
chmod 777 /www/server/rsync/rsync.passwd

4) 编写监控脚本 vim notify_rsync.sh


#!/bin/bash
export PATH=/bin:/usr/bin:/usr/local/bin
SRC=/www/wwwroot/rsync/   #设置修改数据的目录
DEST1=web1  #pc1的模块名
Client1=192.168.161.151
User=rsync
Passfile=/www/server/rsync/rsync.passwd
[ ! -e $Passfile ] && exit 2
#wait for change
inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' \
--event modify,create,move,delete,attrib $SRC | while read line
do
echo "$line" > /var/log/inotify_web 2>&1
#同步数据到pc1,下面命令其实就是rsync -avz /web_data/ tom@192.168.0.230::web1,然后把输出结果记录在sync_web1中 
rsync -avz --delete --progress --password-file=$Passfile $SRC ${User}@$Client1::$DEST1 >> /var/log/sync_web1 2>&1

done &

三、总结优化

1、问题一:

@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:服务器端的目录不存在或无权限,创建目录并修正权限可解决问题。

2、问题二:

@ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。
提供正确的用户名密码解决此问题。

3、问题三:

@ERROR: Unknown module ‘tee_nonexists'
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

评论

0 条评论
OBJUI公众号
热门文章
  • 使用Echarts画甘特图

    Echarts是一个非常强大的图表库, 下面我们来使用它来画甘特图,

  • go语言怎么连接mysql,并实现增删改查

    要使用Go语言连接MySQL,需要使用第三方库。常用的库包括: 这里以go-sql-driver/mysql为 […]

  • beego实现模块化开发

    Beego 框架可以通过模块化开发来提高项目的可维护性和可扩展性,可以将一个大型的应用划分为多个模块,每个模块独立维护,有自己的控制器、视图和模型等。

  • Beego实现JWT

    Beego是一个基于Go语言的Web框架,实现JWT认证可以通过beego的中间件机制来实现,下面是一个简单的 […]

  • 使用Axios+PHP+JWT实现登录认证

    JWT(JSON Web Token),顾名思义就是可以在Web上传输的token,这种token是用JSON格式进行format的。它是一个开源标准(RFC7519),定义了一个紧凑的自包含的方式在不同实体之间安全的用JSON格式传输信息。

  • PHP解决雪花算法ID在前端精度丢失的问题

    雪花算法(Snowflake)是一种用于生成全局唯一ID的算法,其基本思路是结合时间戳、机器ID、租约ID和序列号生成一个64位的数据,从而保证ID的唯一性。 雪花算法的生成过程如下:

  • 虚拟滚动实现页面百万数据滚动

    1.概念 虚拟滚动是一种优化长列表性能的技术,它通过按需渲染的方式,只渲染可见部分的列表项,而不是渲染整个列表 […]

  • go实现MD5

    在这个示例中,我们使用了Go标准库中的crypto/md5包来计算一个字符串的MD5值。首先,我们将字符串转换 […]

  • Linux服务器Rsync结合inotify同步文件

    一、实现效果 服务器A:192.168.161.150 (分布服务器)(rsync客户端+inotify) 服务器B:192.168.161.151 (WEB服务器1)(rsync服务端) 服务器C:192.168.161.152 (WEB服务器2)(rsync服务端) 说明:服务器A有文件更新,自动同步到服务器B和C

  • JavaScript实现滑动验证码

    滑动验证码(也叫做滑动拼图验证码)是一种用户交互形式的验证码,通常用于网页或移动应用的登录、注册或敏感操作。其 […]