zoukankan      html  css  js  c++  java
  • rsync 远程同步服务部署

    iptables -F

    systemctl stop firewalld

    setenforce 0

    配置 rsync 备份源

    yum -y install rsync

    rpm -q rsync

    rsync-3.1.2-4.el7.x86_64

    1、建立/etc/rsyncd.conf配置文件

    vim /etc/rsyncd.conf

    uid = nobody

    gid = nobody

    use chroot = yes

    address = 192.168.200.123

    port = 873

    log file = /var/log/rsyncd.log

    pid file = /var/run/rsyncd.pid

    hosts allow = 192.168.200.0/24

    [wwwroot]

        path = /var/www/html

        comment = Document Root os www.crushlinux.com

        read only = yes

        dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z

        auth users = backuper

        secrets file = /etc/rsyncd_users.db

    注释:

    uid = nobody                                                                     #用户名

    gid = nobody                                                                     #组名

    use chroot = yes                                                               #禁锢在源目录

    address = 192.168.200.123                                             #监听地址

    port = 873                                                                         #监听端口

    log file = /var/log/rsyncd.log                                              #日志文件位置

    pid file = /var/run/rsyncd.pid                                              #存放进程ID文件位置

    hosts allow = 192.168.200.0/24                                        #允许访问的客户端进程

    [wwwroot]                                                                          #共享模块名称

        path = /var/www/html                                                    #源目录的实际路径

        comment = Document Root os www.crushlinux.com   #描述信息

        read only = yes                                                             #是否为只读

        dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z             #同步时不再压缩的文件类型

        auth users = backuper                                                  #备份授权用户

        secrets file = /etc/rsyncd_users.db                               #存放账户信息的数据文件

      基于安全性考虑,对于 rsync 的备份源最好仅允许以只读的方式做下行同步。另外,同步可以采用匿名的方式,只要将其中的 "auth users" 和 "secrets file" 配置记录去掉就可以了。

    2、为备份账户创建数据文件

    vim /etc/rsyncd_users.db

    backuper:pwd123

      以冒号分割,密码信息在文件中以明文方式存放

      备份用户 backuper 也需要对 /var/www/html 有相应的读取权限,实际上只要 other 组具有读取权限,则备份用户 backuper 和运行 nobody 用户也就有读取权限了。

    chmod 755  /var/www/html/

    3、启动rsync服务进程

    rsync --daemon

    启动服务运行命令为"rsync --daemon",以独立监听服务的方式运行,若关闭 rsync 服务可采用kill进程方式

    kill $(cat /var/run/rsyncd.pid)

    服务脚本

    vim /etc/init.d/rsyncd

    #!/bin/bash
    #chkconfig:2345 80 20
    #description:rsync server

    start () {
    netstat -lnpt | grep -q :873
    [ $? -ne 0 ] && rsync --daemon
    }

    stop () {
    netstat -lnpt | grep -q :873
    [ $? -eq 0 ] && kill $(cat /var/run/rsyncd.pid) && rm -rf /var/run/rsyncd.pid
    }

    status () {
    netstat -lnpt | grep -q :873
    [ $? -eq 0 ] && echo "Rsync Daemon is running."
    }

    case $1 in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart|reload)
        $0 stop
        $0 start
    ;;

    status)
        status
    ;;
    *)
        echo "用法:$0{start|stop|restart|reload|status}"
    esac

    chmod +x /etc/init.d/rsyncd

    chkconfig --add rsyncd

    systemctl start rsyncd

    使用 rsync 备份工具 192.168.200.124

     有了同步源服务器之后,就可以使用rsync工具来执行远程同步。接下来的操作都是在客户机(发起端)执行

        本地备份:备份源和发起端可以是一台机器

    rsync /et/fstab /opt/

    rsync -rl /etc/fstab /boot/grub/ /opt/

    rsync的命令格式及备份选项:

    命令格式:rsync[选项]... 原始位置 目标位置

    -r:递归模式,包含目录及子目录中所有文件

    -l:对于符号链接文件依然复制为符号链接文件

    -p:保留文件的权限标记

    -t:保留文件的时间标记

    -g:保留文件的属组标记(仅超级用户使用)

    -o:保留文件的属主标记(仅超级用户使用)

    -D:保留设备文件及其他特殊文件

    -a:归档模式,递归并保留对象属性,等同于 -rlptgoD

    -v:显示同步过程的详细(verbose)信息

    -z:在传输文件时进行压缩(compress)

    -H:保留硬链接文件

    -A:保留ACL属性信息

    --delete:删除目标位置有而原始位置没有的文件

    --checksum:根据对象的校验和来决定是否跳过文件

    备份源的表示方法:

        在执行远程同步任务时,rsync命令需要指定备份源服务器中的资源位置。rsync同步源的资源表示方式有两种:

            用户名@主机地址::共享模块名称

            rsync://用户名@主机地址/共享模块名称

    rsync -avz backuper@192.168.200.123::wwwroot /root

    rsync -avz rsync://backuper@192.168.200.123/wwwroot /root

    rsync备份源的无交互验证方式

    1、通过export RSYNC_PASSWORD变量保存密码,rsync命令执行时可以自动读取该变量的值,在需要时发送给rsync服务器来进行验证  

    export RSYNC_PASSWORD=pwd123

    rsync -avzH --delete backuper@192.168.200.123::wwwroot /myweb

    2、通过 --password-file选项指定存储密码的文件

    vim /etc/server.pass

    pwd123

    chmod 600 /etc/server.pass

    rsync -avzH --delete --password-file=/etc/server.pass rsync://backuper@192.168.200.123/wwwroot /myweb

    相对于SSH源的免交互措施来说,使用变量存放密码显得不够安全,因此可在脚本中使用,并将脚本的权限严格控制,避免密码泄露。

    配置rsync+inotify实时同步

      Linux从2.6.13版内核开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件的存取,删除,移动,修改内容及属性等。利用这个机制,可以实现文件异动警告,增量备份,针对目录或文件的变化及时做出相应。

      将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份,否则处于静默等待模式,避免了按固定周期备份时存在的延迟性,周期过密等问题

      正因为inotify通知机制由Linux内核提供,因此inotify主要做本机监控,在触发式备份应用中更适合上行同步

    1、调整inotify内核参数

    在Linux内核中,默认的inotify机制提供了三个调控参数:

    cat /proc/sys/fs/inotify/max_queued_events         //表示监控事件队列(16384)

    cat /proc/sys/fs/inotify/max_user_instance           //最多监控实例数(128)

    cat /proc/sys/fs/inotify/max_user_watches           //每个实例最多监控文件数(8192)

    当要监控的目录,文件数量较多或者变化频繁时,建议加大这三个参数的值

    vim /etc/sysctl.conf

    fs.inotify.max_queued_events = 16384

    fs.inotify.max_user_instance = 1024

    fs.inotify.max_user_watches = 1048576

    sysctl -p

    安装 inotify-tools

    inotify-tools 主要提供inotifywait,inotifywatch等工具,用来监控,汇总改动情况

    官方站点:http://inotify-tools.sourceforge.net

    tar xf inotify-tools-3.14.tar.gz

    cd inotify-tools-3.14

    ./configure && make && make install

      以监控网站目录 /var/www/html 为例,执行inotifywait命令后,在另外一个终端中改动 /var/www/html 目录下的内容

    mkdir -p /var/www/html

    inotifywait -mrq -e modify,create,move,delete,attrib /var/www/html/

    -e    指定要监控的事件

    -m   表示持续监控

    -r     表示递归整个目录

    -q    简化输出信息 

    编写触发式同步脚本 

       inotifywait 输出的监控结果中,每行记录中包括目录,事件,文件。据此可以识别变动情况。为了简单,只要检测到变动时执行rsync上行同步操作即可

     注意:当更新较频繁时,避免并发执行rsync备份,若rsync进程已经存在则忽略本次同步,或者根据rsync进程数量(取决于实际任务)来决定是否同步。

     vim /etc/rsyncd.conf

    uid = nobody

    gid = nobody

    use chroot = yes

    address = 192.168.200.123

    port = 873

    log file = /var/log/rsyncd.log

    pid file = /var/run/rsyncd.pid

    hosts allow = 192.168.200.0/24

    [wwwroot]

        path = /var/www/html

        comment = Document Root os www.crushlinux.com

        read only = no

        dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z

        auth users = backuper

        secrets file = /etc/rsyncd_users.db

     kill $(cat /var/run/rsyncd.conf)

    rsync --daemon

    chown nobody:nobody /var/www/html/

    vim /opt/inotify_rsync.sh

    #!/bin/bash

    INOTIFY_CMD="inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html/"

    RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.200.123::wwwroot"

    $INOTIFY_CMD | while read DIRECTORY EVENT FILE

    do

        if [ $(pgrep rsync | wc -l) -le 0 ]

          then

            $RSYNC_CMD  

        fi

    done

    echo "/bin/bash /opt/inotify_rsync.sh" >> /etc/rc.local

    脚本用来测试本机 /var/www/html 目录的变动,一旦有更新立刻触发 rsync 同步操作,上传至服务器192.168.200.123的 /var/www/html 目录下。

    触发式上行同步的验证操作如下:

    1、在本机运行 inotify_rsync.sh 脚本

     bash /opt/inotify_rsync.sh

    2、在本机的 /var/www/html 目录下,执行创建,删除,修改等操作

    mkdir /var/www/html/aa

    mv /var/www/html/aa /var/www/html/aaa

    touch /var/www/html/abc.txt

    3、查看服务器中的 /var/www/html 目录中的变化

    ls /var/www/html/

    aaa abc.txt bb

    配置 SSH 备份源

     优点:远程连接安全,增强备份的保密性,容易实现

     下载:在下行同步中,备份源负责提供文档的原始位置,发起端应对文件具有读取权限

     上传:在上行同步中,备份源负责提供文档的目标位置,发起端应对文件具有写入权限

     配置过程

     a、确认备份源文件夹位置

     b、准备备份操作用户

     案例

     192.168.200.123机器的网站目录 /var/www/html 作为备份源

    用户down做下行(下载)备份

     用户up做上行(上传)备份

     192.168.200.123:

    yum -y install httpd rsync 

    useradd up

    echo "123456" | password --stdin up

    useradd down

    echo "123456" | password --stdin down

    vim /etc/ssh/sshd_config

    122 UseDNS no          //关闭UseDNS加速SSH登录

    systemctl restart sshd

      调整 /var/www/html 目录权限,使down用户有读取权限,up用户有写入权限,建议将目录的属主修改为备份用户,另外需要为 web 服务的运行用户指定额外的权限

    chown -R up:up /var/www/html/

    setfacl -R -m user:apache:rwx /var/www/html/

    getfacl /var/www/html/

    acl访问控制机制参数详解

     setfacl         设置acl权限 

     getfacl         查看acl权限

        -R            递归   

        -m            制定权限

        -x             个别删除 

        -b             全部删除

    注意:下面两行不需要执行,作为了解

     setfacl -R -b /var/www/html                                      表示删除所有ACL属性

     setfacl -R -x user:apache /var/www/html/                 只删除某一项ACL属性

     凡是以后在 /var/www/html/upload/ 新建立的文档,apache用于都具有 rwx 权限

    setfacl -m default:user:apache:rwx /var/www/html/ 

    getfacl /var/www/html/ | grep default

     SSH备份源表示方式:

    用户名@主机地址:目标路径

    访问SSH备份源,下载到本地 /opt/ 目录

    rsync -avz down@192.168.200.123:/var/www/html/ /opt/

     下行同步 ssh 备份源

    将服务器A的 /var/www/html 文件夹与B本地 /wwwroot 文件夹同步(保持文件权限属性,软硬链接,ACL属性,删除 /wwwroot 中多余文件,传输过程进行加密)

    mkdir -p /wwwroot

    rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot 

     对于同一项远程同步任务,再次执行时,自动做增量更新,同名的文件将不再重复复制

    192.168.200.123:

    cd /var/www/html/

    for i in {1..10};do touch $i.txt;done

    192.168.200.124:

    rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot

    上行同步 ssh 备份源

      将客户机中的anaconda-ks.cfg文件上传到备份源服务器的 /var/www/html 目录下,由于用户是up并非

    root 用户,因此 -g -o 等选项无法使用

     cd /root

     rsync -rlvz --delete anaconda-ks.cfg up@192.168.200.123:/var/www/html

     ssh备份源的无交互验证,由于脚本根据 crond 时间来执行,用户没办法按时根据提示输入密码

    192.168.200.124 主机上创建密钥对,将公钥文件发给192.168.200.123服务器中的备份用户,实现无交互登录

    创建密钥对:

    ssh-keygen -t rsa

    复制密钥对:

    ssh-copy-id up@192.168.200.123

    ssh-copy-id down@192.168.200.123

    连接测试

    ssh down@192.168.200.123

    ssh up@192.168.200.123

    rsync -avzH --delete down@192.168.200.123:/var/www/html/ /wwwroot

    Sersync+Rsync 实现数据文件实时同步 

     rsync+inotify-tools与rsync+sersync架构的区别

     1、rsync+inotify-tools

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

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

    2、rsync+sersync

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

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

    同步过程:

    1、在源数据服务器上开启 sersync 服务,sersync 负责监控配置路径中的文件系统事件变化;

    2、调用 rsync 命令把更新的文件同步到目标服务器;

    3、需要在源数据服务器配置 sersync ,在同步目标服务器配置 rsync server

    同步原理:

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

    2、此时需要在源数据服务器上配置 sersync 服务;

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

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

    CentOS 7 192.168.200.111 (Rsync server)

    CentOS 7 192.168.200.112 (Sersync server)

    先安装Rsync

    yum -y install rsync httpd

    vim /etc/rsyncd.conf

    uid = root

    gid = root

    use chroot = yes

    max connections = 100    #最大连接数

    timeout = 600                   #超时时间

    ignore errors                    #忽略错误

    list = false                        #不显示服务端资源列表

    address = 192.168.200.111

    port = 873

    log file = /var/log/rsyncd.log

    pid file = /var/run/rsyncd.pid

    hosts allow = 192.168.200.0/24

    [wwwroot]

        path = /var/www/html

        comment = Document Root os www.crushlinux.com

        read only = no

        dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z

        auth users = backuper

        secrets file = /etc/rsyncd_users.db

    基于安全性考虑,对于 rsync 的备份源最好仅允许以只读的方式做下行同步。另外,同步可以采用匿名的放式,只要将其中的"auth users "和"secrets file" 配置记录去掉就可以了

    为备份账户创建数据文件

    vim /etc/rsyncd_users.db

    backuper:pwd123

      以冒号分割,密码信息在文件中以明文方式存放

      备份用户 backuper 也需要对 /var/www/html 有相应的读取权限,实际上只要 other 组具有读取权限,则备份用户 backuper 和运行 nobody 用户也就有读取权限了。

    chmod 755  /var/www/html/

    启动rsync服务进程

    rsync --daemon

    启动服务运行命令为"rsync --daemon",以独立监听服务的方式运行,若关闭 rsync 服务可采用kill进程方式

    在数据源端创建密码文件,然后在 rsync 命令中使用 rsync --password-file 指定该文件

    echo "pwd123" > /etc/server.pass

    chmod 600 /etc/server.pass

    rsync -az --delete --password-file = /etc/server.pass /etc/hosts

    测试这步一定要成功发,不然进行不了下一步

    部署 Sersync 服务

    下载 sersync:

    goodle code 地址:https://code.qooqle.com/archive/p/sersync/downloads

    Git Hub 镜像地址:https://github.com/orangle/sersync

    tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/

    cd /usr/local/

    mv GNU-Linux-x86/ sersync

    cd sersync/

    cp confxml.xml confxml.xml.$(date +%F)

    vim confxml.xml          #修改24、25行

    <sersync>

        <localpath watch="/var/www/html">      # 本地同步目录

        <remote ip="192.168.200.111" name="wwwroot" />      # rsync 模块名

    #  修改31行

    <rsync>

        <commonParams params="-artuz" />

        <auth start="true" users="backuper" passwordfile="/etc/server.pass" />

    开启 sersync 守护进程 同步数据

    yum -y install httpd

    ./sersync2 -d -r -o /usr/local/sersync/confxml.xml

  • 相关阅读:
    (转)测试经验交流
    关于软件质量和软件测试的一点点看法 (转)
    提取Chrome插件为crx文件
    [转]用星际快速入门PHP面向对象编程
    函数式编程js学习的进阶
    asp.net程序就是IIS的插件
    文档单一化、版本化
    NuGet
    Linux服务器程序编程的几个坎
    webform也是一种mvc
  • 原文地址:https://www.cnblogs.com/2567xl/p/11819367.html
Copyright © 2011-2022 走看看