zoukankan      html  css  js  c++  java
  • rsync远程拷贝服务搭建

    一、rsync简介:

      rsync是一款远程数据同步的工具,是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具,Rsync 软件适用于 Linux Windows等多种操作系统,并且他可以不改变数据的任何属性和内容。

      rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh的scp命令,但又优于scp命令的功能,scp每次都是全量备份,而rsync支持增量备份,当然。rsync还可以在本地主机的不同分区和目录之间全量及增量的复制数据,这又类似于cp命令,但又优于cp命令,cp每次都是全量备份,rsync可以支持增量备份

    二、rsync参数:

    -v	详细模式输出,传输时的进度等信息,
    -z	传输时进行压缩以提高传输效率 -compress-level=NUM  ,可以按级压缩,
    -a	归档模式,表示以递归方式传输文件,并保持所有文件属性,等同于 -rtopgDl,相当于包含以下所有
    r	对子目录以递归模式,即目录下的所有目录都同样传输,注意事小写r
    -t	--times 	保持时间属性一致
    -o	--owner	保持文件属主信息
    -p	--perms	保持文件权限
    g	--group	保持文件属组信息
    -P	显示同步的过程以及传输时的进度等信息
    -D	保持设备文件信息,
    -I	保留软连接,
    
    还有一些其他参数:
    -e			     使用隧道模式,
    --delete			让目标目录SRC和源目录数据DST一致,
    --exclude=PATTERN		指定排除不需要传输的文件模式
    --bwlimit=RATE  		限速
    (案例:某DBA做数据同步rsync,导致用户无法访问网站)
    1、使用rsync的参数,做限速
    2、备份尽量在晚上做备份,
    补充:rsync scp ftp都有限速的功能,
    

    三、rsync的三种工作模式:

      1、rsync本地工作模式

      rsync的本地模式相当于cp命令,可以实现本地的文件复制,可以加参数来保持文件的属性一致。

    ;单台服务器使用rsync实现备份操作:
    [root@localhost /]# yum install rsync -y
    [root@localhost opt]# cp /etc/hosts /opt/
    [root@localhost opt]# ll /opt/
    total 4
    -rw-r--r--. 1 root root 158 Jul 30 08:54 hosts
    [root@localhost opt]# rm -f /opt/hosts 
    [root@localhost opt]# rsync /etc/hosts /opt
    [root@localhost opt]# ll /opt/hosts 
    -rw-r--r--. 1 root root 158 Jul 30 08:55 /opt/hosts

      2、rsync使用远程ssh通道工作模式:

      使用-e参数可以是实现rsync通过远程ssh通道实现跨主机的备份操作,需要注意的是,两台主机都需要已经安装rsync。使用ssh连接会有一个问题就是传输很慢,可以采用一下方式优化:

      修改/etc/ssh/sshd_config以下几行:  

      GSSAPIAuthentication no
      #GSSAPIAuthentication yes
      UseDNS no

      然后使用rsync远程ssh通道实现跨主机文件备份:

    [root@localhost backup]# rsync -avz /backup/pandj.txt -e "ssh -p 22" root@192.168.80.129:/opt
    root@192.168.80.129's password: 
    sending incremental file list
    pandj.txt
    
    sent 97 bytes  received 35 bytes  37.71 bytes/sec
    total size is 5  speedup is 0.04
    [root@localhost backup]# ssh 192.168.80.129
    root@192.168.80.129's password: 
    Last login: Mon Jul 30 09:09:52 2018 from 192.168.80.1
    [root@localhost ~]# ip add | grep 192.168
        inet 192.168.80.129/24 brd 192.168.80.255 scope global dynamic ens33
    [root@localhost ~]# cd /opt/
    [root@localhost opt]# ll
    total 4
    -rw-r--r--. 1 root root 5 Jul 30 09:46 pandj.txt
    

      3、rsync daemon 服务模式:

      相当于搭建一个备份服务器,上面跑一个rsync服务,(服务称之为daemon)监听 873 端口,然后有其他的客户端服务器, 在客户端服务器上使用rsync命令,实现可以和服务器 推 和 拉 的作用, 推拉都是在客户端的操作,

      服务端编辑rsync配置文件:

    #用户uid,相当于进程对应的虚拟用户远端的命令要使用rsync来访问目录
     uid = rsync
     #gid 相当于进程对应的用户组
     gid = rsync
     #安全相关
     use chroot = no 
     #最大连接数量
     max connections = 200
     #进程对应的进程号文件
     pid file = /var/run/rsyncd.pid
     #日志文件
     log file = /var/log/rsyncd.log
     #超时时间
     timeout = 900
    
     [backup]
    #服务端提供访问的目录 path = /backup #忽略错误 ignore errors #只读为假表示 可写 read only = no #允许列表 list = yes #虚拟用户 auth users = rsync_backup #虚拟账号对应的用户和密码 secrets file = /etc/rsync.password

      服务端rsync配置文件配置好之后,还需要创建一个rsync用户和 /backup 这个目录,访问逻辑就是源端用户连过来的时候用的就是rsync这个用户访问 /backup 这个目录,在这个过程中,需要注意文件的权限,以及配置文件中虚拟用户的账户密码文件配置。

    [root@localhost ~]# useradd rsync -s /sbin/nologin -M               //创建一个rsync用户 不需要登陆,不需要家目录。
    [root@localhost ~]# tail -1 /etc/passwd
    rsync:x:1001:1001::/home/rsync:/sbin/nologin
    [root@localhost ~]# mkdir /backup			 //创建一个backup目录
    [root@localhost ~]# ll -d /backup/
    drwxr-xr-x. 2 root root 23 Jul 30 09:46 /backup/
    
    //到这边远端用户还是访问不了/backup这个目录,因为有权限的控制,需要我们把这个目录的属主改成rsync,也可以用chmod 777但是这样不安全,不建议使用
    [root@localhost ~]# chown -R  rsync.rsync /backup
    [root@localhost ~]# ll -d /backup/
    drwxr-xr-x. 2 rsync rsync 23 Jul 30 09:46 /backup/
    
    //然后检查配置文件,还少一个虚拟账号对应的密码文件 secrets file = /etc/rsync.password 编辑此文件并修改此文件的权限,
    [root@localhost ~]# echo "rsync_backup:123456" > /etc/rsync.password
    [root@localhost ~]# tail -1 /etc/rsync.password 
    rsync_backup:123456
    [root@localhost ~]# chmod 600 /etc/rsync.password 
    [root@localhost ~]# ll /etc/rsync.password 
    -rw-------. 1 root root 20 Jul 31 09:25 /etc/rsync.password
    
    //启动rsync服务,并加入开机自启,查看端口确认服务是否起来。
    [root@localhost ~]# /usr/bin/rsync --daemon
    [root@localhost ~]# echo "/usr/bin/rsync --daemon" >> /etc/rc.local 
    [root@localhost ~]# lsof -i:873
    COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    rsync   2245 root    4u  IPv4  20736      0t0  TCP *:rsync (LISTEN)
    rsync   2245 root    5u  IPv6  20737      0t0  TCP *:rsync (LISTEN)
    

      

      服务端至此配置完成,配置客户端的步骤如下:

      1、需要配置一个密码文件,和服务端一致并修改权限

    [root@client ~]# echo "rsync_backup:123456" > /etc/rsync.password
    [root@client ~]# chmod 600 /etc/rsync.password 
    [root@client home]# tail -1 /etc/rsync.password 
    rsync_backup:123456
    

      2、创建一个 /backup 目录,用来测试

    [root@client backup]# mkdir /backup/
    

      3、测试推送

    //在服务端 /backup 目录下创建一个测试文件
    [root@localhost backup]# touch test
    [root@localhost backup]# echo 11111 > test
    //在客户端拉取服务区的文件
    [root@client backup]# pwd
    /backup
    [root@client backup]# ll
    total 0
    [root@client backup]# rsync -avz rsync_backup@192.168.80.128::backup /backup/
    receiving incremental file list
    ./
    test
    
    sent 50 bytes  received 127 bytes  354.00 bytes/sec
    total size is 6  speedup is 0.03
    [root@client backup]# ll
    total 4
    -rw-r--r--. 1 root root 6 Jul 31 11:12 test
    [root@client backup]# more test 
    11111
    

      如果想要非交互式的传输,可以用以下命令:

    [root@localhost backup]# rsync -avz /backup/ rsync_backup@192.168.80.130::backup/ --password-file=/etc/rsync.password 

     

    四、配置过程中的注意点:

      1、服务端的目录属主要修改成配置文件中的用户,否则会有权限问题

      2、虚拟用户密码文件服务端内容为:虚拟用户名:密码   客户端密码配置内容为  密码,且两个文件权限均需要修改成600

    五、rsync配置中常见的问题:

    1、配置文件问题

    @ERROR: chroot failed

    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6] 

    排查思路;
    1、命令解析: 客户端使用 命令 参数 目录 虚拟用户@服务端地址::模块名/ --password-file=/etc/rsync.password 来往服务端同步信息,
    2、排查地址及端口,服务端使用lsod -i :873 或者 netstat -lntup | grep 873 来查看服务是否存在
    然后在客户端 telnet 服务端地址加端口,排查是否地址端口存在问题,
    3、不加 --password-file 参数,手动输入密码,看用户名和密码是否能登陆上
    虚拟用户名和密码都定义在 /etc/rsyncd.conf配置文件中
    auth users = rsync_backup
    secrets file = /etc/rsync.password
    /etc/rsync.password 文件需要创建,服务端中输入rsync_backup:123456,用户名密码
    /etc/rsync.password 客户端中输入 joywise
    4、能连接上,排查 uid gid 中rsync是否存在,[backup]模块中目录地址是否正确,
    5、查看 [root@backup backup]# tail -10 /var/log/rsyncd.log
    提示我 /backup 这个目录找不到,ll -d /backup查看目录确实存在,怀疑问题在配置文件中的[backup] 模块中 path 中,经过排查, path = /backup 这条配置后面有很多空格导致找不到目录,所有提示 chroot failed,修改配置文件,然后再从客户端推,解决问题。

      

      

      

      

  • 相关阅读:
    streamsets 集成 cratedb 测试
    streamsets k8s 部署试用
    streamsets rest api 转换 graphql
    StreamSets sdc rpc 测试
    StreamSets 相关文章
    StreamSets 多线程 Pipelines
    StreamSets SDC RPC Pipelines说明
    StreamSets 管理 SDC Edge上的pipeline
    StreamSets 部署 Pipelines 到 SDC Edge
    StreamSets 设计Edge pipeline
  • 原文地址:https://www.cnblogs.com/pandj/p/9391966.html
Copyright © 2011-2022 走看看