Rsync + Intofy 数据实时同步方案

Posted serendipity_cat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rsync + Intofy 数据实时同步方案相关的知识,希望对你有一定的参考价值。

一、Rsync

Rsync是一种快速且用途广泛的文件复制工具,常用于备份和镜像
官方网站:https://rsync.samba.org/
使用delta-transfer算法 监听端口 873 运行模式 C/S

1.1 Rsync特性

  1. 可以镜像保存整个目录树和文件系统
  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等等
  3. 无须特殊权限即可安装
  4. 优化的流程,文件传输效率高
  5. 可以使用rcpssh等方式来传输文件,当然也可以通过直接的socket连接
  6. 支持匿名传输

1.2 部署Rsync下行同步

节点名IP地址
master192.168.0.10
slave192.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 数据实时同步方案的主要内容,如果未能解决你的问题,请参考以下文章

数据文件实时同步(rsync + sersync2)

rsync+inotify实现实时同步

rsync远程同步及rsync+inotify实时同步

rsync+inotify实现代码实时同步

基于sersync海量文件实时同步

centos6.6配置rsync+sersync实现实时同步分布式多客户端分发同步