Rsync+Sersync实时同步

一、基本介绍 

1.什么是Rsync?

Rsync(Remote Synchronize)是一款开源的、快速的、多功能的、可以实现全量及增量的本地或远程数据同步备份的优秀工具,并且支持多种操作系统平台运行。

2.Rsync简介

Rsync具有本地与远程两台主机之间的数据快速复制同步镜像、远程备份等功能,该功能类似scp,但是优于scp功能,还具有本地不同分区目录之间全量及增量复制数据。

Rsync同步数据镜像时,通过“quick check”算法,仅同步大小或最后修改时间发生变化的文件或目录,当然也可以根据权限,属主等属性变化的同步,所以可以实现快速同步。

rsync 具有如下的基本特性:

可以镜像保存整个目录树和文件系统

可以很容易做到保持原来文件的权限、时间、软硬链接等

无须特殊权限即可安装

优化的流程,文件传输效率高

可以使用 rsh、ssh 方式来传输文件,当然也可以通过直接的 socket 连接

支持匿名传输,以方便进行网站镜象

3.Rsync命令格式

本地:  rsync [OPTION...] SRC... [DEST]

通过shell远程访问:

拉取: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

推送: rsync [OPTION...] SRC... [USER@]HOST:DEST

通过rsync守护进程访问:

拉取: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

推送: rsync [OPTION...] SRC... [USER@]HOST::DEST

rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

4.什么Sersync

sersync是基于inotify开发的,类似于inotify-tools的工具,Sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录,因此效率更高。

架构关系

192.168.0.132 服务端  CentOS     Rsync server

192.168.0.103 客户端 CentOS     Rsync client + Sersync server

二、在服务端上Rsync编译安装

说明:当然你也可以使用“yum -y install rsync”命令进行安装,直接进入Rsync server 配置环节。

1.检查本机是否存在

[root@kry132 ~]# rpm -qa  rsync

rsync-3.0.6-12.el6.x86_64

2.卸载

[root@kry132 ~]# yum  remove rsync

说明:需要安装最新的版本就需要卸载老版本。

3、下载rsync软件

[root@kry132 ~]# cd  /usr/local/src/

[root@kry132 src]# wget https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz

现在版本3.2自己决定

4.解压包

[root@kry132 src]# tar zxvf rsync-3.1.2.tar.gz

5.创建程序安装目录,并编译安装

[root@kry132 src]# cd  rsync-3.1.2

[root@kry132 rsync-3.1.2]# mkdir /usr/local/rsync

[root@kry132 rsync-3.1.2]# ./configure --prefix=/usr/local/rsync

--disable-openssl --disable-xxhash --disable-zstd --disable-lz4

(3.2.5需要禁用这几个)

[root@kry132 rsync-3.1.2]# make && make install

6.配置环境变量

[root@kry132 ~]# vim  /etc/profile.d/rsync.sh

#!/bin/sh
export PATH=$PATH:/usr/local/srync/bin

7.建立软连接

[root@kry132 ~]# ln -s  /usr/local/rsync/bin/rsync /usr/bin/rsync

8.查看当前版本

[root@kry132 ~]# rsync --version

rsync  version 3.1.2  protocol version 31

三、Rsync server配置

1.编辑配置文件

[root@kry132 ~]# vim /etc/ rsyncd.conf

uid = rsync
gid = rsync
port = 873
use chroot = on
max connections = 200
timeout = 120
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log

[bakup] 客户端配置里会用到代表镜像或目标路径
path = /bakup
read only = false
list = false
hosts allow = 192.168.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_bakup
secrets file = /etc/rsyncd.password

2.创建密码文件

[root@kry132 ~]# vim  /etc/rsyncd.password

rsync_bakup:4297f44b13955235245b2497399d7a93

说明:定义格式 用户:密码

3.修改密码文件权限

[root@kry132 ~]# chmod 600 /etc/rsyncd.password

4.创建Rsync server服务启动的系统账户

[root@kry132 ~]# useradd rsync -M  -s /bin/nologin

5.创建数据存放目录

[root@kry132 ~]# mkdir -p  /data/bakup

6.修改目录权限

[root@kry132 ~]# chown rsync.rsync /data/bakup

7.启动服务

[root@kry132 ~]# rsync --daemon

