美文网首页
sersync 对网站数据实时同步备份

sersync 对网站数据实时同步备份

作者: 相信奇迹德人 | 来源:发表于2021-01-06 05:46 被阅读0次

    sersync 实现实时同步数据

    1 sersync实时同步原理

    image-20210104163102063.png
    1. rsync守护进程服务,实现数据传输
    2. inotify服务,实现目录中数据变化监控
    3. 将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输

    2 实时同步服务部署

    2.1 部署rsync守护进程方式

    2.1.1 备份服务rsync守护进程服务
    #step1  安装rsync软件
    rpm -qa |grep rsync
    yum install -y rsync
    
    #step2 编写配置文件   以root身份运行rsync但保留用户所有权
    vim /etc/rsyncd.conf
    uid = root
    gid = root
    port = 873
    #fake super = yes
    use chroot = no
    max connections = 200
    timeout = 300
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    ignore errors
    read only = false
    list = true
    hosts allow = 172.17.1.0/24
    hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    [backup]
    comment = "backup dir by devops"
    path = /backup
    
    #step3  创建rsync服务的虚拟账户  上面配置使用的rsync 不创建也可以 没有测试
    useradd rsync -M -s  /sbin/nologin
    
    #step4  配置rsync的认证信息
    ehco "rsync_backup:1" >/etc/rsync.password
    chmod 600 /etc/rsync.password
    
    #step5  创建备份目录 属主属组默认是root 所有不需要修改
    mkdir /backup
    
    #step6 启动服务
    systemctl start rsyncd
    systemctl enable rsyncd
    systemctl status rsyncd
    
    2.1.2 存储服务器即 rsync客户端配置
    #step1  安装rsync软件
    rpm -qa |grep rsync
    yum install -y rsync
    
    #配置下密码文件,这个密码是存储服务器rsync认证信息中的密码
    echo "1" > /etc/rsync.pas
    

    2.2 存储服务器部署inotify监控服务

    2.2.1 安装inotify软件
    yum -y install inotify-tools
    
    2.2.2 inotify 软件的命令的使用
    rpm -ql inotify-tools
    [root@ data]# rpm -ql inotify-tools
    /usr/bin/inotifywait
    /usr/bin/inotifywatch
    

    inotifywait命令使用方法

    Usage: inotifywatch [ options ] file1 [ file2 ] [ ... ]

        -m|--monitor   --------------- 实现一直监控目录的数据变化
         -r|--recursive ----------------- 进行递归监控
         -q|--quiet     ------------------- 尽量减少信息的输出
         --format <fmt> -------------- 指定输出信息的格式 
         --timefmt      ------------------- 指定输出的时间信息格式 
         -e|--event     ------------------  指定监控的事件信息
    

    创建文件监控信息输出
    /data/ CREATE test --- 一个文件被创建
    /data/ OPEN test --- 打开创建的文件
    /data/ ATTRIB test --- 修改文件的属性信息
    /data/ CLOSE_WRITE,CLOSE test --- 保存关闭一个文件

    sed 命令修改文件原理

    #一屏打开执行sed修改文件
    [root@ www]# sed -i 's#b#a#g' test 
    #一屏监控文件变化 
    [root@ data]# inotifywait -m /data/www
    Setting up watches.
    Watches established.
    /data/www/ OPEN test                --------------- 打开test文件
    /data/www/ CREATE sedBw5yaY         --------------- 创建一个临时文件(内存)
    /data/www/ OPEN sedBw5yaY           --------------- 打开临时文件
    /data/www/ ACCESS test              --------------- 读取源文件
    /data/www/ MODIFY sedBw5yaY         --------------- 修改临时文件
    /data/www/ ATTRIB sedBw5yaY         --------------- 修改临时文件属性变化
    /data/www/ CLOSE_NOWRITE,CLOSE test --------------- 不编辑直接关闭源文件
    /data/www/ CLOSE_WRITE,CLOSE sedBw5yaY ------------ 写入关闭临时文件
    /data/www/ MOVED_FROM sedBw5yaY     --------------- 将临时文件 移除 
    /data/www/ MOVED_TO test            --------------- 移入一个新的test源文件
    
    

    inotify监控命令格式:

     inotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" /data -e CREATE
    

    一般监控 create创建,delete删除,move_to移入,close_write修改

    2.2.3 inotify应用
    需要用到inotify进行实时一直监控 /etc passwd  /var/spool/cron/root
    

    2.3 存储服务器部署sersync同步服务

    2.3.1 安装sersync
    #step1  下载sersync 并解压   此项目github地址 https://github.com/wsgzao/sersync
    
    mkdir /server/tools
    cd /server/tools
    wget https://codeload.github.com/wsgzao/sersync/zip/master
    yum -y install unzip
    unzip master
    cd sersync-master
    tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz 
    #安装解压好的二进制程序
    mv GNU-Linux-x86 /usr/local/sersync
    
    2.3.2 编写配置文件
    <head version="2.5">
        <host hostip="localhost" port="8008"></host>
        <debug start="false"/>
        <fileSystem xfs="false"/>
        
        <!---指定哪些数据信息不需要同步--->
        <filter start="false">
            <exclude expression="(.*)\.svn"></exclude>
            <exclude expression="(.*)\.gz"></exclude>
            <exclude expression="^info/*"></exclude>
            <exclude expression="^static/*"></exclude>
        </filter>
        
         <!---定义inotify程序需要监控的事件--->
        <inotify>
            <delete start="true"/>
            <createFolder start="true"/>
            <createFile start="false"/>
            <closeWrite start="true"/>
            <moveFrom start="true"/>
            <moveTo start="true"/>
            <attrib start="false"/>
            <modify start="false"/>
        </inotify>
    
        <sersync>
           <!---修改实时同步的目录--->
            <localpath watch="/data/www">
            <!---修改rsync服务端的ip和rsync服务端的模块信息--->
                <remote ip="172.17.1.104" name="backup"/>
                <!--<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.pas"/>
                <!---修改端口信息默认是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>
    
        <plugin name="command">
            <param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->
            <filter start="false">
                <include expression="(.*)\.php"/>
                <include expression="(.*)\.sh"/>
            </filter>
        </plugin>
    
        <plugin name="socket">
            <localpath watch="/opt/tongbu">
                <deshost ip="192.168.138.20" port="8009"/>
            </localpath>
        </plugin>
        <plugin name="refreshCDN">
            <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
                <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
                <sendurl base="http://pic.xoyo.com/cms"/>
                <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
            </localpath>
        </plugin>
    </head>
    

    2.3.3 启动实时同步服务

    /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml 
    

    相关文章

      网友评论

          本文标题:sersync 对网站数据实时同步备份

          本文链接:https://www.haomeiwen.com/subject/jdjgoktx.html