zoukankan      html  css  js  c++  java
  • Linux Rsync备份服务介绍及部署守护进程模式

    rsync介绍

    rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份工具

    在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH提供文件。SSH模式下,rsync客户端运行程序必须同时在本地和远程机器上安装。

    全量与增量

    全量:将全部数据进行传输覆盖

    增量:只传输差异部分的数据

    rsync通过独特的“quick check”算法,实现增量数据传输

    rsync的功能

    类似与cp命令         --- (本地备份传输数据)

    类似于scp命令          --- (远程备份传输数据)

    类似于rm命令              --- (实现无差异同步备份)

    类似于ls命令                --- (本地文件信息查看)

    rsync的cp复制功能

    [root@backup ~]# cp -a /etc/hosts /tmp/
    [root@backup ~]# ls /tmp/hosts 
    /tmp/hosts
    [root@backup ~]# rm -f /tmp/hosts 
    [root@backup ~]# rsync /etc/hosts /tmp/
    [root@backup ~]# ls /tmp/hosts 
    /tmp/hosts
    rsync的复制功能

    rsync的scp远程复制功能

    [root@backup ~]# scp -rp /etc/hosts 10.0.0.31:/tmp/
    The authenticity of host '10.0.0.31 (10.0.0.31)' can't be established.
    RSA key fingerprint is fc:99:32:0e:a1:c9:fb:f6:d2:01:bf:86:94:d2:c1:f5.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.0.0.31' (RSA) to the list of known hosts.
    root@10.0.0.31's password: 
    hosts 
    [root@nfs01 ~]# ll /tmp/hosts 
    -rw-r--r-- 1 root root 371 Oct  1 14:45 /tmp/hosts
    [root@backup ~]# rsync -rp /etc/hosts 10.0.0.31:/tmp/
    root@10.0.0.31's password:
    [root@nfs01 ~]# ll /tmp/hosts
    -rw-r--r-- 1 root root 371 Oct 11 15:18 /tmp/hosts
    rsync的远程复制功能

    rsync的rm删除功能

    这个功能个人感觉比较鸡肋,很少有人使用

    [root@backup tmp]# cp -a /tmp/* /test/
    [root@backup tmp]# mkdir /null     ##创建空目录,以空目录清空想删除的目录
    [root@backup tmp]# rsync --delete -r /null/ /test/ 
    [root@backup tmp]# ll /test/
    total 0
    rsync删除功能

    rsync的ls查看功能

    [root@backup tmp]# ls -l /etc/hosts
    -rw-r--r--. 2 root root 371 Oct  1 14:45 /etc/hosts
    [root@backup tmp]# rsync /etc/hosts
    -rw-r--r--         371 2017/10/01 14:45:23 hosts
    rsync的ls查看功能

    rsync的特性

    rsync有七个特性:

    1. 支持拷贝普通文件与特殊文件如链接文件,设备等。

    2. 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。

        # tar zcvf backup_1.tar.gz  /opt/data  -exclude=ceshi   
    
        说明:在打包/opt/data时就排除了ceshi命名的目录和文件。

    3. 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。

    4. 可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar -N)。

       # 将备份/home 目录自 2008-01-29 以来修改过的文件
        # tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
        # 将备份 /home 目录昨天以来修改过的文件
        # tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
        # 添加文件到已经打包的文件
        # tar -rf all.tar *.gif
        说明:这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

    5. 可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)

    6. 可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。重点掌握

    7. 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。

    rsync的企业工作场景

    同步网站内部人员数据信息(定时任务最小周期为一分钟)

    同步网站用户人员的数据信息

    rsync的参数说明

    -v        详细模式输出,传输时显示信息
    -z        传输时进行压缩,提高效率
    -a        表示以递归方式传输文件,又包含了 rtopgDl参数
        -r        递归
        -t        保持文件时间信息
        -o        保持文件属主信息
        -p        保持文件权限
        -g        保持文件属组信息
        -D        设备文件信息
        -l        保留软链接
    -P        显示传输的进度信息        
    -e        指定用什么隧道
        隧道模式传输:rsync -avz -e "ssh -p 22" /etc/hosts 172.16.1.31:/backup
    --exclude                指定排除不需要的传输文件信息
    --exclude-from=文件       文件所在的目录文件,即可实现排除多个文件
    --bwlimit=速率             设置速率
    --delete                    无差异同步
    rsync的参数

    rsync软件工作方式

    本地数据同步(类似与cp)

    格式:  rsync [OPTION...] SRC... [DEST]
    
    rsync               -- 数据同步命令
    
    [OPTION...]      -- 命令参数信息
    
    SRC                 -- 要同步的数据信息(文件或目录)
    
    [DEST]             -- 将数据传输到什么位置(目标)
    本地数据同步

    实际操作演示

    [root@backup ~]# rsync /etc/hosts /tmp/
    [root@backup ~]# ls /tmp/hosts 
    /tmp/hosts

    远程数据同步方式(类似scp)

    此类型又叫做隧道传输

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

    Pull(拉):
    [USER@]             -- 表示以什么用户身份传输数据信息
    HOST:        -- 远程主机信息(IP地址信息 主机名称信息)
    SRC...        -- 表示远端要拉过来的数据信息
    [DEST]        -- 拉到本地什么位置
    远程同步:拉

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

    Push(推):
    SRC...          -- 本地要推过去的数据信息
    [DEST]        -- 推到什么位置
    [USER@]             -- 表示以什么用户身份传输数据信息
    HOST:        -- 远程主机信息(IP地址信息 主机名称信息)
    远程同步:推

    说明:需进行交互传输数据,如果想实现免交互传输数据,需借助ssh+key方式实现

    实际操作演示

    注意:不加以什么用户拉文件,默认是当前用户

    [root@backup tmp]# rsync 10.0.0.31:/tmp/test.txt /tmp/
    root@10.0.0.31's password: 
    [root@backup tmp]# ll
    total 16
    -rw-r--r--  1 root root  371 Oct 11 15:12 hosts
    -rw-r--r--  1 root root    0 Oct 11 16:17 test.txt
    -rw-r--r--  1 root root 4162 Oct 10 13:16 optimize-init_sys.sh
    -rw-r--r--  1 root root 2184 Oct 10 12:22 sysctl.conf
    -rw-------. 1 root root    0 Sep 29 22:14 yum.log
    演示:拉取文件
    [root@backup tmp]# rsync 10.0.0.31:/tmp/test.txt /tmp/
    root@10.0.0.31's password: 
    [root@backup tmp]# ll
    total 16
    -rw-r--r--  1 root root  371 Oct 11 15:12 hosts
    -rw-r--r--  1 root root    0 Oct 11 16:17 test.txt
    -rw-r--r--  1 root root 4162 Oct 10 13:16 optimize-init_sys.sh
    -rw-r--r--  1 root root 2184 Oct 10 12:22 sysctl.conf
    -rw-------. 1 root root    0 Sep 29 22:14 yum.log
    演示:推送文件

    守护进程方式同步数据

    此方式是rsync中最重要的部分

    格式(拉):Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

          rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

    格式(推):Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

          rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

    实际操作演示

    配置rsync守护进程方式(需要有服务端与客户端)

    配置rsync服务端

    1. 查看rsync软件是否存在,一般来说系统是自带rsync的

    [root@backup tmp]# rpm -qa |grep rsyn
    rsync-3.0.6-12.el6.x86_64

    2. 然后进行软件服务配置,编辑配置文件

    对于配置文件的解释我写的过于简单,不懂的话可以看一下烂泥的介绍:https://www.cnblogs.com/ilanni/p/4225897.html

    [root@backup tmp]# ll /etc/rsyncd.conf
    ls: cannot access /etc/rsyncd.conf: No such file or directory
    编辑配置文件:
    [root@backup tmp]# vim /etc/rsyncd.conf
    uid = rsync                #用户 远端命令使用rsync访问共享目录
    gid = rsync                #用户组
    use chroot = no            #安全相关
    max connections = 200      #最大连接数
    timeout = 300              #超时时间(不进行备份多长时间断开)
    pid file = /var/run/rsyncd.pid             #进程对应进程号文件(存放服务运行时进程id号)
    lock file = /var/run/rsync.lock            #锁文件
    log file = /var/log/rsyncd.log             #日志文件,显示出错信息
    模块信息:
    [backup]
    comment = "backup dir by oldboy"
    path = /backup          #模块对应的位置(路径)
    ignore errors            #忽略错误程序
    read only = false        #是否只读(这里是假,表示能写入)
    list = false             #是否可以列表*
    hosts allow = 172.16.1.0/24        #准许访问rsync服务器客户范围(白名单)
    hosts deny = 0.0.0.0/32            #禁止访问rsync服务器客户范围(黑名单)
    auth users = rsync_backup          #不存在的用户,只用于认证
    设置进行连接认证的密钥文件:
    secrets file = /etc/rsync.password    #认证时密钥文件
    配置文件

    3. 创建rsync服务管理用户

    [root@backup tmp]# useradd -s /sbin/nologin -M rsync  #虚拟用户
    [root@backup tmp]# id rsync
    uid=501(rsync) gid=501(rsync) groups=501(rsync)
    创建管理用户

    4. 创建数据备份存储目录

    [root@backup tmp]# mkdir /backup
    [root@backup tmp]# chown -R rsync.rsync /backup/    #一定要将文件属主和属组改成rsync用户
    数据备份目录

    5. 创建认证用户的密码文件

    echo "rsync_backup:123456" >/etc/rsync.password
    chmod 600 /etc/rsync.password        ##为了安全起见,把认证用户的密码文件权限改成600
    创建认证密码文件

    6. 启动rsync服务

    [root@backup tmp]# rsync --daemon
    [root@backup tmp]# ps -ef |grep rsync
    root       2552      1  0 17:37 ?        00:00:00 rsync --daemon
    root       2554   2276  0 17:37 pts/0    00:00:00 grep --color=auto rsync
    [root@backup tmp]# netstat -lntup |grep rsync        ###看一下socket条目,是否有了
    tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      2552/rsync          
    tcp        0      0 :::873                      :::*                        LISTEN      2552/rsync  
    启动rsync

    配置rsync客户端

    需要将数据进行备份的服务器就是客户端

    1. 查看rsync软件是否存在

    [root@web tmp]# rpm -qa rsync
    
    rsync-3.0.6-12.el6.x86_64

    2. 建立认证密码文件

    echo "123456" >/etc/rsync.password
    chmod 600 /etc/rsync.password

    3. 传输测试

    交互式:rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup

    非交互:rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

    [root@nfs01 backup]# rsync -avz rsync_backup@172.16.1.41::backup/1.txt .
    Password: 
    receiving incremental file list
    1.txt
    
    sent 83 bytes  received 134 bytes  62.00 bytes/sec
    total size is 0  speedup is 0.00
    [root@nfs01 backup]# ll
    total 0
    -rw-r--r-- 1 root root 0 Oct 12 16:20 1.txt
    [root@nfs01 backup]#
    拉取客户端文件

    rsync报mkstemp ".hosts.EfhOg4" (in backup) failed: Permission denied (13)错误的原因

    备份目录权限不正确导致的报错信息:

    [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
    
    Password:
    sending incremental file list
    hosts
    rsync: mkstemp ".hosts.EfhOg4" (in backup) failed: Permission denied (13)
    
     
    sent 200 bytes  received 27 bytes  64.86 bytes/sec
    total size is 371  speedup is 1.63
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

    解决办法:修改权限,属主与属组

    rsync重启方式

    停止服务

    kill  pid号
    killall 进程名称
    pkill  进程名称 
    说明:小心使用!!!!!

    启动服务

    rsync  --daemon

    rsync --daemon启动扩展参数:

       --daemon           #←daemon表示以守护进程的方式启动rsync服务。
       --address          #←绑定指定IP地址提供服务。
       --config=FILE      #←更改配置文件路径,而不是默认的/etc/rsyncd.conf
       --port=PORT        #←更改其它端口提供服务,而不是缺省的873端口

    --daemon --address演示

    服务端:[root@backup backup]# rsync --daemon --address=172.16.1.41
    客户端推送文件:
    [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.41::backup --password-file=/etc/rsync.password 
    rsync: failed to connect to 10.0.0.41: Connection refused (111)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
    [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
    sending incremental file list
    hosts
    
    sent 200 bytes  received 27 bytes  454.00 bytes/sec
    total size is 371  speedup is 1.63
    --daemon --address 演示

    --daemon -- config=FILE演示

    服务端:
    [root@backup backup]# cp /etc/rsyncd.conf /tmp
    [root@backup backup]# rsync --daemon --config=/tmp/rsyncd.conf
    客户端推送测试:
    [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
    sending incremental file list
    hosts
    
    sent 200 bytes  received 27 bytes  454.00 bytes/sec
    total size is 371  speedup is 1.63
    --daemon -- config=FILE演示

    --daemon --port=PORT演示

    服务端:
    [root@backup backup]# rsync --daemon --port=8023
    [root@backup backup]# netstat -lntup|grep rsync
    tcp        0      0 0.0.0.0:8023                0.0.0.0:*                   LISTEN      2714/rsync          
    tcp        0      0 :::8023                     :::*                        LISTEN      2714/rsync   
    客户端:
    [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password         ###没有加--port=端口
    rsync: failed to connect to 172.16.1.41: Connection refused (111)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
    [root@nfs01 ~]# rsync -avz --port=8023 /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password         ###加了--port=端口
    sending incremental file list
    hosts
    
    sent 200 bytes  received 27 bytes  151.33 bytes/sec
    total size is 371  speedup is 1.63
    --daemon --port=PORT演示

    rsync实现免密交互几种方式

    --password-file=/etc/rsync.password 方式

    [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
    sending incremental file list
    hosts
    
    sent 200 bytes  received 27 bytes  454.00 bytes/sec
    total size is 371  speedup is 1.63
    指定密码文件方式

    定义全局变量信息实现免密交互

    [root@nfs01 ~]# export RSYNC_PASSWORD=oldboy123
    [root@nfs01 ~]# rsync -avz /etc/services rsync_backup01@172.16.1.41::backup
    sending incremental file list
    
    sent 29 bytes  received 8 bytes  74.00 bytes/sec
    total size is 641020  speedup is 17324.86
    定义全局变量方式

    rsync守护进程的排除功能实践

    1.--exclude=要配置的目录或文件名称

    2.--exclude-from=要排除多个目录或文件汇总文件名称,利用排除文件排除,此方法是先将要排除的文件或目录名写到一个文件中,引用此文件

    3.在配置文件中进行修改,指定要排除的信息,此方法是在rsync.conf配置文件中添加exclude = file 参数

    rsync守护进程多模块功能配置

    1. 编写配置文件创建多模块信息

        vim /etc/rsyncd.conf
        [nfsdata01]
        comment = "nfsdata dir by erlianzhang"
        path = /nfsdata
        [nfsbackup01]                                                                                                            
        comment = "nfsbackup dir by erlianzhang"
        path = /nfsbackup
    多模块

    2. 创建多模块指定的存储目录,并进行授权

    mkdir -p /{nfsdata,nfsbackup}
    chown -R rsync.rsync /{nfsdata,nfsbackup}
    第三步、利用rsync客户端进行测试
    rsync -avz /etc/services rsync_backup01@172.16.1.41::nfsdata01 --password-file=/etc/rsync.password
    rsync -avz /etc/services rsync_backup01@172.16.1.41::nfsbackup01 --password-file=/etc/rsync.password
    说明:rsyncd.conf配置文件中,添加多模块信息,可以不用重启rsync服务,即时生效
    全局变量参数针对所有模块生效;局部变量参数只对指定模块生效
    read only参数默认配置为ture,即为只读模式
    全局变量发生变化不用重启rsync服务,局部变量发生变化需要重启rsync
    存储目录、授权

    不当之处,还望海涵

  • 相关阅读:
    佛教:禅宗和净土--佛教的归途
    佛教:从精英到世俗
    佛教:神迹的演变。
    收藏品:MP3播放器
    淘书百胜楼
    Spring注解是如何生效的?
    logstash6.8.3 导入 CSV 文件到 ElasticSearch
    三个线程交替按顺序打印ABC之条件队列的理解
    谈谈多线程
    ElasticSearch如何更新集群的状态
  • 原文地址:https://www.cnblogs.com/lyq863987322/p/8059103.html
Copyright © 2011-2022 走看看