分享 | 交流
让学习成为一种习惯

Linux下Rsync+Inotify-tools实现数据实时同步

安装inotify-tools自动同步

inotifywait -mrq --timefmt '%d%m%y %H%M' --format '%T %w%f' -e create /backup

-mrq  m 监控  r递归  q 静默

-e create  执行事件:创建 可选参数还有 delete 删除 close_write

一般使用命令

/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /backup

命令说明:
inotifywait:监控命令
-m:持续不断的进行监控(处于阻塞状态)

-r:递归监控,监控目录及目录的所有子目录

-q:只输出简单的监控信息

–format:指定监控数据输出的格式

-e:指定监控的事件类型

delete:删除事件

close_write:文件写入的关闭事件(其实就是监控修改文件)

create:创建事件

——————————————————————————–

执行脚本

******************************

vim inotify.sh
#!/bin/bash
Path=/backup
Backup_Server=172.16.1.41
Backup_User=rsync_backup
/usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /$Path | while read file
do
cd /$Path && \ 
if [ -f $file ]
rsync -az "$file" --delete $Backup_User@$Backup_Server::nfsbackup --passwd- file=/etc/rsync.passwd
else
rsync -az ./  --delete $Backup_User@$Backup_Server::nfsbackup --passwd-file=/etc/rsync.passwd
fi
done

*******************************

设置开机自动运行脚本

echo "sh /server/scripts/inotify.sh &" >> /etc/rc.local

关键参数调整

在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制

max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)

max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数

max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。

实战调整:

cat /proc/sys/fs/inotify/max_
max_queued_events   max_user_instances  max_user_watches
cat /proc/sys/fs/inotify/max_user_watches 
8192
echo "50000000" > /proc/sys/fs/inotify/max_user_watches
cat /proc/sys/fs/inotify/max_user_watches 
50000000
cat /proc/sys/fs/inotify/max_queued_events 
16384
echo "326790" > /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_queued_events 
326790
sysctl -p

***************************************

Inotify实时并发:

结论:经过测试,每秒200文件并发,数据同步几乎无延迟(小于1秒)

5.8 inotify 优点:

1)监控文件系统事件变化,通过同步工具实现实时数据同步。

5.9 inotify 缺点

1)并发如果大于200个文件(10-100k),同步就会有延迟

2)我们前面写的脚本,每次都是全部推送一次,但确实是增量的。也可以只同步变化的文件,不变化的不理。

3)监控到事件后,调用rsync同步是单进程的,而sersync为多进程同步。既然有了inotify-tools,为什么还要开发sersync?

5.10 serysync功能多:(inotify+rsync命令)

1)支持通过配置文件管理

2)真正的守护进程socket

3)可以对失败文件定时重传(定时任务功能)

4)第三方的HTTP接口(例如:更新cdn缓存)

5)默认多进程rsync同步

5.11 高并发数据实时同步方案小结:

1)inotify(sersync)+ rsync,是文件级别的。

2)drbd文件系统级别,文件系统级别,基于block块同步,缺点:备节点数据不可用

3)第三方软件的同步功能:mysql同步(主从复制),oracle,mongodb

4)程序双写,直接写两台服务器。

5)利用产品业务逻辑解决(读写分离,备份读不到,读主)image.png说明:

用户上传的图片或者附件单独存在NFS主服务器上;

用户读取数据从两台NFS备份服务器上读取;

NFS主和两台NFS备份通过inotify+rsync方式进行实时同步。

6)NFS集群(1,4,5方案整合)(双写主存储,备存储用inotify(sersync)+rsyncLinux下Rsync+Inotify-tools实现数据实时同步

未经允许不得转载:留时刻运维网 » Linux下Rsync+Inotify-tools实现数据实时同步

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留时刻 - Linux系统教程,运维经验分享

加入我们给我留言