zoukankan      html  css  js  c++  java
  • (转)Linux系统sersync数据实时同步

    Linux系统sersync数据实时同步

     原文:http://blog.csdn.net/mingongge/article/details/52985259

    前面介绍了以守护进程的方式传输或同步数据rsync软件,linux系统数据同步软件很多,今天来介绍下sersync数据同步软件

    一:sersync介绍

    sersync其实是利用inotify和rsync两种软件技术来实现数据实时同步功能的,inotify是用于监听sersync所在服务器上的文件变化,结合rsync软件来进行数据同步,将数据实时同步给客户端服务器

    二:sersync工作过程

    在同步主服务器上开启sersync,负责监听文件系统的变化,然后调用rsync命令把更新的文件同步到目标服务器上,主服务器上安装sersync软件,目标服务器上安装rsync服务

    三:整体环境拓扑图

    四:客户端安装配置rsync服务

    [root@Client ~]# cat /etc/rsyncd.conf

    cat: /etc/rsyncd.conf: No such file or directory

    如果有此文件,配置前要进行备份,再进行相关配置

    [root@Client etc]# vi /etc/rsyncd.conf 

    ##rsync config  start

    ##created by root 2016-08-08 15:00

    ##rsync.conf config start

    uid = rsync

    gid = rsync

    use chroot = no

    max connetctions = 200

    timeout = 100

    pid file = /var/run/rsyncd.pid

    lock file = /var/run/rsync.lock

    log file = /var/log/rsyncd.log

    [backup]

    path = /backup/

    ignore errors

    read only = false

    list = false

    hosts allow = 192.168.1.0/24

    hosts deny = 0.0.0.0/32

    auth users = rsync_backup

    secrets file = /etc/rsync.password

    ##rsync config  end   

    "rsyncd.conf" [New] 21L, 458C written

    添加用户

    [root@Client ~]# useradd rsync -s /sbin/nologin -M

    改变目录权限

    [root@Client ~]# chown -R rsync.rsync /backup   

    配置密码文件

    [root@Client ~]# echo "rsync_backup:rsync.conf">>/etc/rsync.password

    [root@Client ~]# cat /etc/rsync.password                            

    rsync_backup:rsync.conf

    改变密码文件权限

    [root@Client ~]# chmod 600 /etc/rsync.password 

    [root@Client ~]# ls -ld /etc/rsync.password 

    -rw-------. 1 root root 24 Sep  9 13:06 /etc/rsync.password

    格式化文件

    [root@Client ~]# dos2unix /etc/rsyncd.conf 

    dos2unix: converting file /etc/rsyncd.conf to UNIX format ...

    开启服务后台运行

    [root@Client ~]# rsync --daemon

    [root@Client ~]# netstat -lntup|grep rsync

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

    tcp 0 0 :::873 :::*       LISTEN   2002/rsync

    五:主服务器上配置密码文件

    [root@Master ~]# echo "rsync.conf">>/etc/rsync.password

    [root@Master ~]# cat /etc/rsync.password

    rsync.conf

    [root@Master ~]# chmod 600 /etc/rsync.password

    [root@Master ~]# ls -ld /etc/rsync.password

    -rw-------. 1 root root 11 Sep  8 06:25 /etc/rsync.password

    六:测试手工同步

    [root@Master /]# rsync -avzP /etc/hosts rsync_backup@192.168.1.3::rsync --password-file=/etc/rsync.password

    sending incremental file list

    hosts

    158 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)

    sent 120 bytes  received 27 bytes  26.73 bytes/sec

    total size is 158  speedup is 1.07

    [root@Master /]# cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    [root@Client ~]# cat /backup/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    经过对比两边数据一致,表明同步成功,手工同步成功之后,然后再进行后面的配置

    七:安装sersync服务

    首先下载好安装软件

    sersync_64bit_binary_stable_final.tar.gz

    [root@Master tools]# tar -zxvf sersync_64bit_binary_stable_final.tar.gz -C

    /usr/local/

    GNU-Linux-x86/

    GNU-Linux-x86/sersync2

    GNU-Linux-x86/confxml.xml

    [root@Master tools]# cd /usr/local/

    [root@Master local]# ls

    bin  games   include  lib64    sbin   src

    etc  GNU-Linux-x86  lib   libexec  share

    GNU-Linux-x86就是sersync安装软件,为了方便将它改名

    [root@Master local]# mv GNU-Linux-x86 sersync

    为了后续方便管理,创建几个目录用于存放各类文件

    [root@Master sersync]# mkdir -p conf bin logs

    [root@Master sersync]# mv confxml.xml conf

    [root@Master sersync]# ls

    bin  conf  logs  sersync2

    [root@Master sersync]# cd conf

    [root@Master conf]# ls

    confxml.xml

    在配置配置文件之前备份

    [root@Master conf]# cp confxml.xml confxml.xml.$(date +%F)

    [root@Master conf]# ls

    confxml.xml  confxml.xml.2016-09-08

    修改配置文件内容(confxml.xml)

    1、修改24-28行

    <localpath watch="/opt/tongbu">

                <remote ip="127.0.0.1" name="tongbu1"/>

                <!--<remote ip="192.168.8.39" name="tongbu"/>-->注释内容

                <!--<remote ip="192.168.8.40" name="tongbu"/>-->注释内容

            </localpath>

    修改后的内容为

     <localpath watch="/opt/backup"> 本地数据的路径

                <remote ip="192.168.1.3" name="rsync"/>远端IP与模块名称

                    </localpath>

        <!#################################### -->注释内容

    2、修改31-34行内容——认证

    <commonParams params="-artuz"/>

    <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>

    <userDefinedPort start="false" port="874"/><!-- port=874 -->

    <timeout start="false" time="100"/><!-- timeout=100 -->

    <ssh start="false"/>

    修改后的内容为

    <commonParams params="-aruz"/>

    <auth start="true" users="rsync_backup"  passwordfile="/etc/rsync.password"/>

    <userDefinedPort start="false" port="874"/><!-- port=874 -->

    <timeout start="true" time="100"/><!-- timeout=100 -->

    <ssh start="false"/>

    3、修改36-37行

    <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default

     every 60mins execute once-->

    修改成我们刚刚创建好的logs目录

    <failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecut

    e="60"/><!--default every 60mins execute once-->

    修改完成后最终的配置文件如下

    [root@Master conf]# cat /usr/local/sersync/conf/confxml.xml

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <head version="2.5">

        <host hostip="localhost" port="8008"></host>

        <debug start="false"/>

        <fileSystem xfs="false"/>

        <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="/opt/backup">

                <remote ip="192.168.1.3" name="rsync"/>

            </localpath>

                <!#################################### -->

            <rsync>

                <commonParams params="-aruz"/>

                <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>

                <userDefinedPort start="false" port="874"/><!-- port=874 -->

                <timeout start="true" time="100"/><!-- timeout=100 -->

                <ssh start="false"/>

            </rsync>

            <failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

            <crontab start="false" schedule="600"><!--600mins-->

                <crontabfilter start="false">

                    <exclude expression="*.php"></exclude>

                    <exclude expression="info/*"></exclude>

                </crontabfilter>

            </crontab>

            <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>

    八:开启sersync守护进程

    首先配置全局环境变量,使得后同可以直接调用sersync命令

    [root@Master conf]# echo 'export PATH=$PATH:/usr/local/sersync/bin'>>/etc/profile

    [root@Master conf]# tail -1 /etc/profile

    export PATH=$PATH:/usr/local/sersync/bin

    [root@Master conf]# source /etc/profile

    [root@Master conf]# which sersync

    /usr/local/sersync/bin/sersync

    启动sersync服务

    serync -r -d -o /usr/local/sersync/conf/confxml.xml

    -r初始化数据  

    -d后台启动 

    -o指定路径

    如果需要将命令开启动,只需将命令去掉参数-r定入/etc/rc.local

    启动后结果如下

    [root@Master backup]# sersync -r -d -o /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: -r rsync all the local files to the remote servers before the sersync work

    option: -d    run as a daemon

    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 /opt/backup && rsync -aruz -R --delete ./  --timeout=100 rsync_backup@192.168.1.3::rsync --password-file=/etc/rsync.password >/dev/null 2>&1 

    run the sersync: 

    watch path is: /opt/backup

    九:测试数据同步

    [root@Master sersync]# cd /opt/backup/

    [root@Master backup]# ls

    [root@Master backup]# ls -ll

    total 0

    [root@Master backup]# touch 123

    [root@Master backup]# touch 1234

    [root@Master backup]# touch 1235

    [root@Master backup]# touch 12333

    [root@Master backup]# ls -ll

    total 0

    -rw-r--r--. 1 root root 0 Sep  8 09:26 123

    -rw-r--r--. 1 root root 0 Sep  8 09:26 12333

    -rw-r--r--. 1 root root 0 Sep  8 09:26 1234

    -rw-r--r--. 1 root root 0 Sep  8 09:26 1235

    目标服务器查看同步情况

    [root@Client backup]# ls -ll

    total 0

    -rw-r--r--. 1 rsync rsync 0 Sep  8 04:26 123

    -rw-r--r--. 1 rsync rsync 0 Sep  8 04:26 12333

    -rw-r--r--. 1 rsync rsync 0 Sep  8 04:26 1234

    -rw-r--r--. 1 rsync rsync 0 Sep  8 04:26 1235

    测试结果表明数据同步正常,能够实时同步

  • 相关阅读:
    安装设置Android Studio Win7安装
    执行对象cocos2dx 2.x action动作整理集合
    查询生成三大框架整合 提示 不能进行查询错误
    一些链接
    成员函数指针与高性能的C++委托
    举例说明Linux不同网段访问的设置办法
    ubuntu 服务管理
    Ubuntu之开机检测硬盘
    Ubuntu 10.04开启字符模式并设置静态IP
    Ubuntu终端ssh连接服务器慢的解决方法
  • 原文地址:https://www.cnblogs.com/liujiacai/p/8503735.html
Copyright © 2011-2022 走看看