说明:如果配置文件路径不是/etc/rsyncd.conf,启动是需要使用“–config” 参数指定配置文件。

8.查看服务是否启动

[root@kry132 ~]# ps  axu |grep rsync

root 9198  0.0  0.0 107652   672 ?  Ss  19:41  0:00 rsync --daemon --config /etc/rsync/rsyncd.conf

root  9205  0.0  0.0 103308  848 pts/0 S+ 19:44 0:00 grep rsync

[root@kry132 ~]# netstat -nlp |grep 873

tcp 0  0 0.0.0.0:873 0.0.0.0:*  LISTEN   9198/rsync

四、客户端配置rsync

1.创建密码文件

[root@Kry103 ~]# vim  /etc/rsyncd.password

4297f44b13955235245b2497399d7a93

2.修改文件权限

[root@Kry103 ~]# chmod 600 /etc/rsyncd.password

3.安装客户端

[root@Kry103 ~]# yum  -y install rsync

说明:如果客户端存在,跳过该步骤。

五、测试

1.客户端上推送数据

[root@Kry103 ~]# ll test.txt

-rw-r--r--. 1 kry kry 13 Mar 24 15:55 test.txt

[root@Kry103 ~]# rsync -avzP test.txt  rsync_bakup@192.168.0.132::bakup --password-file=/etc/rsyncd.password

2.服务端查看文件是否推送成功

[root@kry132 bakup]# ll

total 4

-rw-r--r--. 1 rsync rsync 13 Mar 24 15:55 test.txt

3.从服务端拉取数据

[root@Kry103 ~]# ll  /tmp/

total 0

[root@Kry103 ~]#  rsync -avzP rsync_bakup@192.168.0.132::bakup  /tmp --password-file=/etc/rsyncd.password

4.查看拉取的文件

[root@Kry103 ~]# ll  /tmp/

total 4

-rw-r--r--. 1 kry kry 13 Mar 24 15:55 test.txt

说明:文件的属主组跟推送时保持一直。

六、安装配置sersync

1.下载地址

[root@Kry103 ~]# cd  /usr/local/src/

[root@Kry103 src]# wget  https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

2.解压软件包

[root@Kry103 src]# tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz

3.创建目录结构

[root@Kry103 src]# mkdir /usr/local/sersync

[root@Kry103 src]# mkdir /usr/local/sersync/conf

[root@Kry103 src]# mkdir /usr/local/sersync/logs

[root@Kry103 src]# mkdir /usr/local/sersync/bin

4.移动文件

[root@Kry103 src]# mv  GNU-Linux-x86/sersync2 /usr/local/sersync/bin/

[root@Kry103 src]# mv  GNU-Linux-x86/confxml.xml /usr/local/sersync/conf

5.配置环境变量

[root@Kry103 conf]# vim  /etc/profile.d/sersync.sh

[root@Kry103 conf]# source /etc/profile.d/sersync.sh

6.配置

[root@Kry103 src]# cd  /usr/local/sersync/conf

[root@Kry103 conf]# cp confxml.xml confxml.xml.bak

[root@Kry103 conf]# vim  confxml.xml(可以自己起个容易记住的名字)

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
   # hostip与port是针对插件的保留字段,对于同步没有任何作用,保留默认即可。
    <host hostip="localhost" port="8008"></host>
   # 开启debug模式,会在sersync正在运行的控制台,打印inotify事件与rsync同步命令。
    <debug start="false"/>
  #   对于xfs文件系统的用户,需要将这个选项开启,才能是sersync正常工作。

<fileSystem xfs="false"/>
  # 对于sersync监控的文件,会默认过滤系统的临时文件(以"."开头,以"~"结尾),除了这些文件外,可以自定义其他需要过滤的文件,同步时忽略推送的文件(正则表达式),默认关闭 
 <filter start="false">
        <exclude expression="(.*)\.svn"></exclude>
        <exclude expression="(.*)\.gz"></exclude>
        <exclude expression="^info/*"></exclude>
        <exclude expression="^static/*"></exclude>
    </filter>

inotify监控参数,对于大多数应用,可以把createFile设置为false来提高性能,减少rsync通讯,因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝时结束的事件close_write,同样可以实现文件完整同步。

