rsync和sersync实现数据同步

最近在做测试,服务器上的包要一台一台的上传,实在太麻烦,就想到了用rsync+sersync做个同步目录。

一、rsync介绍

      RSYNC=remote sync 远程同步,高效。和scp类似,不过rsync可以边复制,边统计、比较,而scp则不能。

  1.  特性:(1) 能保持原来文件的权限,时间,软硬链接等

                (2) 第一次rsync会复制所有文件,第二次只复制修改过的文件,节省资源和时间。

                (3) 传输过程中能实行压缩、解压缩操作,使用更少带宽。

                (4) 安全,支持匿名传输。

  2.数据同步方式

     推:push  一台主机把数据推送给其他主机,服务器开销大,适合后端服务器少的情况。

     拉:pull  所有主机定时去找服务器拉数据,会导致数据缓慢。

  3.服务安装

     将数据上传到test1服务器上,通过push 的方式推到test2服务器上。所以在test2上安装服务端和xinetd(超级互联网守护       进程服务)。如果rsync进来的是873端口,xinetd会通知它所管辖的rsync服务来做回应,之后就是两个rsync之间的通讯。

     常用参数:-a (保存当前权限等信息)

                      -v (输出信息)

                      -z (资料传输时进行压缩)

    服务端:test2

    [[email protected] ~]# yum install rsync xinetd -y

    [[email protected] ~]# rsync --daemon                 //启动rsync服务

    客户端:test1

    [[email protected] ~]# yum install rsync -y

    测试:

    [[email protected] ~]# useradd ksidc; echo ksidc:123456 | chpasswd          //新建用户

    [[email protected] ~]# setfacl -R -m user:ksidc:rwx /rsync-data/                       //赋予权限

    [[email protected] ~]# setfacl -R -m default:ksidc:rwx /rsync-data/

    

    [[email protected] ~]# useradd ksidc; echo ksidc:123456 | chpasswd           //新建用户   

    [[email protected] ~]# chown ksidc:ksidc /opt/                          

    传输测试:                    

    [[email protected] ~]# rsync -avz /rsync-data/ [email protected]:/opt/   

 4.非系统用户备份

     使用系统配置文件/etc/rsyncd.conf来备份数据,创建备份账户,共享模块,最后把rsync以daemon方式允许。

     配置文件:全局参数,模块参数

     全局参数:对rsync服务器生效,如果和参数模块冲突,冲突的参数模块生效。

     模块参数:定义需要通过rsync输出的目录定义的参数

     [[email protected] ~]# vim /etc/rsyncd.conf 

     

     [[email protected] ~]# vim /etc/rsync.passwd

                                  rsyncuser:123456

     [[email protected] ~]# chmod 600 !$

     测试:

     [[email protected] ~]# pkill rsync                            //杀掉进程
     [[email protected] ~]# systemctl start xinetd
     [[email protected] ~]# systemctl enable xinetd

     [[email protected] ~]# rsync --daemon --config=/etc/rsyncd.conf  //加载配置文件

     复制:    

     [[email protected] ~]# rsync -avz /rsync-data/ r[email protected]::test

     密码处理:用参数指定密码文件,以后可不用输入密码

     [[email protected] ~]# vim /etc/rsync.passwd 

                                 123456

     [[email protected] ~]# rsync -avz --delete /rsync-data/ [email protected]::test 

                                  --password-file=/etc/rsync.passwd                 //红色参数意为去重

二、sersync介绍

      sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用          rsync同步的时候,只同步发生变化的文件或者目录

  1. rsync+inotify-tools

   a、inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;

   b、rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低。

  2. rsync+sersync

   a、sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;

   b、rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。

 3. 同步过程和原理:

   1.  用户实时的往sersync服务器上写入更新文件数据;

   2.  此时需要在同步主服务器上配置sersync服务;

   3.  在另一台服务器开启rsync守护进程服务,以同步拉取来自sersync服务器上的数据;

        通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件;然后,在调用rsync客户端的   命令,将写入或更新事件对应的文件通过rsync推送到目标服务器

 4. 配置sersync

      [[email protected] ~]# tar -xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/       //解压

      [[email protected] ~]# cd /usr/local/

      [[email protected] local]# mv GNU-Linux-x86/ sersync         //将解压后的目录改名
      [[email protected] local]# cd sersync/
      [[email protected] sersync]# vim confxml.xm                        //编辑配置文件

       

line24 :本地目录

line25:rsync IP,共享模块名称


line31:用户和路径

开启sersync守护进程同步数据

[[email protected] sersync]# ./sersync2 -d -r -o /usr/local/sersync/confxml.xml

此时,数据已经同步

5. 添加脚本监控sersync是否正常运行

 

vim  /opt/check_sersync.sh  #编辑,添加以下代码

#!/bin/sh

sersync="/usr/local/sersync/sersync2"

confxml="/usr/local/sersync/confxml.xml"

status=$(ps aux |grep 'sersync2'|grep -v'grep'|wc -l)

if [ $status -eq 0 ];

then

$sersync -d -r -o $confxml &

else

exit 0;

fi

 chmod +x /opt /check_sersync.sh  #添加脚本执行权限

6. 补充:多实例情况

    

 1、配置多个confxml.xml文件(比如:www、bbs、blog....等等)

 2、根据不同的需求同步对应的实例文件

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/www_confxml.xml

/usr/local/sersync/sersync2  -d -o /usr/local/sersync/bbs_confxml.xml