• 实时同步sersync


    1 实时同步

    1.1 实时同步原理

    存储服务器数据实时同步到备份服务器

    1.2 什么是实时同步

    实时同步是一种只要当前目录触发事件,就马上同步到远程的目录。

    1.3 为什么要实时同步

    保证数据的连续性
    减少人力成本

    1.4 实时工具的选择

    inotify+rsync
    sersync+rsync
    lsyncd
    Inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。rsync+inotify可以实触发式实时同步增量备份。
    sersync是国人基于rsync+inotify-tools开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。
    sersync优点
    (1)支持通过配置文件管理
    (2)真正的守护进程socket(不需要写脚本)
    (3)可以对失败文件定时重传(定时任务功能)
    (4)第三方的HTTP接口(例如更新cdn缓存)
    (5)默认多线程rsync同步

    2 inotify

    inotify:实时监控目录数数据变化软件,安装在存储服务器。

    2.1 inotify软件部署

    yum install -y inotify-tools		#安装inotify
    rpm -ql inotify-tools			#查看软件包内容
    内容:
    /usr/bin/inotifywait   		#监控目录数据变化的命令 
    /usr/bin/inotifywatch  		#统计监控事件信息
    

    2.2 监控目录数据变化的命令

    /usr/bin/inotifywait
    参数:

    -m 让监控过程始终保持下去;没有这个参数,只监控一次
    -r 递归监控目录
    format 定义输出信息格式
    时间信息  创建什么文件  事件信息:创建文件
    timefmt 具体定义时间的格式
    -q 输出更少的信息,只输出事件信息
    -e 只监控什么事件

    事件:
    inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data

    access 文件或目录内容被读取
    modify 文件或目录内容被写入
    attrib 文件或目录属性被改变
    close_write 文件或目录被关闭,在打开之后有写操作然后关闭文件
    close_nowrite 文件或目录被关闭,在打开之后没有任何操作
    编写文件--打开文件--编辑/没有编辑--关闭文件
    close 文件或目录被关闭,写或读之后被关闭
    open 文件或目录被打开
    moved_to 文件或目录被移动到监控目录,其它目录数据移动到监控目录
    moved_from 文件或目录从监控目录移除,监控目录数据移动到其它地方
    move 文件或目录移动到监控目录或移除监控目录
    create 文件或目录在监控目录中被创建出来
    delete 文件或目录在监控目录中被删除
    delete_self 文件或目录被删除
    unmount 包含文件或目录的文件系统被卸载
    重要事件: close_write、move、create、delete

    2.3 监控命令语法结构

    语法结构:inotifywait 参数信息 监控目录
    inotifywait -mrq --timefmt "%F %T" --format "%T %w%f %e" /data	#监控命令
    
    2019-07-20 22:13:20 /data/oldboy_dir/oldboy04.txt CREATE		#监控的反应信息
    # timefmt里的"%F %T"对应2019-07-20 22:13:20	#format里的%T对应timefmt里的"%F %T"
    # %w对应监控的目录 /data/oldboy_dir
    # %f对应触发事件文件数据信息 create
    # %e对应显示触发的事件信息
    

    实时同步命令格式_看图王.png

    2.4 编写实时同步脚本

    第一步:进行数据监控

    [root@nfs01 ~]#inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data
    /data/test.txt
    /data/test.txt
    

    第二步:部署好rsync守护进程服务
    服务端:
    安装rsync软件
    编辑配置文件
    创建虚拟(rsync)用户
    创建密码文件并修改权限600
    创建备份目录,修改属主属组权限
    启动服务程序服务/重启程序
    客户端:
    创建密码文件,并修改权限600,测试传输
    第三步:编写脚本

    [root@nfs01 scripts]#vi inotify_watch.sh 
    [root@nfs01 scripts]#cat inotify_watch.sh 
    #!/bin/bash
    inotifywait -mrq --format "%w%f" -e "close_write,move,create,delete" /data|
    while read line
    do
      rsync -az --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
    done
    

    问题一:
    执行脚本总有输出信息,并且脚本不能持续运行,如何实现脚本在后台一直运行:
    方法一: 执行脚本后面加上 &

    sh /server/scripts/inotify_watch.sh 
    # &:让脚本在后台运行,但连接断开,脚本就不回运行
    # 在编辑脚本时,将-avz中的v去掉,不会再有输出信息
    

    方法二: 利用专用命令    nohup

    nohup sh /server/scripts/inotify_watch.sh &		#脚本一直持续运行,断开也会运行
    

    如果想要脚本开机运行,可以写入/erc/rc.local
    问题二:数据已经同步完毕,但是脚本还在一直运行       shell知识学习完,有带解决。

    3 sersync

    sersync软件实现实时同步:先安装好inotify+rsync

    3.1 如何部署安装sersync软件

    第一步:下载sersync软件
    http://github.com/wsgzao/sersync
    第二步:上传软件到linux系统

    yum install -y lrzsr	# lrzsz:实现Windows,linux互传文件
    rz -y	# 将Windows数据传输到linux
    sz -y	# 将linux数据传输到windows
    

    第三步:安装部署sersync软件(二进制包)

    unzip sersync_installdir_64bit.zip
    mv /server/tools/sersync_installdir_64bit/sersync/ /usr/local/
    #	/usr/local/ 第三方软件目录
    

    第四步:修改配置文件

    [root@nfs01 ~]# vim /usr/local/sersync/conf/confxml.xml
    
    说明:排除指定信息不要进行实时同步
     <filter start="false">
       <exclude expression="(.*).svn"></exclude>
       <exclude expression="(.*).gz"></exclude>
       <exclude expression="^info/*"></exclude>
       <exclude expression="^static/*"></exclude>
    </filter>
    
    说明:指定监控的事件信息
    <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">
    	<remote ip="127.16.1.41" name="backup"/>
    	<!--<remote ip="192.168.8.39" name="tongbu"/>-->
    	<!--<remote ip="192.168.8.40" name="tongbu"/>-->
    </localpath>
    <rsync>
    	<commonParams params="-az"/>
    	<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
    	<userDefinedPort start="false" port="874"/><!-- port=874 -->
    
    

    sersync服务配置文件说明_看图王.png
    第五步:启动实时同步服务,并检查测试
    首先让程序文件有执行权限 x

    [root@nfs01 bin]# chmod +x /usr/local/sersync/bin/sersync
    

    让程序启动
    (1)在程序的bin目录启动:

    [root@nfs01 bin]# ./sersync -dro /usr/local/sersync/conf/confxml.xml
    

    (2)创建软链接启动

    [root@nfs01 bin]# ln -s /usr/local/sersync/bin/sersync /usr/local/sbin/sersync
    [root@nfs01 bin]# ll /usr/local/sbin/sersync 
    [root@nfs01 bin]# lrwxrwxrwx 1 root root 30 Jul 21 00:28 /usr/local/sbin/sersync -> /usr/local/sersync/bin/sersync
    

    (3)加入环境变量

    [root@nfs01 bin]# export PATH=$PATH:/usr/local/sersync/bin/		# 临时设置
    [root@nfs01 bin]# vi /etc/profile		# 永久设置
    export PATH=$PATH:/usr/local/sersync/bin/		#	添加在文件中
    # source /etc/profile 或者 . /etc/profile 让修改的配置文件生效
    

    然后sersync就可以使用了

    3.2 sersync命令参数

    -d 启用守护进程模式
    -r 在监控前,将监控目录与远程主机用rsync命令推送一遍
    -o 指定配置文件,默认使用confxml.xml文件
    -n 指定开启守护线程的数量,默认为10个
    -m 使用 -m refreshCDN 开启刷新CDN模块
    使用 -m socket 开启socket模块
    使用 -m http 开启http模块
    不加-m参数,则默认执行同步程序

    启动程序:

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

    3.3 利用实时同步可以解决 nfs服务单点问题

    QQ图片20190720150943.png

    当用户存储数据时,存储到nfs服务器中,inotify监控到有新数据产生的时候,会同步给web01中的/data01,当nfs服务器坏掉的时候,web01中data挂载目录点会被卸载,挂载上data01,这样用户读取数据的时候,就会读取到data01的数据,data01的数据同nfs服务器中的数据一样。

  • 相关阅读:
    java学习路线:给大家讲一个笑话
    谈谈关于IT劳务派遣与人力资源外包的区别!附劳务人力报酬管理目录
    智能化时代来临,CFO们如何才能更管理企业财务!
    谈谈关于创业者和股东成立公司如何出资,出资方式有哪些!附税务管理学习目录
    【创业者关注】初创企业如何节税,节税需要注意哪些?
    谈谈关于财务信息化水平最高的企业是怎样
    谈谈关于技术时代会计信息化的新变革
    谈谈关于IT创业者需要了解初创公司哪些财务管理的常识!
    通过 ML.NET 使用预训练残差网络 ResNet 模型实现手势识别
    1025. 除数博弈-动态规划-简单
  • 原文地址:https://www.cnblogs.com/basa/p/11220209.html
Copyright © 2020-2023  润新知