SERSYNC服务
inotiry图片参考
sersync图片参考
inotify文字教程
该软件对系统有要求,内核2.6以上,并且有如下目录,后面会讲解三个文件用途
[root@jokerpro ~]# uname -r
3.10.0-693.2.2.el7.x86_64
[root@jokerpro ~]# ls -l /proc/sys/fs/inotify/ -rw-r--r-- 1 root root 0 May 31 10:32 max_queued_events -rw-r--r-- 1 root root 0 May 31 10:32 max_user_instances -rw-r--r-- 1 root root 0 May 31 10:32 max_user_watches
安装该软件
1,安装inotify-tools yum install inotify-tools -y 2,命令集工具,即inotifywait和inotifywatch inotifywait:在被监控的文件或目录上等待特定文件系统事件 (open,close,delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用 inotifywatch:收集被监控的文件系统使用度统计数据,指文件系统事件发生的次数统计 3,简单测试 inotifywait -mqr --excludei=a.txt --timefmt '%d/%m/%y%H:%M' --format '%T %w%f' -e create,close_write /backup3
附赠参数说明
inotifywait 参数说明
参数名称 | 参数说明 |
---|---|
-m,–monitor | 始终保持事件监听状态 |
-r,–recursive | 递归查询目录 |
-q,–quiet | 只打印监控事件的信息 |
–excludei | 排除文件或目录时,不区分大小写 |
-t,–timeout | 超时时间 |
–timefmt | 指定时间输出格式 |
–format | 指定时间输出格式 |
-e,–event | 后面指定删、增、改等事件 |
%w :显示被监控目录的名字
%f : 发生变化的文件名
%T: 使用--timefmt选项中自定义的时间格式
inotifywait events事件说明
事件名称 | 事件说明 |
---|---|
access | 读取文件或目录内容 |
modify | 修改文件或目录内容 |
attrib | 文件或目录的属性改变 |
close_write | 修改真实文件内容 |
close_nowrite | |
close | |
open | 文件或目录被打开 |
moved_to | 文件或目录移动到 |
moved_from | 文件或目录从移动 |
move | 移动文件或目录移动到监视目录 |
create | 在监视目录下创建文件或目录 |
delete | 删除监视目录下的文件或目录 |
delete_self | |
unmount | 卸载文件系统 |
优化 Inotify
#默认情况下不需要优化
在/proc/sys/fs/inotify目录下有三个文件,对inotify机制有一定的限制
1
2
3
4
5
|
[root@web ~]# ll /proc/sys/fs/inotify/
总用量0
-rw-r--r--1 root root 09月923:36 max_queued_events
-rw-r--r--1 root root 09月923:36 max_user_instances
-rw-r--r--1 root root 09月923:36 max_user_watches
|
#文件说明max_user_watches #设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances #设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
max_queued_events #设置inotify实例事件(event)队列可容纳的事件数量
1
2
|
[root@web ~]# echo 50000000>/proc/sys/fs/inotify/max_user_watches -- 把他加入/etc/rc.local就可以实现每次重启都生效
[root@web ~]# echo 50000000>/proc/sys/fs/inotify/max_queued_events
|
附赠一个监控脚本,rsync+inotify都应该装在逻辑服上,推送到备份服务器上
#!/bin/bash # The author is joker, which is used to listen to directories and synchronize files. # 判软件安装 inotify_order=`which inotifywait 1>/dev/null 2>&1` inotify_state=`echo $?` rsync_order=`which rsync 1>/dev/null 2>&1` rsync_state=`echo $?` if [ $inotify_state -eq 1 -a $rsync_state -eq 1 ];then yum install inotify-tools rsync -y sleep1 sh $0 else # 脚本是时刻监控path目录发生的变化,应该存放于rsync的客户端,即逻辑服务器 # 被监控目录 localpath=/joker/ # rsync验证用户,密码 auth_user=rsync_backup cat >/etc/rsync.passwd<<EOF woshimima EOF passwd_file=/etc/rsync.passwd chmod 600 /etc/rsync.passwd # 备份服务器IP ip="60.205.188.107" # 备份服务器备份目录,匹配rsync模块 backupdir=gameserver1 # m保持监听状态,r递归查询目录,q打印监控事件信息,w显示被监控目录名字,f发生变化的文件名 inotifywait -mrq --format '%w%f' -e close_write,delete $localpath \ |while read file do if [ -f $file ];then rsync -az $file --delete $auth_user@$ip::$backupdir --password-file=$passwd_file else cd $localpath rsync -az ./ --delete $auth_user@$ip::$backupdir --password-file=$passwd_file fi done fi
sersync文字教程
包在自己的云服务器目录上/joker,读者如果没有该目录,请从网上查找
1,想同步什么文件 6-11 6 <filter start="false"> 7 <exclude expression="(.*)\.svn"></exclude> 8 <exclude expression="(.*)\.gz"></exclude> 9 <exclude expression="^info/*"></exclude> 10 <exclude expression="^static/*"></exclude> 11 </filter> 2,inotify监控属性 12-21 12 <inotify> 13 <delete start="true"/> 14 <createFolder start="true"/> 15 <createFile start="false"/> 16 <closeWrite start="true"/> 17 <moveFrom start="true"/> 18 <moveTo start="true"/> 19 <attrib start="false"/> 20 <modify start="false"/> 21 </inotify> 3,sersync配置 23-44 其中 24-28 目录 24 <localpath watch="/opt/tongbu"> # 本地推送目录 25 <remote ip="127.0.0.1" name="tongbu1"/> #rsync服务器ip和模块 26 <!--<remote ip="192.168.8.39" name="tongbu"/>--> 27 <!--<remote ip="192.168.8.40" name="tongbu"/>--> 28 </localpath> 29-35 rsync命令 29 <rsync> 30 <commonParams params="-artuz"/> # 默认avz 31 <auth start="true" users="root" passwordfile="/etc/rsync.pas"/> # 开启验证,用户,密码 32 <userDefinedPort start="false" port="874"/<!port=874 --> # 端口 33 <timeout start="true" time="100"/><!-- timeout=100 --> # 客户端超时 34 <ssh start="false"/> 35 </rsync> 4,日志 36 36 <failLogpath="/tmp/rsync_fail_log.sh"timeToExecute="60"/><!--default every 60mins execute once-->
启动执行
/mnt/sersync/bin/sersync -d -r -o /mnt/sersync/conf/confxml.xml
附赠启动参数
[root@jokerpro bin]# /service/script/sersync/bin/sersync -h set the system param execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events parse the command param _______________________________________________________ 参数-d:启用守护进程模式 参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍 参数-n: 指定开启守护线程的数量,默认为10个 参数-o:指定配置文件,默认使用confxml.xml文件 参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块 参数-m:单独启用其他模块,使用 -m socket 开启socket模块 参数-m:单独启用其他模块,使用 -m http 开启http模块 不加-m参数,则默认执行同步程序
注意与事项
逻辑服务器安装inotify+sersync+rsync命令
备份服务器安装rsync的daemon模式
逻辑服务器数据产生目录发生数据变化,就会推送到备份服务器上
一般错误还是发生在rsync上,请看上一篇文章,搞懂rsync,虚拟账号,rsync账号,目录权限
附赠sersync脚本,执行于逻辑服上
#!/bin/bash # The author is joker, applied to file synchronization. # rsync 验证用户,密码 author=rsync_backup password=woshimima # 判软件安装 inotify_order=`which inotifywait 1>/dev/null 2>&1` inotify_state=`echo $?` rsync_order=`which rsync 1>/dev/null 2>&1` rsync_state=`echo $?` if [ $inotify_state -eq 1 -a $rsync_state -eq 1 ];then echo -e "\033[31m 红色字,正在安装inotify,rsync \033[0m" yum install inotify-tools rsync -y sleep1 sh $0 else # 只需要密码 cat>/etc/rsync.passwd<<EOF $password EOF chmod 600 /etc/rsync.passwd # 查找xml文件位置 sersync_path=`pwd` confxml_path=`cd ..&&pwd` # -d 守护进程模式,-r如果是第一次监控,将全量推送一次,后续增量,-o,指定配置文件 $sersync_path/sersync -d -r -o $confxml_path/conf/confxml.xml sersync_process=`ps -ef|grep sersync|grep -v grep|wc -l` if [ $sersync_process -ge 1 ];then echo -e "\033[32m 绿色字,sersync 启动成功 \033[0m" else echo -e "\033[31m 红色字,启动失败,检查inotify,rsync是否安装与正常启动 \033[0m" fi fi