Rsync + Intofy 数据实时同步方案
Posted serendipity_cat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rsync + Intofy 数据实时同步方案相关的知识,希望对你有一定的参考价值。
Rsync + Intofy 数据实时同步方案
一、Rsync
Rsync是一种快速且用途广泛的文件复制工具,常用于备份和镜像
官方网站:https://rsync.samba.org/
使用delta-transfer
算法 监听端口 873
运行模式 C/S
1.1 Rsync特性
- 可以镜像保存整个目录树和文件系统
- 可以很容易做到保持原来文件的权限、时间、软硬链接等等
- 无须特殊权限即可安装
- 优化的流程,文件传输效率高
- 可以使用
rcp
、ssh
等方式来传输文件,当然也可以通过直接的socket
连接 - 支持匿名传输
1.2 部署Rsync下行同步
节点名 | IP地址 |
---|---|
master | 192.168.0.10 |
slave | 192.168.0.20 |
1.2.1 Master节点
安装配置
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum -y install rsync
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
address = 192.168.0.10
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.0.0/24
[wwwroot]
path = /var/www/html
comment = Document Root of www.example.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = fox
secrets file = /etc/rsyncd_users.db
#创建用户文件格式[用户名:密码]
echo "fox:123456" > /etc/rsyncd_users.db
#设置其权限600[官方推荐值]
chmod 600 /etc/rsyncd_users.db
开启服务
#开启服务
rsync --daemon
#检查端口服务是否开启
netstat -natp | grep "rsync"
mkdir -p /var/www/html
cd /var/www/html
touch dog.html cat.html
ls
1.2.2 Slave节点
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install -y rsync
mkdir /slave
chmod 777 /slave
#配置绵密交互
echo "123456" > /etc/server.pass
#给密钥文件赋权600
chmod 600 /etc/server.pass
rsync -az --delete --password-file=/etc/server.pass fox@192.168.0.10::wwwroot /slave
#rsync,使用密钥文件/etc/server/pass对应fox用户,IP地址为192.168.0.10的共享模块文件进行压缩,并归档同步至当前服务器的/slave目录下,同时删除差异内容,保持一致性
ls /slave
#查看下行同步是否成功
1.3 报错排查
@ERROR: auth failed on module wwwroot
检查用户名密码是否与Master配置文件中的相符
二、Intofy
Inotify是Linux内核特性,用于监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如读写删等操作
2.1 Intofy的使用方法
inotifywait -mrq -e modify,create,move,delete /slave
常用参数
- -m:持续进行监控
- -r:递归监控所有子对象
- -q:简化输出信息
- -e:指定要监控哪些事件类型
- modify:修改
- create:创建
- move:移动
- delete:删除
内核优化
/etc/sysctl.conf
(内核参数配置文件)
max_queue_events #监控事件队列大小
max_user_instances #最多监控实例数
max_user_watches #每个实例最多监控文件数
2.2 部署 Rsync+Inotify 实时同步
2.2.1 Master
vim /etc/rsyncd.conf
read only = no
#关闭只读模式,否则将不可写入
#通过杀死进程的方法重启rsync
kill `cat /var/run/rsyncd.pid`
netstat -natp | grep rsync
rsync --daemon
netstat -natp | grep rsync
chmod 777 /var/www/html
2.2.2 Slave
优化Slave内核参数
echo "fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576" >> /etc/sysctl.conf
安装Intofy-tools
wget -P /opt https://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
cd /opt
#将软件包传至该目录下
tar -zxvf inotify-tools-3.13.tar.gz
cd /opt/inotify-tools-3.13/
./configure
make -j 4 && make install
编写自动监控同步脚本
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /slave"
#INOTIFY_CMD变量:持续监控 /slave 目录中的创建,删除,移动,修改,改变时间的操作
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /salve fox@192.168.0.10::wwwroot"
#RSYNC_CMD变量:使 fox 用户,/etc/server.pass 密钥文件,将 /slave 目录下的文件进行压缩,归档,保留硬链接文件同步至 192.168.0.10 的共享模块定义的目录 /var/www/html 下,并删除差异性内容,保持一致性
#检测目录是否有修改操作
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
#判断是否有正在进行的rsync任务,如果没有则执行
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
赋予权限并后台运行
cd /opt/
chmod +x inotify.sh
./inotify.sh
#给脚本赋权并在后台执行
创建一个新的文件并删除一个已有的文件
cd /slave
touch fox.html
rm -rf dog.html
ls
以上是关于Rsync + Intofy 数据实时同步方案的主要内容,如果未能解决你的问题,请参考以下文章