当前位置: 首页 > 工具软件 > sersync > 使用案例 >

sersync实时同步 sersync项目实战 nfs单点故障解决

林鸿彩
2023-12-01

sersync实时同步

什么是实时同步

实时同步是⼀种只要当前⽬录发⽣变化则会触发⼀个事件,事件触发后会将变化的⽬录同步⾄远程服务
器。

为什么实时同步

保证数据的连续性, 减少⼈⼒维护成本,解决nfs单点故障

实现同步的原理

实时同步需要借助inotify通知接⼝,⽤来监控⽬录的变化,如果监控的⽬录发⽣变更,则触发动作,
这个动作可以是进⾏⼀次同步操作,或其他操作;

实时同步工具的选择

sersync+RSYNC(√)、inotify+rsync

Inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。rsync+inotify可以做到实时增量备份

sersync是国人基于rsync+inotify-tools开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。

需求:rsync+inotify 实时监控目录备份造成(nfs)服务器压力过大,rsync一直在扫描文件,造成传输性能低下,如果nfs不能正常工作怎么办?

sersync项目实战

1.环境准备

主机内网安装
web01172.16.1.7部署作业代码
nfs172.16.1.31rsync+inotify+sersync、NFS服务端
backup172.16.1.41rsync服务端

安装web服务器(web01和web02两台机器上全需要执行)

[root@web1 ~]# yum install httpd php -y

[root@web1 ~]# systemctl start httpd

[root@web1 ~]# mount -t nfs 172.16.1.31:/sersync /var/www/html/
[root@web1 ~]# chown -R www.www /var/www/html/

安装nfs、rpcbind

[root@nfs ~]# yum install -y nfs-server rpcbind

下载sersync

[root@nfs ~]# wget http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz

rz -E 拉进来之后 解压

[root@nfs ~]# tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz 
drwxr-xr-x  2 root root     41 Oct 26  2011 GNU-Linux-x86
[root@nfs ~]# cd GNU-Linux-x86/
[root@nfs GNU-Linux-x86]# ll
total 1772
-rwxr-xr-x 1 root root    2214 Oct 26  2011 confxml.xml  #配置文件
-rwxr-xr-x 1 root root 1810128 Oct 26  2011 sersync2     #执行命令

配置sersync

[root@nfs GNU-Linux-x86]# vim confxml.xml 
   <inotify>
        #监控的动作,true就推送,false就不推送
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="true"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="true"/>
        <modify start="true"/>
    </inotify>

    <sersync>
    	#监控的目录
        <localpath watch="/sersync">
        	#rsync服务端IP			 #模块名字
            <remote ip="172.16.1.41" name="sersync"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
        	#rsync推送时的参数
            <commonParams params="-az"/>
            #rsync推送时认证		#认证的虚拟用户		#虚拟用户对应的密码文件
            <auth start="true" users="yeg" passwordfile="/etc/rsync.password"/>
            #如果rsync不使用默认的873端口,使用改参数指定
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            #超时时间
            <timeout start="false" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
        #错误日志保存路径
        <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
        #定时任务,设置多久进行一次全量备份
        <crontab start="false" schedule="600"><!--600mins-->
            <crontabfilter start="false">
                <exclude expression="*.php"></exclude>
                <exclude expression="info/*"></exclude>
            </crontabfilter>
        </crontab>
        <plugin start="false" name="command"/>
    </sersync>
    

查看sersync命令

[root@nfs GNU-Linux-x86]# ./sersync2 -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命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
________________________________________________________________

#注:常用参数  -dro
#启用
[root@nfs GNU-Linux-x86]# ./sersync2 -dro confxml.xml     

创建密码文件

[root@nfs GNU-Linux-x86]# vim /etc/rsync.passwd
1
[root@nfs GNU-Linux-x86]# chmod 600 /etc/rsync.passwd 

先手动推一下测试

[root@nfs GNU-Linux-x86]# cd /sersync && rsync -az -R --delete ./  --timeout=100 yeg@172.16.1.41::sersync --password-file=/etc/rsync.passwd

执行脚本并查看

[root@nfs GNU-Linux-x86]# ./sersync2 -dro confxml.xml
[root@nfs GNU-Linux-x86]# ps -ef |grep sersync2 
root      10418      1  0 21:40 ?        00:00:00 ./sersync2 -dro confxml.xml
root      10434   6948  0 21:40 pts/0    00:00:00 grep --color=auto sersync2

移动脚本

[root@nfs GNU-Linux-x86]# ll
total 1772
-rwxr-xr-x 1 root root    2207 Apr 22 21:37 confxml.xml
-rwxr-xr-x 1 root root 1810128 Oct 26  2011 sersync2
[root@nfs GNU-Linux-x86]# cd 
[root@nfs ~]# mv GNU-Linux-x86/ /usr/local/
#执行
[root@nfs ~]# /usr/local/GNU-Linux-x86/sersync2 -dro /usr/local/GNU-Linux-x86/confxml.xml

#backup服务端查看
[root@backup sersync]# ll upload
total 220
-rw-r--r-- 1 www www 222097 Apr 22 18:52 4_chenyang_test.mp4

验证

#nfs删除
[root@nfs ~]# rm -rf /sersync/upload/4_chenyang_test.mp4
#其他机器查看
[root@backup sersync]# ll upload
total 0
[root@web01 ~]# ll /var/www/html/upload
total 0
[root@web02 upload]# ll
total 0

#证明数据同步

nfs单点故障解决

#两台机器都执行
[root@web01 ~]# vim ping.sh
[root@web02 ~]# vim ping.sh

#!/bin/bash
#NFS_change

showmount -e 192.168.15.31 > /dev/null
if [ $? -eq 1  ];then
        umount -lf /var/www/html && mount -t nfs 192.168.15.41:/http_backup /var/www/html
else
        df -h | grep 192.168.15.31 > /dev/null
        if [ $? -eq 1 ];then
                umount -lf /var/www/html && mount -t nfs 192.168.15.31:/http_backup /var/www/html
        fi
fi

脚本解析

#!/bin/bash
#NFS_change

showmount -e 192.168.15.31 > /dev/null	#查看31是否可以挂载
if [ $? -eq 1  ];then	#如果不可以挂载,则证明故障,执行下面命令挂载到41去
        umount -lf /var/www/html && mount -t nfs 192.168.15.41:/http_backup /var/www/html
else	#如果可以挂载
        df -h | grep 192.168.15.31 > /dev/null	#查看挂载是在31还是41
        if [ $? -eq 1 ];then	#如果不在31
                umount -lf /var/www/html && mount -t nfs 192.168.15.31:/http_backup /var/www/html	#把它挂载回31
        fi
fi

添加定时任务

* * * * * /xxx/xxx > /dev/null
 类似资料: