zoukankan      html  css  js  c++  java
  • rsyn远程自动同步

      rsync是远程自动同步工具,同时也能实现本地文件的复制,能够实现cp ,scp的功能,但是在远程同步上rsync要scp高效,因为scp能实现增量传输,每次都得全量传输,如果传输大文件时会很消耗网络带宽(虽然scp可以进行限速传输【scp  -l 】), rsync可以实现增量同步传输,在第一次全量同步后,可以设定定时同步任务进行增量同步。

      

      一般场景下,通过rsync可以结合crontab实现按时自动备份,在远程自动同步的场景下,rsync 需要以守护进程的方式来运行,本文记录实现异地自动备份的过程。

    生产服务器主机A的地址:192.168.214.190  :centos7.4

    备份数据主机B的地址:192.168.214.187     :centos6.9

      客户端和服务端都要安装rsync,安装完后有些系统不会生成rsyncd.conf,需要自己创建在 /etc/rsync.d/rsyncd.conf

    【在centos7.4上安装rsync会默认生成/etc/rsyncd.conf文件,但是在centos6.9上安装后则不会生成,并且,如果在要自己定义文件位置,以守护进程方式启动,那么任然要在/etc/下新建一个rsyncd.conf的文件,否则无法启动。】

      服务端安装rsync:

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

      创建配置文件

    [root@yufu ~]# mkdir -p /etc/rsync.d
    [root@yufu ~]# touch /etc/rsync.d/rsyncd.conf
    [root@yufu ~]# chmod 600 /etc/rsync.d/rsync.conf

      编辑配置文件内容

    vim /etc/rsync.d/rsyncd.conf
    
    log file = /var/log/rsyncd.log     #设置日志文件路径
    pid file = /var/run/rsyncd.pid    #设置pid进程位置
    lock file = /var/run/rsync.lock   #锁文件存放位置
    
    [bak]                   #定义一个模块
    path=/opt/server            #要同步文件的位置
    uid = root               #运行rsync的用户
    gid = root               #运行rsync的用户组
    ignore = errors            #忽略一些非关键的错误
    read only = no             #no表示允许可读可写,yes表示客户端只能读,
    write only = no            #no表示允许客户端可以下载文件,设置yes则不能下载
    host allow = *             #允许连接的主机, ‘*’ 表示允许任何主机连接,或者定义一个网段
    max connections = 5          #设置允许连接到主机的最大连接数
    host deny = 192.168.22.21      #禁止连接的服务器
    list = false              #禁止显示列表模块
    auth users = feng           #连接该模块的用户,多个用户用空格或逗号分开
    secrets file = /etc/rsync.d/server.pass    #创建并指定一个包含“用户名:密码”格式的文件,用户名就是auth users定义的用户,
    该用户与linux系统用户无关,文件名称,位置自定义设置,

         添加备份用户的用户密码文件,并修改文件权限

    echo 'filebak:filebak' > /etc/rsync.d/server.pass
    chmod 600 server.pass

      服务端的rsync安装配置好后就可启动了,rsync是以守护进程的方式启动:

    [root@localhost ~]#rsync --daemon --config=/etc/rsync.d/rsyncd.conf 
    
    [root@localhost ~]#ps -ef | grep rsync
    root      2356     1  0 17:29 ?        00:00:00 rsync --daemon --config=/etc/rsync.d/rsyncd.conf
    root      2361  1965  0 17:29 pts/1    00:00:00 grep --color=auto rsync

      到此服务端的的设置完成,接着安装客户端,在备份主机上不用做任何设置,只要安装rsync服务和设置crontab任务计划就可以, 为了在同步的过程中不用输入密码,因此需要在备份主机上创建一个secrets 文件,该文件内容是服务端的rsyncd.conf中“auth users”指定的用户的密码;这个文件名和路径随意指定,只要在执行同步指令时指定即可。

      安装rsync

    yum install rsync -y

      向客户端添加同步用户的密码

    [root@yufu ~]# echo 'fsz...' > /etc/rsync.d/feng.pass
    
    [root@yufu ~]# chmod 600 /etc/rsync.d/feng.pass 

         在客户端执行同步

    [root@yufu ~]# rsync -arzvtopg --delete feng@192.168.214.190::bak /opt/app/ --password-file=/etc/rsync.d/feng.pass 
    rsync: failed to connect to 192.168.214.190: No route to host (113)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]

         执行报错:原因是服务端的防火墙没有放行策略,关闭防火墙;

    [root@localhost ~]#systemctl stop firewalld

         再执行:

    [root@yufu ~]# rsync -arzvtopg --delete feng@192.168.214.190::bak /opt/app/ --password-file=/etc/rsync.d/feng.pass 
    receiving incremental file list
    ./
    install-lnmp.sh
    
    sent 75 bytes  received 1410 bytes  990.00 bytes/sec
    total size is 3522  speedup is 2.37
    [root@yufu ~]# cd /opt/app/ && tree
    .
    └── install-lnmp.sh
    
    0 directories, 1 file
    [root@yufu app]# ls
    install-lnmp.sh

      客户端设置定时备份:添加crontab任务计划,每天定时同步文件

    [root@yufu ~]# crontab -l
    */1 * * * * /usr/bin/rsync -arzvtopg --delete feng@192.168.214.190::bak /opt/app/ --password-file=/etc/rsync.d/feng.pass
    设置定时同步,作为测试,设置每分钟同步一次

      服务端测试文件更新脚本

    #!/bin/bash
    dir=/opt/server
    cd $dir
    for i in $(seq 1 10)
    do
    touch file$i
    sleep 61
    done

      测试脚本执行结束后再查看服务端和客户端的目录情况

    [root@yufu app]# ls   #客户端
    file1  file10  file2  file3  file4  file5  file6  file7  file8  file9  install-lnmp.sh  tess
    
    
    [root@localhost server]#ls  #服务端
    file1  file10  file2  file3  file4  file5  file6  file7  file8  file9  install-lnmp.sh  tess
  • 相关阅读:
    PHP字符串中的变量解析(+教你如何在PHP字符串中加入变量)
    **【ci框架】PHP的CI框架集成Smarty的最佳方式
    六步实现Rest风格的API
    jfinal想用到中大型项目中的项目经验分享
    ***iOS 项目的目录结构能看出你的开发经验
    非常好!!!Linux源代码阅读——环境准备【转】
    非常好!!!Linux源代码阅读——中断【转】
    linux中断申请之request_threaded_irq【转】
    linux设备驱动归纳总结(六):2.分享中断号【转】
    一些不错的文档网址--笔记【原创】
  • 原文地址:https://www.cnblogs.com/anay/p/8706132.html
Copyright © 2011-2022 走看看