rsync + inotify实现多台服务器文件同步

场景

近期因公司业务,部署某头部酒业的服务器。沟通得知,服务器网络可能存在不稳定的情况。计划每台服务器均部署文件上传服务和数据库,mysql多主多从实现数据同步。首先需解决文件同步的问题,此处采用rsync + inotify实现文件同步。

服务器如下:

- 192.168.77.2    #02服务器
- 192.168.77.5    #05服务器
- 192.168.77.6    #06服务器

计划在3台服务器上都有文件上传服务,目录为/data/dfs/upload,upload下创建02,05,06目录
在这里插入图片描述
02服务器实际上传地址为upload 下的02目录,同时同步05服务器的02目录,同步06服务器的02目录。
05服务器实际上传地址为upload 下的05目录,同时同步02服务器的05目录,同步06服务器的05目录。
06服务器实际上传地址为upload 下的06目录,同时同步02服务器的06目录,同步05服务器的06目录。
通过rsync最终在三台服务器各自访问自己的upload目录,均可访问到图片等文件资源。

以下操作三台服务器均需操作

1.新建rsync用户

useradd rsync_brew
passwd rsync_brew   //设置密码(a123456)

2.安装rsync

#安装rsync
yum install -y rsync

3.配置rsync各文件

  • rsyncd.conf 为 配置文件
  • rsync.pass 访问其他服务器的密码(三台密码都是a123456,一个文件即可)
  • rsync.password 本机的rsync用户密码
    在这里插入图片描述

3.1 rsyncd.conf

此处示例是02服务器,02服务器配置dfs05和dfs06,05服务器配置dfs02和dfs06,06服务器配置dfs02和dfs05

# /etc/rsyncd.conf
fake super = yes
strict modes = no
uid = rsync_brew
gid = rsync_brew
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore error
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
read only = no
list = false
hosts allow = 192.168.77.0/24
#hosts allow = 0.0.0.0/32
auth users = rsync_brew
secrets file = /etc/rsync.password
[dfs05]
path = /data/dfs/upload/05
comment = dfs upload 05
[dfs06]
path = /data/dfs/upload/06
comment = dfs upload 06

3.2 rsync.pass

# /etc/rsync.pass
a123456

3.3 rsync.pass授权

chmod 600 /etc/server.pass

3.4 rsync.password

# /etc/rsync.password
rsync_brew:a123456

4.upload目录授权

chown -R rsync_brew /data/dfs/upload

5.启动rsync

#杀死进程
kill $(cat /var/run/rsyncd.pid)

#检查一下服务是否已被终止
netstat -natp | grep rsync

#再次开启服务并检查端口号确认
rsync --daemon

6.安装inotify

6.1 优化内核参数

vim /etc/sysctl.conf   
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
 
# 从配置文件/etc/sysctl.conf加载内核参数设置
sysctl -p

6.2 安装inotify

下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
上传至 /opt

#安装gcc gcc-c++ 
yum install -y gcc gcc-c++ 
cd /opt
rz
tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make -j 4 && make install

6.3 编写shell (/opt/inotify.sh)

监听02服务器的upload/02目录,同步到05服务器的02目录和06服务器的02目录。05和06服务器类似操作,相应修改。password-file指定密码文件,[dfs02]对应05和06服务器上的/etc/rsyncd.conf中的模块名[dfs02]

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /data/dfs/upload/02/"
RSYNC_CMD05="rsync -azlH --delete --password-file=/etc/rsync.pass /data/dfs/upload/02/ rsync_brew@192.168.77.5::dfs02/"
RSYNC_CMD06="rsync -azlH --delete --password-file=/etc/rsync.pass /data/dfs/upload/02/ rsync_brew@192.168.77.6::dfs02/"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 2 ] ; then
        $RSYNC_CMD05
        $RSYNC_CMD06
    fi
done

6.4 执行脚本

# 脚本授权
chmod +x /opt/inotify.sh

#设置开机自启动
chmod +x /etc/rc.d/rc.local 
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local 

#执行脚本
cd /opt
nohup sh -x /opt/inotify.sh &

7 实验

#02服务器
cd /data/dfs/upload/02
touch 02.txt

02服务器如下
在这里插入图片描述
05服务器如下
在这里插入图片描述
06服务器如下
在这里插入图片描述
至此,02、05、06服务器之间实现文件同步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

107.2M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值