1.实时同步服务应用原因
因为用户上传的数据信息需要实时备份保存.采用定时任务进行备份的话,只能备份每分钟的数据,分钟以内的数据会丢失,所以会引入实时同步服务
2.实时同步服务的原理
01.需要部署好rsync守护进程服务.实现数据的传输备份
02.需要部署好inotify服务,实现目录中数据变化实时监测
03.需要将rsync和inotify服务建立联系,将变化的数据进行实时备份传输
存储服务器和备份服务器之间利用rsync进行数据的传输备份,inotify负责监控指定存储目录的数据变化,sersync结合两者实现实时数据变化同步服务
3.实时同步服务部署
1.部署好rsync守护进程服务
服务端配置操作
步骤一:下载安装软件 rsync
[root@backup ~]# rpm -qa rsync [root@backup ~]# yum install -y rsync Loaded plugins: fastestmirror Determining fastest mirrors * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.6 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/4): extras/7/x86_64/primary_db | 206 kB 00:00:00 (2/4): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (3/4): updates/7/x86_64/primary_db | 3.8 MB 00:00:01 (4/4): epel/x86_64/primary_db | 6.9 MB 00:00:01 Resolving Dependencies --> Running transaction check ---> Package rsync.x86_64 0:3.1.2-10.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved =================================================================================================================== Package Arch Version Repository Size =================================================================================================================== Installing: rsync x86_64 3.1.2-10.el7 base 404 k Transaction Summary =================================================================================================================== Install 1 Package Total download size: 404 k Installed size: 815 k Downloading packages: rsync-3.1.2-10.el7.x86_64.rpm | 404 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Warning: RPMDB altered outside of yum. ** Found 1 pre-existing rpmdb problem(s), 'yum check' output follows: git-1.8.3.1-13.el7.x86_64 has missing requires of rsync Installing : rsync-3.1.2-10.el7.x86_64 1/1 Verifying : rsync-3.1.2-10.el7.x86_64 1/1 Installed: rsync.x86_64 0:3.1.2-10.el7 Complete!
步骤二:编写配置文件
[root@backup ~]# vim /etc/rsyncd.conf #ted by HQ at 2017 #rsyncd.conf start### uid=rsync gid=rsync 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=false hosts allow=172.16.1.0/24 hosts deny=0.0.0.0/32 auth users=rsync_backup secrets file=/etc/rsync.password [backup] comment="backup dir by oldboy" path=/backup
步骤三:创建rsync服务虚拟用户
[root@backup ~]# id rsync uid=2008(rsync) gid=2008(rsync) groups=2008(rsync) [root@backup ~]# useradd rsync -M -s /sbin/nologin #创建虚拟用户 useradd: user 'rsync' already exists #虚拟用户已创建 [root@backup ~]# id rsync uid=2008(rsync) gid=2008(rsync) groups=2008(rsync) [root@backup ~]# grep rsync /etc/passwd rsync:x:2008:2008::/home/rsync:/sbin/nologin [root@backup ~]# grep rsync /etc/shadow rsync:!!:18450:0:99999:7::: [root@backup ~]#
步骤四:创建备份目录,修改属主属组信息
[root@backup ~]# mkdir /backup mkdir: cannot create directory ‘/backup’: File exists [root@backup ~]# chown rsync.rsync /backup [root@backup ~]# ll -d /backup/ drwxr-xr-x 4 rsync rsync 56 Jul 14 22:54 /backup/
步骤五:创建备份服务认证密码文件
[root@backup ~]# cat /etc/rsync.password #echo "rsync_backup:oldboy123" > /etc/rsync.password rsync_backup:oldboy123 [root@backup ~]# ll //etc/rsync.password #chmod 600 /etc/rsync.password -rw------- 1 root root 23 Jul 7 22:02 //etc/rsync.password [root@backup ~]#
步骤六:启动rsync服务
root@backup ~]# systemctl start rsyncd [root@backup ~]# systemctl enable rsyncd Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
客户端配置操作
步骤一:下载安装软件
[root@nfs01 ~]# rpm -qa rsync # yum install -y rsync rsync-3.1.2-4.el7.x86_64
步骤二:创建传输时认证的密码文件
[root@nfs01 ~]# cat /etc/rsync.password oldboy123 [root@nfs01 ~]# ll /etc/rsync.password -rw------- 1 root root 10 Jul 7 22:23 /etc/rsync.password [root@nfs01 ~]#
步骤三:进行免交互数据传输备份
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
2.部署inotify监控服务
步骤一:下载安装软件
[root@nfs01 ~]# yum install -y inotify-tools Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com base | 3.6 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (2/2): epel/x86_64/primary_db | 6.9 MB 00:00:01 Package inotify-tools-3.14-9.el7.x86_64 already installed and latest version Nothing to do [root@nfs01 ~]# rpm -qa inotify [root@nfs01 ~]# rpm -ql inotify package inotify is not installed [root@nfs01 ~]# yum install -y inotify Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com No package inotify available. Error: Nothing to do [root@nfs01 ~]# rpm -qa inotify-tools inotify-tools-3.14-9.el7.x86_64
步骤二:熟悉命令的使用
[root@nfs01 ~]# rpm -ql inotify-tools /usr/bin/inotifywait #监控目录数据信息变化 /usr/bin/inotifywatch #对监控的变化信息进行统计 /usr/lib64/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0.4.1 /usr/share/doc/inotify-tools-3.14 /usr/share/doc/inotify-tools-3.14/AUTHORS /usr/share/doc/inotify-tools-3.14/COPYING /usr/share/doc/inotify-tools-3.14/ChangeLog /usr/share/doc/inotify-tools-3.14/NEWS /usr/share/doc/inotify-tools-3.14/README /usr/share/man/man1/inotifywait.1.gz /usr/share/man/man1/inotifywatch.1.gz
inotifywait 命令使用方法:
innotify [参数] 监控的目录
[root@nfs01 ~]# inotifywait -h-m|--monitor #实现一直监控目录的数据变化-r|--recursive #进行递归监控(监控子目录及以下目录数据变化)-q|--quiet #尽量减少信息的输出(-v相反) --format <fmt> #指定输出信息的格式--timefmt <fmt> #指定输出的时间信息格式-e #指定监控的时间信息
创建文件进行数据监控:
[root@nfs01 /date]# touch 01.txt [root@nfs01 ~]# inotifywait -m /date Setting up watches. Watches established. /date/ CREATE 01.txt #创建文件 /date/ OPEN 01.txt #打开文件 /date/ ATTRIB 01.txt #修改文件属性 /date/ CLOSE_WRITE,CLOSE 01.txt #保存并关闭文件
删除文件进行数据监控:
[root@nfs01 /date]# rm -rf 01.txt /date/ DELETE 01.txt #相对于创建文件来说,删除文件步骤比较简单,直接删除即可
修改文件进行数据监控:
[root@nfs01 /date]# echo 123 > 02.txt /date/ CREATE 02.txt #创建文件 /date/ OPEN 02.txt #打开文件 /date/ MODIFY 02.txt #修改文件内容 /date/ CLOSE_WRITE,CLOSE 02.txt #保存并关闭文件
衍生:我们可以利用监控服务查看sed命令修改文件的原理(步骤)
[root@nfs01 /date]# sed -i 's#123#321#g' 02.txt /date/ OPEN 02.txt #打开文件 /date/ CREATE sed4bpGiW #创建一个临时文件 /date/ OPEN sed4bpGiW #打开临时文件 /date/ ACCESS 02.txt #读取源文件的内容 /date/ MODIFY sed4bpGiW #修改临时文件内容 /date/ ATTRIB sed4bpGiW #修改临时文件属性 /date/ CLOSE_NOWRITE,CLOSE 02.txt #不编辑直接关闭源文件 /date/ CLOSE_WRITE,CLOSE sed4bpGiW #编辑关闭临时文件 /date/ MOVED_FROM sed4bpGiW #将临时文件移出 /date/ MOVED_TO 02.txt #移入到新的02.txt文件
inotifywait监控命令操作演示:
[root@nfs01 /date]# touch ./date1/{05..10}.txt [root@nfs01 ~]# inotifywait -mrq --timefmt "%F %T" --format "%T %w %f 事件信息:%e" /date -e CREATE 2020-08-09 21:24:20 /date/date1/ 05.txt 事件信息:CREATE 2020-08-09 21:24:20 /date/date1/ 06.txt 事件信息:CREATE 2020-08-09 21:24:20 /date/date1/ 07.txt 事件信息:CREATE 2020-08-09 21:24:20 /date/date1/ 08.txt 事件信息:CREATE 2020-08-09 21:24:20 /date/date1/ 09.txt 事件信息:CREATE
-r 实现了递归监控.子目录中的数据变化也监控了
-q 减少了监控信息中会出现的Setting up watches. Watches established.信息
--timefmt 调用了时间函数信息.在监控的信息中显示了日期和时间
--format 将目录和文件即输入的内容都显示在了监控信息中
-e 指定了要监控的事件,上述要将监控的事件是创建
在实际应用中.我们只要监控以下事件就能满足需求
create创建、delete删除、moved_to移入、close_write修改
企业应用:防止系统重要文件被破坏
需要用到inotify进行实时监控. /etc /etc/passwd /var/spool/cron/root 等等重要文件
3.部署sersync同步服务
步骤一:下载安装软件,注意此软件通过yum是无法下载的,因为软件是个人开发者编写的一款实用工具,需要到特定网址下载https://github.com/wsgzao/sersync
步骤二:创建一个目录,下载的软件都放到此目录中,通过rz 命令将软件上传到linux服务器上
[root@nfs01 ~]# mkdir -p /server/tools [root@nfs01 ~]# cd /server/tools/ [root@nfs01 /server/tools]# rz -y [root@nfs01 /server/tools]# ll total 1936 -rw-r--r-- 1 root root 1981010 Aug 9 21:48 sersync-master.zip [root@nfs01 /server/tools]#
步骤三:解压软件压缩包,并保存数据
[root@nfs01 /server/tools]# ll total 1936 -rw-r--r-- 1 root root 1981010 Aug 9 21:48 sersync-master.zip #软件压缩包 [root@nfs01 /server/tools]# unzip sersync-master.zip #zip的压缩包利用unzip命令进行解压缩 Archive: sersync-master.zip e6e4cda2583a73a5581d7015255838b5e68673c6 creating: sersync-master/ inflating: sersync-master/.gitattributes inflating: sersync-master/.gitignore inflating: sersync-master/README.md inflating: sersync-master/inotify-tools-3.14.tar.gz extracting: sersync-master/rsync-3.1.1.tar.gz inflating: sersync-master/sersync2.5.4_64bit_binary_stable_final.tar.gz [root@nfs01 /server/tools]# ll total 1936 drwxr-xr-x 2 root root 175 Aug 14 2015 sersync-master #解压后的数据 -rw-r--r-- 1 root root 1981010 Aug 9 21:48 sersync-master.zip [root@nfs01 /server/tools]# tree sersync-master sersync-master ├── inotify-tools-3.14.tar.gz ├── README.md ├── rsync-3.1.1.tar.gz └── sersync2.5.4_64bit_binary_stable_final.tar.gz 0 directories, 4 files [root@nfs01 /server/tools]# cd sersync-master/ [root@nfs01 /server/tools/sersync-master]# ll total 1948 -rw-r--r-- 1 root root 358772 Aug 14 2015 inotify-tools-3.14.tar.gz -rw-r--r-- 1 root root 10838 Aug 14 2015 README.md -rw-r--r-- 1 root root 890124 Aug 14 2015 rsync-3.1.1.tar.gz -rw-r--r-- 1 root root 727290 Aug 14 2015 sersync2.5.4_64bit_binary_stable_final.tar.gz [root@nfs01 /server/tools/sersync-master]# tar xvf sersync2.5.4_64bit_binary_stable_final.tar.gz #解压sersync软件安装包 GNU-Linux-x86/ GNU-Linux-x86/sersync2 GNU-Linux-x86/confxml.xml [root@nfs01 /server/tools/sersync-master]# ll total 1948 drwxr-xr-x 2 root root 41 Oct 26 2011 GNU-Linux-x86 -rw-r--r-- 1 root root 358772 Aug 14 2015 inotify-tools-3.14.tar.gz -rw-r--r-- 1 root root 10838 Aug 14 2015 README.md -rw-r--r-- 1 root root 890124 Aug 14 2015 rsync-3.1.1.tar.gz -rw-r--r-- 1 root root 727290 Aug 14 2015 sersync2.5.4_64bit_binary_stable_final.tar.gz [root@nfs01 /server/tools/sersync-master]# tree GNU-Linux-x86/ GNU-Linux-x86/ ├── confxml.xml └── sersync2 0 directories, 2 files [root@nfs01 /server/tools/sersync-master]# cd GNU-Linux-x86/ [root@nfs01 /server/tools/sersync-master/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@nfs01 ~]# cd /server/tools/sersync-master/GNU-Linux-x86/ [root@nfs01 /server/tools/sersync-master/GNU-Linux-x86]# mkdir /usr/local/sersync [root@nfs01 /server/tools/sersync-master/GNU-Linux-x86]# mkdir /usr/local/sersync/conf [root@nfs01 /server/tools/sersync-master/GNU-Linux-x86]# mkdir /usr/local/sersync/logs [root@nfs01 /server/tools/sersync-master/GNU-Linux-x86]# mkdir /usr/local/sersync/bin
步骤四:移动文件到相应目录
[root@nfs01 /server/tools/sersync-master/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 [root@nfs01 /server/tools/sersync-master/GNU-Linux-x86]# mv sersync2 /usr/local/sersync/bin/ [root@nfs01 /server/tools/sersync-master/GNU-Linux-x86]# mv confxml.xml /usr/local/sersync/conf/ [root@nfs01 /server/tools/sersync-master/GNU-Linux-x86]# cd [root@nfs01 /usr/local/sersync]# cd .. [root@nfs01 /usr/local]# tree sersync/ sersync/ ├── bin #sersync软件命令目录 │ └── sersync2 ├── conf #sersync配置文件目录 │ └── confxml.xml └── logs #sersync日志文件目录
步骤五:编写配置文件
[root@nfs01 /usr/local]# cd ./sersync/conf/ [root@nfs01 /usr/local/sersync/conf]# vim confxml.xml
6 <filter start="false"> #start="ture"即为开启排除功能
7 <exclude expression="(.*).svn"></exclude> 以.svn结尾的信息
8 <exclude expression="(.*).gz"></exclude> 以.gz结尾的信息
9 <exclude expression="^info/*"></exclude> 以info开头的信息
10 <exclude expression="^static/*"></exclude> 以static开头的信息
11 </filter>
说明配置:指定排除不进行实时传输同步的数据信息
12 <inotify>
13 <delete start="true"/>
14 <createFolder start="true"/>
15 <createFile start="false"/>
16 <closeWrite start="true"/>
17 <moveFrom start="true"/>
18 <moveTo start="true"/>
19 <attrib start="false"/>
20 <modify start="false"/> 此项为关闭是因为closewrite开启了,closewrite也相当于修改,有一个即可
21 </inotify>
说明配置:指定inotify程序需要监控的事件
23 <sersync>
24 <localpath watch="/date"> #指定监控的目录
25 <remote ip="172.16.1.41" name="backup"/> #备份服务器的地址 指定备份服务器模块信息
26 <!--<remote ip="192.168.8.39" name="tongbu"/>--> !-- >-- 相当于#起注释作用
27 <!--<remote ip="192.168.8.40" name="tongbu"/>-->
28 </localpath>
29 <rsync>
30 <commonParams params="-artuz"/> rsync命令使用的参数
31 <auth start="ture" users="rsync_backup" passwordfile="/etc/rsync.password"/> rsync认证用户
32 <userDefinedPort start="false" port="874"/><!-- port=874 --> rsync密码认证文件
33 <timeout start="false" time="100"/><!-- timeout=100 -->
34 <ssh start="false"/>
35 </rsync>
需要编写的配置文件
步骤六:配置环境变量.
由于sersync命令是下载得来的,它的路径不在环境变量中,每次执行命令需要输绝对路径,所以我们添加环境变量
临时添加环境变量
root@nfs01 /usr/local/sersync/conf]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@nfs01 /usr/local/sersync/conf]# export PATH="$PATH:/usr/local/sersync/bin/" [root@nfs01 /usr/local/sersync/conf]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin/
永久添加环境变量
[root@nfs01 /usr/local/sersync/conf]# vim /etc/profile
#sersync
export PATH="$PATH:/usr/local/sersync/bin/"
[root@nfs01 /usr/local/sersync/conf]# source /etc/profile
[root@nfs01 /usr/local/sersync/conf]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/sersync/bin/
步骤七:启动sersync服务程序
[root@nfs01 ~]# sersync2 -dro /usr/local/sersync/conf/confxml.xml 运行配置文件,启动服务
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
option: -d run as a daemon
option: -r rsync all the local files to the remote servers before the sersync work
option: -o config xml name: /usr/local/sersync/conf/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_backup
passwordfile is /etc/rsync.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /date && rsync -az -R --delete ./ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password >/dev/null 2>&1 #这条命令是sersync执行的监控命令
移动到/date目录,且执行rsync命令. --delete 含义是无差异同步 这就实现了实时同步功能
run the sersync: ,
watch path is: /date #实时同步监控指定目录,服务部署成功
[root@nfs01 ~]# 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文件
-o /usr/local/sersync/conf/confxml.xml
-o /usr/local/sersync/conf/confxml02.xml 如果有其他配置文件,也可以单独指定
设置服务开机自启:由于服务是第三方下载软件,所有不能利用命令进行开机自启,需要将启动命令添加到自启文件中
[root@nfs01 ~]# echo "sersync2 -dro /usr/local/sersync/conf/confxml.xml" >>/etc/rc.local
[root@nfs01 ~]# cat /etc/rc.local
~
sersync2 -dro /usr/local/sersync/conf/confxml.xml
sersync服务需要停止的时候直接执行kill命令即可,此时我们需要一个命令即killall,停止服务的全部进程
[root@nfs01 ~]# yum provides killall #查找killall属于哪个软件包
psmisc-22.20-16.el7.x86_64 : Utilities for managing processes on your system
Repo : base
Matched from:
Filename : /usr/bin/killall
[root@nfs01 ~]# yum install -y psmisc #下载软件包
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed:
psmisc.x86_64 0:22.20-16.el7
Complete!
停止服务进程
[root@nfs01 ~]# killall sersync2
步骤七:验证实时同步服务
在存储服务器上创建100个文件,查看备份服务器监控状态
[root@nfs01 ~]# cd /date
[root@nfs01 /date]# touch {1..100}.txt
[root@nfs01 /date]# ll |wc -l
103
[root@backup ~]# cd /backup/
[root@backup /backup]# ll |wc -l
103 #文件数一样,说明实时同步监控服务正常
在存储服务器上删除创建的100个文件,查看备份服务器监控状态
[root@nfs01 /date]# m -rf ./*
[root@nfs01 /date]# ll
total 0
[root@nfs01 /date]#
[root@backup /backup]# ll
total 0
[root@backup /backup]#
04 实时同步服务概念总结
1)实现实时同步的原理
监控目录数据变化 inotify
将数据进行传输 rsync
将监控和传输进行整合 sersync
2)实现实时同步部署方法
1.部署rsync守护进程
2.部署inotify软件 只要下载好软件即可sersync会自己调用命令来执行任务
3.部署sersync软件