1、inotify+rsync实时同步mysql
一、介绍linux
inotify-tools是一种强大的、细粒度的、异步的文件系统事件监控机制,能够用来监控文件系统的事件。inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其余。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。git
二、实现原理github
三、根据原理进行部署sql
①查看系统是否支持inotifymongodb
[root@nfs-nfs01 ~]# ll /proc/sys/fs/inotify/ -rw-r--r-- 1 root root 0 Aug 22 18:13 max_queued_events -rw-r--r-- 1 root root 0 Aug 28 14:30 max_user_instances -rw-r--r-- 1 root root 0 Aug 22 18:13 max_user_watches
②软件安装服务器
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #安装epel源才能够yum安装inotify yum install -y inotify-tools
③测试监控事件create、delete、close_write、moved_to、moved_from,定义inotify监控命令参数网络
inotifywait -mrq -e create,delete,moved_to,close_write --format '%w%f' /data #/data为监控的目录
④编写脚本让rsync与inotify服务结合实现实时同步多线程
cat >>inotify.sh <<EOF #!/bin/sh /usr/bin/inotifywait -mrq --format “%w%f” -e moved_to,delete,create,close_write /data|while read line do rsync -az --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password done EOF
⑤inotify优化并发
[root@nfs-nfs01 ~]# ll /proc/sys/fs/inotify/ -rw-r--r-- 1 root root 0 Aug 22 18:13 max_queued_events #设置监控服务实例能够监控的事件的个数 -rw-r--r-- 1 root root 0 Aug 28 14:30 max_user_instances #设置用户能够开启的服务进程数 -rw-r--r-- 1 root root 0 Aug 22 18:13 max_user_watches #能够监控的最大文件数 优化参数调整: echo “50000000” >/proc/sys/fs/inotify/max_user_watches echo “50000000” >/proc/sys/fs/inotify/max_queued_events
⑥inotifywait命令参数
参数名称 |
参数说明 |
-m,--monitor ***** |
始终保持事件监听状态 |
-r,--recursive ***** |
递归监控目录数据信息变化 |
-q,-quiet ***** |
输出信息少(只打印事件信息) |
--exclude |
排除文件或目录时,不区分大小写 |
--timefmt ***** |
指定时间输出格式 |
--format ***** |
打印使用指定的输出相似格式字符串,实际监控输出的内容 |
-e ***** |
指定监听的事件,若是省略,表示全部事件都进行监听 |
⑦inotifywait events监控事件
事件名称 |
事件说明 |
access |
文件或目录内容被读取 |
modify |
文件或目录内容被写入 |
attrib |
文件或目录属性改变 |
close_write ***** |
文件或目录关闭,在写入模式打开以后关闭 |
chose_nowrite |
文件或目录关闭,在只读模式打开以后关闭的 |
close |
文件或目录关闭,无论读或写模式 |
open |
文件或目录被打开 |
moved_to |
文件或目录被移动到监控的目录中 |
moved_from |
文件或目录被移动从监控的目录中 |
move ***** |
文件或目录无论移动或是移动出监控目录都触发事件 |
create ***** |
文件或目录建立在监控的目录中 |
delete |
文件或目录被删除在监控的目录中 |
2、sersync实时同步
一、介绍
数据同步就必然会想到rsync
,通常简单的服务器数据传输会使用ftp/sftp
等方式,可是这样的方式效率不高,不支持差别化增量同步也不支持实时传输。针对数据实时同步需求大多数人会选择rsync+inotify-tools
的解决方案,可是这样的方案也存在一些缺陷,sersync
是国人基于前二者开发的工具,不只保留了优势同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提升运行效率,节省时间和网络资源。https://github.com/wsgzao/sersync官方资料
二、sersync优势
①sersync对linux系统文件系统产生的临时文件和重复的文件操做进行过滤因此在结合rsync同步的时候,节省了运行时耗和网络资源,所以更快。
②相比较inotify+rsync,sersync配置起来简单,bin目录下已经有基本上静态编译的2进制文件,配合bin目录下的xml配置文件直接使用便可。
③另外sersync相比较其余脚本开源软件,使用多线程进行同步,尤为在同步较大文件时,可以保证多个服务器实时保持同步状态。
④sersync有出错处理机制,经过失败队列对出错的文件从新同步,若是仍旧失败,则按设定时长对同步失败的文件从新同步。
⑤自带crontab功能,只需在xml配置文件中开启,便可按要求,隔一段时间总体同步一次,无需再额外配置crontab功能。
⑥sersync有socket与http插件扩展,知足二次开发的须要
三、实现原理图
四、sersync服务部署
①软件下载安装
https://github.com/wsgzao/sersync cd /server/tools/ unzip sersync_installdir_64bit.zip mv sersync_installdir_64bit /usr/local/sersync cd /usr/local/sersync/ mv sersync/* ./ rm sersync/ -rf chmod +x /usr/local/sersync/bin/sersync cp conf/confxml.xml conf/confxml.xml.bak
②修改配置文件
③启动sersync服务
/usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml
五、高并发场景无分布式存储实时同步解决方案
①inotify(sersync)+rsync 系统文件级别
②drbd文件系统级别
③第三方软件的同步功能 mysql同步,oracle,mongodb
④业务上,经过程序双写
⑤弃用nfs方案