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
参数:

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

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对应显示触发的事件信息

实时同步sersync-LMLPHP

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/ [email protected]::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-LMLPHP
第五步:启动实时同步服务,并检查测试
首先让程序文件有执行权限 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命令参数

启动程序:

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

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

实时同步sersync-LMLPHP

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

07-21 14:58