zoukankan      html  css  js  c++  java
  • sersync实时同步数据; 解决nfs单点故障问题的脚本

    sersync实时同步数据

    sersync是国⼈基于rsync+inotify-tools开发的⼯具,不仅保留了优点同时还强化了实时监控,⽂件过滤,简化配置等功能,帮助⽤户提⾼运⾏效率,节省时间和⽹络资源。

    1.什么是实时同步

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

    2.为什么实时同步

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

    3.实现同步的原理

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

    4.实时同步⼯具的选择

    sersync+RSYNC(√)、inotify+rsync
    Inotify是⼀个通知接⼝,⽤来监控⽂件系统的各种变化,如果⽂件存取,删除,移动。可以⾮常⽅便
    地实现⽂件异动告警,增量备份,并针对⽬录或⽂件的变化及时作出响应。rsync+inotify可以做到实
    时增量备份
    sersync是国⼈基于rsync+inotify-tools开发的⼯具,不仅保留了优点同时还强化了实时监控,⽂
    件过滤,简化配置等功能,帮助⽤户提⾼运⾏效率,节省时间和⽹络资源。
    

    sersync项⽬实战

    1.环境准备

    (backup服务器见前面的文章去配置)
    2.nfs服务器部署sersync

    1)安装rsyncinotify

    [root@nfs ~]# yum install -y rsync inotify-tools
    

    2)下载sersync(2.5.4稳定版本)

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

    3)安装sersync(⼆进制包)

    [root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
    

    源码包:解压,⽣成,编译,安装

    4)配置sersync

    [root@nfs ~]# cd GNU-Linux-x86
    [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="/data">
     **** #rsync服务端IP      #模块名字
     <remote ip="172.16.1.41" name="data"/>
     <!--<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="rsync_backup"
    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>
    # *表示必须要改的
    

    5)创建密码⽂件

    [root@nfs sersync]# echo "123" > /etc/rsync.password
    [root@nfs sersync]# chmod 600 /etc/rsync.password
    

    6)查看sersync命令

    [root@nfs sersync]# ./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
    

    7)启动sersync

    [root@nfs sersync]# ./sersync2 -dro confxml.xml
    

    8)验证⽂件实时同步

    在web服务器安装httpd php (两台机器上全需要执行)

    [root@web1 ~]# yum install httpd php -y
    
    [root@web1 ~]# systemctl start httpd
    
    # 将kaoshi.zip解压至/var/www/html目录(只需要在一台服务器上执行)
    [root@web1 ~]# mv kaoshi.zip /var/www/html/
    [root@web1 ~]# cd /var/www/html/
    [root@web1 html]# unzip kaoshi.zip 
    

    解决NFS单点故障问题

    #!/bin/bash
    
    ping -c1 172.16.1.31 >/dev/null
    
    if [ $? -ne 0 ];then
    	umount -lf /var/www/html && mount -t nfs 172.16.1.41:/sersync /var/www/html/
    else
    
    	df -h | grep 172.16.1.31 >/dev/null
    
    	if [ $? -ne 0 ];then
    		umount -lf /var/www/html && mount -t nfs 172.16.1.31:/sersync /var/www/html	
    	fi
    fi
    
    脚本解析
    #!/bin/bash
    
    ping -c1 172.16.1.31 >/dev/null
    或者用showmount -e 172.16.1.31 >/dev/null #查看31是否可以挂载
    
    if [ $? -ne 0 ];then #如果不可以挂载,则证明故障,执行下面命令挂载到41去
    	umount -lf /var/www/html && mount -t nfs 172.16.1.41:/sersync /var/www/html/
    else  #如果可以挂载
    
    	df -h | grep 172.16.1.31 >/dev/null #查看挂载是在31还是41
    
    	if [ $? -ne 0 ];then #如果不在31
    		umount -lf /var/www/html && mount -t nfs 172.16.1.31:/sersync /var/www/html	
    	fi
    fi
    
    #web01 he web02 都要写vim 脚本.sh
    
  • 相关阅读:
    mysql批量替换指定字符串
    php中英字符串截取
    比较两个JSON字符串是否完全相等
    Java FastJson 介绍
    线程池
    DBUS及常用接口介绍
    在Mac中如何正确地设置JAVA_HOME
    base64 原理
    sizeof与strlen的区别
    Kubernetes 部署失败的 10 个最普遍原因
  • 原文地址:https://www.cnblogs.com/caodan01/p/14692632.html
Copyright © 2011-2022 走看看