Linux服务器Rsync结合inotify同步文件
39 2023-03-14一、实现效果
服务器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]
原因:服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

-
使用Axios+PHP+JWT实现登录认证
JWT(JSON Web Token),顾名思义就是可以在Web上传输的token,这种token是用JSON格式进行format的。它是一个开源标准(RFC7519),定义了一个紧凑的自包含的方式在不同实体之间安全的用JSON格式传输信息。
-
使用Echarts画甘特图
Echarts是一个非常强大的图表库, 下面我们来使用它来画甘特图,
-
Composer实现自动加载
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。 你正在创建一个项目,你需要一个库来加载各种插件, 你所需要做的就是创建一个 composer.json 文件
-
分享计算机硬核书单
分享4本计算机内功心法,想在编程行业更进一步,这4本必须吃透: 《计算机组成原理》 《操作系统》 《计算机网络》 《数据结构与算法》
-
Mysql表锁和PHP文件锁的应用
锁一般是在高并发,多人同时操作同一个表的时候使用,例如下订单。由于表锁,会影响其他用户使用,所以建议使用文件锁。
-
完整ASCII码表
ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。
-
Nginx日志按天分割
nginx日志默认是不分割的,时间一长,日志文件就会很庞大。今天就来通过脚本实现按天切割,废话不多说,直接上代码:
-
Nginx 配置https
SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现: 1、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听; 2、用户可以通过服务器证书验证他所访问的网站是否真实可靠。
-
OAuth 2.0授权认证
OAuth 2.0一个关于授权的开放的网络协议。用户同意授权给第三方使用系统数据,系统分发一个临时令牌(Token),第三方可通过令牌获取相关数据。
-
frp内网穿透,ngnix反向代理
设计思路: 1、域名frp.xxx.com解析到公网IP(112.112.112.112示例IP); 2、公网搭建nginx添加frp.xxx.com反向代理到公网服务器的8080端口; 3、frp服务端配置http监听端口为8080 4、内网的frp客户端负责转发内网服务器的WEB端口到frp服务器的8080端口同时制定只监听frp.xxx.com这个域名。 实现: 一、安装