zoukankan      html  css  js  c++  java
  • Rsync+Sersync同步

    Rsync+Sersync同步特点:

    (1):sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;
    (2):rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此效率很高。


    rsync+sersync自动同步实验:

    操作系统:CentOS 5.8

    目标服务器:10.10.2.192 (rsync的server)

    源服务器:10.10.2.191 (rsync的client) 



    在目标服务端(10.10.2.192)rsync的server端操作:

    1.关闭SELINUX

    vi /etc/selinux/config   #编辑防火墙配置文件
    #SELINUX=enforcing   #注释掉
    #SELINUXTYPE=targeted   #注释掉
    SELINUX=disabled   #增加
    :wq!   #保存,退出
    setenforce 0 #立即生效 

    2.开启防火墙tcp 873端口(Rsync默认端口)

    vi /etc/sysconfig/iptables   #编辑防火墙配置文件
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
    :wq!   #保存退出
    /etc/init.d/iptables restart   #最后重启防火墙使配置生效

    3.安装rsync服务端软件

    在10.10.2.192上安装rsync软件:

    yum install rsync xinetd   #安装rsync和xinetd软件
    vi /etc/xinetd.d/rsync   #编辑配置文件,设置开机启动rsync
    disable = no   #修改为no
    :wq!   #保存退出
    /etc/init.d/xinetd start   #启动(CentOS中是以xinetd来管理Rsync服务的)
    LANG=en   #如果出现中文乱码,更改支持语言 

    4.创建rsyncd.conf

    vi /etc/rsyncd.conf    #创建配置文件
    log file = /var/log/rsyncd.log    #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
    pidfile = /var/run/rsyncd.pid    #pid文件的存放位置
    lock file = /var/run/rsync.lock   #支持max connections参数的锁文件
    secrets file = /etc/rsync.pass   #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
    motd file = /etc/rsyncd.Motd   #rsync启动时欢迎信息页面文件位置(文件内容自定义)
    [centos]     #自定义模块名称
    path = /home/share     #rsync服务端数据目录路径
    comment = centos     #模块名称与centos自定义名称相同
    uid = root     #设置rsync运行权限为root
    gid = root   #设置rsync运行权限为root
    port = 873   #默认端口
    use chroot = no   #默认为true,修改为no,增加对目录文件软连接的备份
    read only = no   #设置rsync服务端文件为读写权限
    list = no   #不显示rsync服务端资源列表
    max connections = 200     #最大连接数
    timeout = 600             #设置超时时间
    auth users = root,admin,centos   #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
    hosts allow = 10.10.2.192   #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
    hosts deny = 10.10.2.59   #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开

    5.创建用户认证文件

    vi /etc/rsync.pass 
    centos:123456   #格式,用户名:密码,可以设置多个,每行一个用户名:密码
    root:root123
    admin:root123
    :wq! 

    6.设置文件权限:

    chmod 600 /etc/rsyncd.conf 
    chmod 600 /etc/rsync.pass 

    7.启动rsync:

    /etc/init.d/xinetd start #启动
    service xinetd stop #停止
    service xinetd restart #重新启动


    在源服务端(10.10.2.191)上操作:

    1.关闭SELINUX

    vi /etc/selinux/config   #编辑防火墙配置文件
    #SELINUX=enforcing   #注释掉
    #SELINUXTYPE=targeted   #注释掉
    SELINUX=disabled   #增加
    :wq!   #保存,退出
    setenforce 0 #立即生效

    2.开启防火墙tcp 873端口(Rsync默认端口)

    vi /etc/sysconfig/iptables   #编辑防火墙配置文件
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
    :wq!   #保存退出
    /etc/init.d/iptables restart   #最后重启防火墙使配置生效

    3.安装rsync客户端软件:

    yum install rsync xinetd #安装rsync和xinetd软件
    vi /etc/xinetd.d/rsync #编辑配置文件,设置开机启动rsync
    disable = no #修改为no
    /etc/init.d/xinetd start #启动(CentOS中是以xinetd来管理rsync服务的)

    4.创建认证密码文件

    vi /etc/passwd.txt 
    123456 
    :wq!
    chmod 600 /etc/passwd.txt #设置文件权限 

    5.测试源服务器10.10.2.191到目标服务器10.10.2.192之间数据同步:

    mkdir -p /home/share/test #在源服务器10.10.2.191上创建测试文件夹,然后运行下面命令:
    rsync -avH --port=873 --progress --delete /home/share/ centos@10.10.2.192::centos --password-file=/etc/passwd.txt
    ##同步本地目录至server
    rsync -avH --port=873 --progress --delete centos@10.10.2.192::centos --password-file=/etc/passwd.txt /home/share/ 
    ##同步server端目录至本地

    6.编辑脚本

    vim rsync.sh
    
    #!/bin/bash
    rsync -avH --port=873 --progress --delete centos@10.10.2.192::centos --password-file=/etc/passwd.txt /home/share/ 
    #description: update Server to Local.
    
    #rsync -avH --port=873 --progress --delete /home/share/ centos@10.10.2.192::centos --password-file=/etc/passwd.txt
    #description: update Local to Server.

     



     

    在rsync的client端10.10.2.191上安装sersync软件,实时出发rsync进行同步

    1.查看服务器内核是否支持inotify

    ll /proc/sys/fs/inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify
    -rw-r--r-- 1 root root 0 Mar 7 02:17 max_queued_events
    -rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_instances 
    -rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_watches
    
    备注:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核
    CentOS 5.X 内核为2.6.18,默认已经支持inotify

    2.修改inotify默认参数(inotify默认内核参数值太小)

    修改参数:
    sysctl -w fs.inotify.max_queued_events="99999999"
    sysctl -w fs.inotify.max_user_watches="99999999"
    sysctl -w fs.inotify.max_user_instances="65535"
    
    vi /etc/sysctl.conf #添加以下代码
    fs.inotify.max_queued_events=99999999 
    fs.inotify.max_user_watches=99999999
    fs.inotify.max_user_instances=65535
    :wq! #保存退出
    
    参数说明:
    max_queued_events:
    inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
    max_user_watches:
    要同步的文件包含多少目录,可以用:find /home/www.osyunwei.com -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www.osyunwei.com为同步文件目录)
    max_user_instances:
    每个用户创建inotify实例最大值

    3.安装sersync

    上传sersync2.5.4_64bit_binary_stable_final.tar.gz到/usr/local/src目录下
    
    cd /usr/local/src
    tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz #解压
    mv GNU-Linux-x86 /usr/local/sersync #移动目录到/usr/local/sersync

    4.配置sersync

    cd  /usr/local/sersync #进入sersync安装目录
    cp confxml.xml confxml.xml-bak  #备份原文件
    
    vim 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="/home/share">       #源服务器同步目录    
            <remote ip="10.10.2.192" name="centos"/>        ip #目标服务器IP地址    name #目标服务器rsync同步目录模块名称
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
        </localpath>
        <rsync>
            <commonParams params="-avH"/>     #rsync后接的参数
            <auth start="true" users="centos" passwordfile="/etc/passwd.txt"/>    #目标服务器rsync同步用户名   #目标服务器rsync同步用户的密码在源服务器的存放路径
            <userDefinedPort start="false" port="874"/><!-- port=874 -->
            <timeout start="false" time="100"/><!-- timeout=100 -->
            <ssh start="false"/>
        </rsync>
        <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->     #脚本运行失败日志记录
        <crontab start="true" schedule="600"><!--600mins-->       #设置为true,每隔600分钟执行一次全盘同步  
            <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>

    5.设置sersync监控开机自动执行

    vim /etc/rc.d/rc.local #编辑,在最后添加一行
    /usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml #设置开机自动运行脚本
    :wq! #保存退出

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

    vim  /check_sersync.sh  #编辑,添加以下代码
    
    #!/bin/bash
    
    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
    :wq!  #保存退出
    
    chmod +x check_sersync.sh 
    vim /etc/crontab 
    */5 * * * * root /root/check_sersync.sh > /dev/null 2>&1  #每隔5分钟执行一次脚本
    :wq!
    service crond reload  #重新加载服务

    7.测试sersync实时触发rsync同步脚本是否正常运行

    在源服务器10.10.2.191的/home/share目录下新建文件夹test
    mkdir /home/share/test

    然后重启10.10.2.191服务器
    等系统启动之后,查看10.10.2.192的/home/share下是否有test文件夹

      

  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/ping-y/p/5825655.html
Copyright © 2011-2022 走看看