zoukankan      html  css  js  c++  java
  • rsync 服务快速部署手册

    来源:https://www.cnblogs.com/miclesvic/p/6189540.html

    一、rsync服务端安装

    1、查看rsync安装包

    # rpm -qa rsync
    rsync-3.0.6-12.el6.x86_64

    2、安装rsync

    系统默认都会安装rsync软件包的,如果查看发现没有安装,执行yum安装即可
    # yum install rsync -y

    3、添加rsync服务的用户,管理本地目录的

    # useradd -s /sbin/nologin -M rsync
    # id rsync

    4、生成rsyncd.conf配置文件

    复制代码
    # cat /etc/rsyncd.conf
    #rsync_config______________________start
    #created by oldboy 15:00 2016-11-15
    ##rsyncd.conf start##
    uid = rsync                         # 用户 远端的命令使用rsync访问共享目录
    gid = rsync                         # 用户组                        
    use chroot = no                     # 安全相关
    max connections = 200               # 最大连接数
    timeout = 300                       # 超时时间
    pid file = /var/run/rsyncd.pid      # 进程对应的进程号文件
    lock file = /var/run/rsyncd.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]                            # 模块名称
    path = /backup                      # 服务端提供访问的目录
    
    [nfsbackup]
    path = /nfsbackup
    #rsync_config______________________end
    复制代码

    5、根据rsyncd.conf的auth users配置帐户,远程连接的,并根据secrets file 参数生成密码文件。

    # echo "rsync_backup:hkrt" > /etc/rsync.password
    # cat /etc/rsync.password
    rsync_backup:hkrt

    6、为密码文件配置权限

    # chmod 600 /etc/rsync.password
    # ls -l /etc/rsync.password
    -rw------- 1 root root 20 Nov 15 23:35 /etc/rsync.password

    7、创建共享目录并授权rsync服务管理

    # mkdir /backup -p
    # chown -R rsync.rsync /backup

    8、启动rsync服务并检查

    # rsync --daemon
    # ps -ef | grep rsync|grep -v grep
    # lsof -i:873

    9、加入开机自启动

    # echo "/usr/bin/rsync --daemon" >> /etc/rc.local
    # tail -1 /etc/rc.local

    二、rsync客户端

    1、查看rsync安装包

    # rpm -qa rsync
    rsync-3.0.6-12.el6.x86_64

    2、安装rsync

    系统默认都会安装rsync软件包的,如果查看发现没有安装,执行yum安装即可
    # yum install rsync -y

    3、添加rsync服务的用户,管理本地目录的

    # useradd -s /sbin/nologin -M rsync
    # id rsync

    4、生成连接服务器需要的密码文件

    # echo "hkrt" > /etc/rsync.password
    # cat /etc/rsync.password
    hkrt

    5、为密码文件配置权限

    # chmod 600 /etc/rsync.password
    # ls -1 /etc/rsync.password
    -rw------- 1 root root 7 Nov 15 23:48 /etc/rsync.password

    6、同步文件语法

    基于rsync daemon同步语法:
    
    拉取: 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

    7、测试手动推送是否正常

    复制代码
    [root@nfs01 backup]# pwd
    /backup
    
    [root@nfs01 backup]# ls
    a.txt  c.txt  e.txt  g.txt  i.txt  k.txt  m.txt  o.txt  q.txt  s.txt  u.txt  w.txt  y.txt
    b.txt  d.txt  f.txt  h.txt  j.txt  l.txt  n.txt  p.txt  r.txt  t.txt  v.txt  x.txt  z.txt
    
    # rsync -avz /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password    # 执行手动推送
    sending incremental file list
    ./
    a.txt
    b.txt
    c.txt
    d.txt
    e.txt
    f.txt
    g.txt
    h.txt
    i.txt
    j.txt
    k.txt
    l.txt
    m.txt
    n.txt
    o.txt
    p.txt
    q.txt
    r.txt
    s.txt
    t.txt
    u.txt
    v.txt
    w.txt
    x.txt
    y.txt
    z.txt
    
    sent 1229 bytes  received 505 bytes  3468.00 bytes/sec
    total size is 0  speedup is 0.00
    从结果看:应该是同推送成功了,我们到rsync daemon服务器来查看下,是不是已经同步完成了啊。
    [root@backup backup]# pwd
    /backup
    
    [root@backup backup]# ls
    a.txt  c.txt  e.txt  g.txt  i.txt  k.txt  m.txt  o.txt  q.txt  s.txt  u.txt  w.txt  y.txt
    b.txt  d.txt  f.txt  h.txt  j.txt  l.txt  n.txt  p.txt  r.txt  t.txt  v.txt  x.txt  z.txt
     
    我们看到rsync daemon 服务器/backup目录已经有文件同步过来了,说明我们已经配置成功了。接下来我们还会学习下,如何做到实例同步,我会通过rsync+inotify、rsync+serync两种方案来实现数据实时同步!
     
    三、rsync + inotify 实时同步方案
     
    本想新写一篇博文来介绍rsync + inotify实时同步方案了,但是要实现这个方案需要满足以下条件:
    1、rsync daemon安装成功 
    2、rsync 客户端可以正常推送文件到rsync daemon端 
    3、安装配置inotify 
    前两个我们已经配置完成了,下面我们只需要在rsync 客户端安装inotify并配置即可实现实时同步。
     
    1、安装inotify
    # yum install inotify-tools –y

    # inotifywa    # 安装完成后会生成以下两个命令
    inotifywait   inotifywatch

     
    2、执行inotifywait命令监测/data目录是否有变化
    [root@nfs01 scripts]# /usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /data/
     
    3、在/data目录创建测试(hkrt.txt)文件,然后看看inotifywait命令是否监测到了变化
    # pwd
    /data
    # touch hkrt.txt
    
    [root@nfs01 scripts]# /usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete /data/
    /data/hkrt.txt

    4、创建监控脚本

    复制代码
    我们可以看到,在/data目录下创建的hkrt.txt文件,已经被inotifywait命令监测到了。这样inotify就快搞定了,下面我们只需要写个监控脚本就可以了,脚本内容就是监测到了变化,就执行rsync推送文件到备份服务器就好了,下面看下脚本是怎么写的吧! 
    # cat inotify.sh 
    #/bin/bash
    Path=/data
    Ip=172.16.1.41
    /usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete $Path 
    |while read file
      do
        cd $Path && 
        rsync -az ./ --delete rsync_backup@$Ip::nfsbackup --password-file=/etc/rsync.password &
      done
    复制代码

    5、创建启动服务脚本并赋予执行权限

    复制代码
    # cat /etc/init.d/syncd 
    #!/bin/bash
    #chkconfig: 2345 38 46
    . /etc/init.d/functions
    if [ $# -ne 1 ];then
        usage: $0 [start|stop]
        exit
    fi
    
    case "$1" in
    start)
        /bin/bash /root/scripts/inotify.sh &
        echo $$ > /var/run/inotify.pid
        if [ `ps -ef|grep inotify|wc -l` -gt 2 ];then
            action "inotify service is started" /bin/true
        else
            action "inotify service is started" /bin/false
        fi
        ;;
    stop)
        kill -9 `cat /var/run/inotify.pid` > /dev/null 2>&1
        pkill inotifywait
        sleep 2
        if [ `ps -ef|grep inotify|grep -v grep|wc -l` -eq 0 ];then
            action "inotify service is stopped" /bin/true
        else
            action "inotify service is stopped" /bin/false
        fi
        ;;
    *)
        usage: $0 [start|stop]
        exit 1
    esac
     
    # chmod +x /etc/init.d/syncd
    复制代码

    6、添加syncd服务并设置开机自启动

    chkconfig --add syncd
    chkconfig syncd on

    复制代码

    7、启动/停止inotifywait服务

    # /etc/init.d/syncd start
    inotify service is started                                 [  OK  ]
    [root@nfs01 scripts]# /etc/init.d/syncd stop 
    inotify service is stopped                                 [  OK  ]

    8、接下来我们就可以验证实时同步了

    [root@nfs01 data]# pwd
    /data
    [root@nfs01 data]# touch stu{01..10} 
    [root@nfs01 data]# ls
    stu01  stu02  stu03  stu04  stu05  stu06  stu07  stu08  stu09  stu10

    我们到备份服务器看看有没有实时同步过去

    [root@backup nfsbackup]# pwd
    /nfsbackup
    [root@backup nfsbackup]# ls
    stu01  stu02  stu03  stu04  stu05  stu06  stu07  stu08  stu09  stu10

    可以看到,新创建的文件已经被实时同步到备份服备器了,rsync + inotify 实时同步也就部署完成了,可能过程中有些内容写的不是很详细,只是个安装过程,大家需要了解更多的内容,可以参考官方技术文档或查看其它资料。好了,就介绍到这吧。希望大家有所收获。

    四、rsync + sersync 实现实时同步

    实现rsync+sersync实时同步我们继续使用这个环境,所在先要停掉inotify服务。

    [root@nfs01 data]# /etc/init.d/syncd stop
    inotify service is stopped                                 [  OK  ]
    [root@nfs01 local]# chkconfig --list syncd
    syncd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

    如果是新环境,我们就可以直接安装sersync了!

    1、安装sersync,下载后直接使用就可以了,不需要安装,我们先看下目录结构吧,这目录结构是修改过的,如果从官方下载可以会不一样,不过也没有太的区别了,只不过有用的就是这两个文件而已。

    复制代码
    # tree sersync/
    sersync/
    ├── bin
    │   └── sersync2                   # 启动命令
    ├── conf
    │   └── confxml.xml                # 配置文件 (我们主要关注的就是这个文件了)
    └── logs
    复制代码

    2、我们看下配置文件的内容

    复制代码
    # 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>                                  # 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="/data">                                             # 需要同步的路径
                <remote ip="172.16.1.41" name="nfsbackup"/>                       # 指定rsync daemon 备份服务器IP地址、模块名称
                <!--<remote ip="192.168.8.39" name="tongbu"/>-->
                <!--<remote ip="192.168.8.40" name="tongbu"/>-->
            </localpath>
            <rsync>
                <commonParams params="-avz"/>                                     # rsync 参数设置
                <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/> 
                <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="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>
    复制代码

    3、配置密码文件,我们这里使用的环境之前已经配置好了,这里就不在配置了,你应该也会明白吧。我们看下吧,记着修改权限哦!

    [root@nfs01 local]# cat /etc/rsync.password
    oldboy
    [root@nfs01 local]# ll /etc/rsync.password
    -rw------- 1 root root 7 Nov 15 23:48 /etc/rsync.password

    4、启动sersync服务

    复制代码
    [root@nfs01 local]# /usr/local/sersync/bin/sersync2 -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 /data && rsync -avz -R --delete ./ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password >/dev/null 2>&1 
    run the sersync: 
    watch path is: /data
    [root@nfs01 local]# ps -ef | grep sersync
    root      4130     1  0 14:45 ?        00:00:00 /usr/local/sersync/bin/sersync2 -r -d -o /usr/local/sersync/conf/confxml.xml
    root      4146  1949  1 14:45 pts/0    00:00:00 grep sersync
    复制代码

    5、我们验证看看有没有实时同步吧

    在sersync端/data目录下创建几个文件

    [root@nfs01 local]# cd /data/
    [root@nfs01 data]# ls
    [root@nfs01 data]# touch stu{01..05}
    [root@nfs01 data]# ls
    stu01  stu02  stu03  stu04  stu05

    在rsync daemon端查看/nfsbackup目录有没有刚刚创建的文件

    [root@backup nfsbackup]# pwd
    /nfsbackup
    [root@backup nfsbackup]# ls
    stu01  stu02  stu03  stu04  stu05

    可以看到,文件已经同步过来了,说明没有问题了,也达到了实时同步的目的。好的,就介绍到这吧。介绍了两种实时同步的方案。

  • 相关阅读:
    观察是快速成长的一个牛逼技能
    linux下使用lftp的小结(转)
    关于升级cocos2d-x网络库来支持ipv6、https,以及socket怎么支持ipv6
    cocos2dx支持arm64
    android studio 命令行编译cocos 3.15.1 安卓工程
    认识Android.mk和Application.mk
    mac os x下Android Studio3.0 配置本地 Gradle
    图片转成base64编码
    集成pbc
    6、SpringMVC:结果跳转方式 和 数据提交时的处理
  • 原文地址:https://www.cnblogs.com/flzs/p/12177307.html
Copyright © 2011-2022 走看看