注意:要将createFolder保持为true,如果将createFloder设置为false,则不会对产生的目录进行监控,该目录下的子文件与子目录也不会被监控,所以除非特殊需要,请开启。默认情况下对创建文件(目录)事件与删除文件(目录)事件都进行监控,如果项目中不需要删除远程目标服务器的文件(目录),则可以将delete参数设置为false,则不会删除事件监控。

<inotify>
        <delete start="false"/>
        <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/bakup/"> 
#定义同步服务端ip和模块
            <remote ip="192.168.0.132" name="bakup"/>
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
     <rsync>
# rsync指令参数
            <commonParams params="-artuz"/>
   # rsync同步认证
            <auth start="true" users="rsync_bakup" passwordfile="/etc/rsyncd.password"/>
  # 设置rsync远程服务端口,非默认端口需要打开自定义(若开启rsync+ssh, 则这里需定义SSH端口)
            <userDefinedPort start="false" port="873"/><!-- port=874 -->
# 设置超时时间
            <timeout start="ture" time="100"/><!-- timeout=100 -->
   # 设置rsync+ssh加密传输模式,默认关闭,开启需设置SSH加密证书
            <ssh start="false"/>
        </rsync>
 # sersync传输失败日志脚本路径,每隔60会重新执行该脚本,执行完毕会自动清空。
        <failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
   # 设置rsync定时传输,默认关闭
        <crontab start="false" schedule="600"><!--600mins-->
            <crontabfilter start="false">
                <exclude expression="*.php"></exclude>
                <exclude expression="info/*"></exclude>
            </crontabfilter>
        </crontab>
   # 设置sersync传输后调用name指定的插件脚本,默认关闭
        <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>

7.启动

[root@Kry103 conf]# sersync2 -d -r -o /usr/local/sersync/conf/confxml.xml

-d 后台运行

-o 指定配置文件

-r 先执行一遍完整同步

-n #指定默认的线程池的线程总数,如果不指定,默认启动线程池数量是10(适用于四核服务器)

#如果cpu使用过高,可以通过这个参数调低,如果机器配置较高,可以用-n跳高线程总数。

说明:还有些其他参数,使用“-h”选项查看。

七、测试

1.创建

[root@Kry103 ~]# cd  /data/bakup/

[root@Kry103 bakup]#  for f in `seq 10`;do touch $f;done

2.检查数据是否同步Rsync server

[root@kry132 ~]# ll  /data/bakup/

total 0

-rw-------. 1 rsync rsync 0 Mar 29 17:04 1

-rw-------. 1 rsync rsync 0 Mar 29 17:04 10

-rw-------. 1 rsync rsync 0 Mar 29 17:04 2

八、实时监测脚本:

#!/bin/bash
# usage:
#       1.Copy Shell To SersyncPath
#       chmod +x checkrsync.sh
#       2.Add Crontab
#       */5 * * * * [sersyncPath]/checkrsync.sh
xml=5.82back.xml
mkdir -p /var/log/sersync/
logfile='/var/log/sersync/checksersync.log';

function sersync_is_running(){
        threadnum=`ps aux|grep ${xml}|grep -v grep -wc`;
        if [ "$threadnum" -eq '0' ];then
                echo '0';
        else
                echo '1';
        fi
        return;
}

function current_time(){
        if [ -z "$1" ];then
                format="%Y-%m-%d %H:%M:%S%Z";
        else
                format=$1;
        fi
        echo `date +"$format"`;
        return;
}

function logtofile(){
        echo $(current_time) $2>>$1;
}

function sersync_restart(){
        /usr/local/sersync/bin/sersync2 -r -d -o /usr/local/sersync/conf/${xml} >/dev/null 2>&1;
        sleep 3;

threadnum=$(sersync_is_running);
        if [ $threadnum -eq '0' ]; then
                echo "0";
        else
                echo '1';
        fi
        return;
}

isrunning=$(sersync_is_running);

if [ "$isrunning" -eq '0' ];then
        logtofile $logfile "sersync service was died.";

restart=$(sersync_restart);

if [ $restart -eq '0' ];then
                logtofile $logfile "sersync service restart failed.";
        else
                logtofile $logfile "sersync service restart success.";
        fi
else
        logtofile $logfile "sersync service is running.";
fi

exit 0;

