zoukankan      html  css  js  c++  java
  • Rsync服务简介部署使用及原理详解

    Rsync简介

    什么是rsync?

    Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。Rstync软件适用于unix/linux/windows等多种操作系统平台。

    Rsync英文全称为Remotesynchronization,即远程同步。从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,Rsync还可以在本地主机的不通分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。此外,利用Rsync还可以实现删除文件和目录功能,这又相当于rm命令。

    一个rsync相当于scp,cp,rm,并且优于他们每一个命令。

    在同步备份数据时,默认情况下,Rsync通过其独特的”quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可以根据权限,属主等属性的变化同步,但需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。

    Rsync2.x和rsync3.x差异

    # CentOS5,rsync2.x对比方法,把所有的文件对比一遍,然后进行同步。
    # CentOS6,rsync3.x对比方法,一边对比差异,一边对差异的部分进行同步。
    
    rsync特性
    # 支持拷贝特殊文件如链接文件,设备等。
    # 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
    # 可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。
    # 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高。
    # 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身对数据不加密)。
    # 可以通过sockert(进程方式)传输文件和数据(服务端和客户端)。
    # 支持匿名或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。
    
    # 注意:需要注意拷贝的时候源目录加“/”和不加“/”的区别(加“/”表示只拷贝该目录之下的文件;不加“/”表示连该目录一起拷贝)
    
    rsync应用场景

    定时备份

    # 可以通过crond + rsync 来实现
    

    实时备份

    # 可以通过inotify(sersync)+ rsync来实现
    

    inotify使用

    作为客户端命令,常用参数如下

    inotify命令参数
    # -avz      --多个参数的集合
    # -v, --verbose 详细模式输出,传输时的进度等信息
    # -z, --compress 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。
    # -a,--archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
    # -r,--recursive 对子目录以递归模式,即目录下所有目录有同样传输
    # -t,--times,保持文件时间信息
    # -o,--owner 保持文件属主信息
    # -p,--perms 保持文件权限
    # -g,--group 保持文件属组信息
    # -P,--progress 显示同步的过程及传世时的进度等信息(大写的P)
    # -D,devices 保持设备文件信息
    # -l,--links 保持软链接   
    # -e,--rsh=COMMAND 使用的信道协议,指替代rsh的shell程序。例如:ssh
    # -exclude=PATTERN指排斥不需要传输的文件模式
    # --bwlimit=RATE 限速,默认是以kbit/s为单位
    # --delete  --删除(本地没有,远端也没有),让目标目录SRC和源目录数据DST一致,适用于两个目录完全一样
    
    innotify的三种工作模式之本地模式

    Rsync的本地模式,即将本地系统的文件或目录从一个目录移动到另外一个目录中,相当于一个系统命令来使用(不常用)。

    命令格式

    # rsync [OPTION...]SRC... [DEST]
    

    Example

    [root@jenkins data]# echo 1234 > test1.txt
    [root@jenkins data]# ls
    test1.txt
    [root@jenkins data]# rsync /data/test1.txt /data/test2.txt
    [root@jenkins data]# cat /data/test2.txt
    1234
    
    innotify的三种工作模式之shell模式

    Rsync的远程shell模式,即将本地系统文件或目录从一台服务器传输向另外一台服务器,类似于scp命令。既可以推送数据到其他服务器,也可以下拉文件到本地。(该模式也不常用)

    命令格式

    # Pull: rsync[OPTION...] [USER@]HOST:SRC... [DEST]
    # Push: rsync[OPTION...] SRC... [USER@]HOST:DEST
    

    Example: 将一个文件传输到另一台服务器

    [root@client data]# rsync -avz /data/test1.txt root@39.108.140.0:/root/
    root@39.108.140.0's password: 
    sending incremental file list
    test1.txt
    
    sent 97 bytes  received 35 bytes  37.71 bytes/sec
    total size is 5  speedup is 0.04
    
    
    [root@server ~]# cat test1.txt
    1234
    

    Example: 将一台主机的文件下载到本地

    [root@client data]# rsync -avz 39.108.140.0:/root/test1.txt /data/test3.txt
    root@39.108.140.0's password: 
    receiving incremental file list
    test1.txt
    
    sent 43 bytes  received 97 bytes  56.00 bytes/sec
    total size is 5  speedup is 0.04
    [root@client data]# cat test3.txt 
    1234
    

    加密传输(隧道传输)

    Rsync的传输协议默认是不加密的明文传输,如果有加密传输文件的需求,可以自定义加密管道管道协议。使用参数:-e来指定相应的管道协议。

    Example: 跨主机加密传输文件,指定ssh协议

    [root@client data]# rsync -avz /etc/hosts -e 'ssh -p 22' root@39.108.140.0:
    root@39.108.140.0's password: 
    sending incremental file list
    
    sent 43 bytes  received 12 bytes  22.00 bytes/sec
    total size is 211  speedup is 3.84
    
    # -e  指定加密协议以及协议端口号
    

    限速传输

    Rsync的传输默认是不限速的,传输时可能会占用很大的网络带宽,影响业务正常使用。可以使用参数:-bwlimit来限制传输时的网络带宽

    Example: 传输时限速为1M/s

    [root@client data]# dd if=/dev/zero of=test bs=1M count=10
    10+0 records in
    10+0 records out
    10485760 bytes (10 MB) copied, 0.00811283 s, 1.3 GB/s
    
    [root@client data]# seq 10 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1 
    
    # 不限速
    [root@client data]# rsync -avz /data/test -e 'ssh -p 22' root@39.108.140.0:/data
    root@39.108.140.0's password: 
    sending incremental file list
    test
    
    sent 10,293 bytes  received 35 bytes  2,950.86 bytes/sec
    total size is 10,485,760  speedup is 1,015.27
    
    
    # 限速
    [root@client data]# rsync -avz /data/test -e 'ssh -p 22' --bwlimit=1 root@39.108.140.0:/data
    root@39.108.140.0's password: 
    sending incremental file list
    test
    
    sent 10,293 bytes  received 35 bytes  826.24 bytes/sec
    total size is 10,485,760  speedup is 1,015.27
    
    # bwlimit的参数默认为1K bits/s
    

    文件备份需要注意的事项

    # 1. 备份需要考虑带宽限速(rsync,scp,ftp都有限速功能)
    # 2. 备份需要选择业务低谷
    
    innotify的三种工作模式之Daemon模式

    Daemon,即守护进程。该模式是在一台rsync服务器上安装并运行一个rsync的服务进程,其他的客户端通过rsync命令上传文件到服务器中。该模式是rsync最常用的功能,用来做数据的定时或者实时备份,下面来具体安装和介绍daemon模式。

    Daemon模式的安装与配置

    环境清单
    节点名 IP 软件版本 硬件 网络 说明
    server 39.108.140.0 rsync-3.1.2 1C2G 阿里云 测试环境
    Client 47.95.119.205 rsync-3.1.2 1C2G 阿里云 测试环境
    安装
    [root@server data]# yum -y install rsync
    [root@server data]# rpm -qa |grep rsync
    rsync-3.1.2-10.el7.x86_64
    
    配置服务端

    修改/etc/rsyncd.conf

    该配置文件时rsync服务器端默认的配置文件,该文件默认不存在,需要自己手动创建!填入内容如下:

    cat rsyncd.conf
    uid = rsync  # 配置用户,远端命令要使用rsync用户访问共享目录(访问目录的权限)
    gid = rsync  # 配置rsync服务程序的用户组
    use chroot = no  # 安全相关
    max connections = 200  # 设置最大连接数
    timeout = 300   # 设置超时时间
    pid file = /var/run/rsyncd.pid   # 定义进程文件
    lock file = /var/run/rsync.lock  # 定义锁文件
    log file = /var/log/rsyncd.log   # 定义日志文件
    [backup]        # 配置一个数据存储的模块
    path = /data  # 模块备份数据路径
    ignore errors
    read only = false
    list = false
    hosts allow = 47.95.119.205,172.25.1.0/24  # 配置登录权限,可以多个IP网段用逗号隔开
    #hosts deny = 0.0.0.0/32
    auth users = rsync_backup # 配置匿名服务登录用户(访问服务的权限)
    secrets file = /etc/rsync.password # 配置匿名用户和密码文件
    
    配置用户
    # 创建用户名为rsync的用户,只让其运行程序,不给其登录系统的权限以及家目录
    [root@server data]# useradd rsync -s /sbin/nologin -M
    [root@server data]# tail -1 /etc/passwd
    rsync:x:1001:1001::/home/rsync:/sbin/nologin
    
    配置存储路径

    创建目录/data,并将其所属用户和用户组修改为rsync,因为程序需要用rsync用户来访问这个目录,如果rsync没有权限访问该目录,那么客户端也无法上传文件到备份数据目录。命令如下:

    [root@server data]# mkdir /data/ -p
    [root@server data]# chown rsync:rsync /data/
    [root@server data]# ls -ld /data/
    drwxr-xr-x 2 rsync rsync 4096 Jul 29 23:12 /data/
    
    配置虚拟用户文件

    /etc/rsync.password

    rsync有一个重要的特性,就是可以使用一个虚拟的用户(不是实际存在的用户)来访问系统服务。为了使用这个功能,我们需要创建一个虚拟的用户文件,该文件已经在rsyncd.conf配置文件里面的secrets file定义好了,是/etc/rsync.password文件

    [root@server data]#  echo "rsync_backup:youmen" > /etc/rsync.password 
    [root@server data]# cat /etc/rsync.password
    rsync_backup:youmen
    [root@server data]# chmod 600 /etc/rsync.password
    # 文件创建完成之后,需要修改文件的权限属性为600,否则程序无法正常运行
    
    配置开机自启动
    [root@server data]#  echo '/usr/bin/rsync --daemon' >> /etc/rc.local 
    [root@server data]# tail -1 /etc/rc.local 
    /usr/bin/rsync --daemon
    
    配置客户端

    /etc/rsync.password

    相对于服务器端来说,客户端的配置很简单,只需要创建一个密码文件就行了。这个密码文件也是默认不存在,需要手动创建。

    [root@client data]# echo "youmen" > /etc/rsync.password
    [root@client data]# cat /etc/rsync.password
    youmen
    [root@client data]# chmod 600 /etc/rsync.password
    [root@client data]# ls -l /etc/rsync.password
    -rw------- 1 root root 7 Jul 29 23:29 /etc/rsync.password
    

    使用rsync

    启动并验证服务
    [root@server data]# rsync --daemon
    [root@server data]# ss -atnlp |grep 873
    LISTEN     0      5            *:873                      *:*                   users:(("rsync",pid=25230,fd=3))
    LISTEN     0      5           :::873                     :::*                   users:(("rsync",pid=25230,fd=5))
       
    # 重启
    [root@server data]# pkill rsync
    [root@server data]# 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
    
    创建测试数据

    客户端

    [root@client data]# seq 10 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1 
    [root@client data]# ls
    10.dat  2.dat  4.dat  6.dat  8.dat
    1.dat   3.dat  5.dat  7.dat  9.dat
    

    服务端

    [root@server data]#  seq 2 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1 
    1+0 records in
    1+0 records out
    1024 bytes (1.0 kB) copied, 0.000147976 s, 6.9 MB/s
    1+0 records in
    1+0 records out
    1024 bytes (1.0 kB) copied, 9.5039e-05 s, 10.8 MB/s
    [root@server data]# ls
    1.dat  2.dat
    
    下载数据测试

    Example1: 服务端免密同步文件到客户端

    [root@client ~]# rsync -auv --password-file=/etc/rsync.password rsync_backup@39.108.140.0::backup  /data
    receiving incremental file list
    ./
    1.dat
    2.dat
    
    sent 69 bytes  received 2,240 bytes  1,539.33 bytes/sec
    total size is 2,048  speedup is 0.89
    

    Example: 客户端文件同步到服务端

    [root@client data]# rsync -avz --delete /data/ rsync_backup@39.108.140.0::backup --password-file=/etc/rsync.password
    sent 556 bytes  received 921 bytes  2,954.00 bytes/sec
    total size is 10,240  speedup is 6.93
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
    

    Rsync优缺点

    优点
    # 1、支持数据增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物);
    
    # 2、远程SHELL通道模式可以加密(SSH)传输,socket(daemon)模式需要加密传输可以使用×××服务或者ipsec服务;
    
    缺点
    # 1、大量小文件同步的时候,时间比较长,有的时候,rsync进程可能会停止;
    # 2、同步大文件,10G这样的大文件有时也会有问题,中途可能会中断。
    # 3、未完整同步前,文件默认是隐藏的,可以通过续传等参数实现传输。
    
    # 注意:
    # 1、模式2和模式3不能结合使用
    # 2、注意源目录后面加“/”与没有的区别(有“/”表示只同步该目录下的数据;没有表示连整个目录一起同步)
    
  • 相关阅读:
    北京 到 娄底 灌湄
    AVR--IO设置编程
    AVR--I/O端口寄存器
    AVR--IO结构分析
    虚拟机VM下 UBUNTU 下安装Mantis
    Windows环境下Mantis搭建概述
    SW4STM32 : Error message from debugger back end: Error erasing flash with vFlashErase packet Error erasing flash with vFlashErase packet
    三极管驱动继电器详解
    STM32 Bootloader 跳转到App
    (转载) STM32IAP升级---IAP升级功能编写初期的一些困惑与疑问---完成功能后的总结
  • 原文地址:https://www.cnblogs.com/you-men/p/13401446.html
Copyright © 2011-2022 走看看