Rsync+Sersync实时同步详细配置相关推荐

  1. rsync+sersync实时同步数据

    前言 rsync+sersync实时同步数据. 简介 rsync+sersync实时同步数据的原理是在客户端安装sersync监控目录的变化,一般是增删改,检测到变化以后,将变化的文件同步到服务端. ...

  2. Rsync+Sersync实时文件同步

    Rsync+Sersync实时文件同步 实时同步方案: 1.rsync+inotify (不推荐,inotify是对本地文件或目录的实时监控) 2.rsync+sersync (推荐,是inotify ...

  3. sersync+rsync实现实时同步

    在分布式应用中会遇到一个问题,就是多个服务器间的文件如何能始终保持一致.一种经典的办法是将需要保持一致的文件存储在NFS上,这种方法虽然简单方便但却将本来多点的应用在文件存储上又变成了单点,这违背了分 ...

  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步

    1.什么是 Rsync? Rsync 是一个开源的快速备份工具,是Linux和UNIX操作系统默认安装的组件之一,可在不同主机间镜像同步整个目录,并支持增量备份文件传输,保持链接和权限,采用优化的同步 ...

  5. Rsync+Inotify+Sersync实时同步服务

    目录 实时同步服务原理 实时同步服务部署 部署rsync守护进程 部署inotify监控服务 下载安装软件 熟悉命令使用 inotify企业应用 部署sersync同步服务 下载安装软件 编写配置文件 ...

  6. Centos7 下 配置 rsync 以及 rsync+inotify 实时同步

    Centos 7 下 配置 Rsync 以及 rsync+inotify 实时同步 rsync介绍 rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支 持增量备份,保持链接和 ...

  7. Sersync 实时同步

    Sersync 实时同步 实时同步概述 什么是实时同步 实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器. 为什么要实时同步 保证数据的连续性, 减少人力维 ...

  8. Sersync实时同步

    Sersync实时同步 1.实时同步概述 2.实时同步案例 3.实时同步扩展 本章课程大纲 1.什么是实时同步? 2.实时同步的原理 3.实时同步的场景 4.实时同步的工具的选择 5.实时同步的案例演 ...

  9. sersync实时同步 sersync项目实战 nfs单点故障解决

    文章目录 sersync实时同步 什么是实时同步 为什么实时同步 实现同步的原理 实时同步工具的选择 sersync项目实战 1.环境准备 安装web服务器(web01和web02两台机器上全需要执行 ...

最新文章

  1. 多年密谋「闹独立」,谷歌为何拴不住DeepMind的心?
  2. leetcode 目录
  3. android点九,android关于点九(.9)图片
  4. 《iOS创意程序设计家》——第6.2节导航栏控制器UINavigationController
  5. 愉快且卓有成效:培养你与人相处的能力
  6. Atitit dsl exer v3 qb3 新特性
  7. AI的委屈只有它知道……
  8. 2021年安徽无为中学高考成绩查询,安徽省无为中学2021届高三年级这些学生,被表彰了...
  9. PCBA电路板中电容MLCC失效分析-应力测试作业指导
  10. 第二章 随机变量及其分布
  11. html5网页制作代码-我的班级网页 HTML期末大作业
  12. 关于Andriod org.gradle.api.tasks.TaskExecutionException: Execution failed for task 问题及解决办法
  13. alpha shapes提取边界原理及详细步骤
  14. 【Tableau 设计提示16】如何在 Tableau 中使用标记(批注)
  15. 基于JAVA汽车租赁平台的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  16. 一文详解单目VINS论文与代码解读目录
  17. 语法转换_近五年高考语法填空词性转换汇总(含答案)
  18. JAVA——反转的两种方法
  19. Effective C++ 条款43
  20. 旗舰计算机系统蓝图,【求助】求助大神给这些蓝图一个参考定价

热门文章

  1. 用c语言写一个stm32智能手环程序
  2. 如何在 Windows XP 中使用 Web 浏览器连接打印机
  3. Alpha颜色混合的魔法 上篇 “法术篇”
  4. linux中uart设备名是什么,linux uart设备驱动结构分析
  5. Ubuntu文件修改权限
  6. signal------SIGCHLD
  7. “痕迹主义”在基层流行,已成形式主义新变种
  8. Python实现傅里叶变换:图像频域分析和处理
  9. 《新课程教学》期刊简介及投稿须知
  10. User centered design的步骤