• 01-Rsync备份服务


    一、Rsync概念

    Rsync一款开源的、一款支持快速完全备份和增量备份的工具,支持本地复制,远程同步等,类似于 scp 命令,rsync 命令在同步文件之前要先登录目标主机进行用户身份 认证,认证过后才能进行数据同步,身份认证方式取决于所使用的协议类型,rsync 一般使用两种协议进行数据同步:ssh 协议和 rsync 协议。

    rsync官网

    rsync 监听端口: 873

    二、Rsync备份方式

    2.1 完全备份

    假设客户端上有 file1 file2 file3 文件,服务端上有 file1 文件,现要将客户端上的数据备份至服务端

    完全备份方式:把客户端所有的数据file1 file2 file3全部备份至服务器(效率低,占用空间)

    2.2 增量备份

    增量备份方式:把客户端的file2 file3增量备份至服务端(提高效率,节约空间)

    三、安装Rsync

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

    四、 Rsync工作模式

    4.1 本地模式

    代替复制命令cp

    [root@backup tools]# ls
    install.txt
    # 把install.txt复制到/tmp 作用和CP命令一样
    [root@backup tools]# rsync install.txt /tmp
    # 查看是否已经复制过去
    [root@backup tools]# ll /tmp/install.txt 
    -rw-r--r-- 1 root root 5556 Jul  4 01:45 /tmp/install.txt
    

    代替删除命令rm

    ## 假设在/tmp下面有100G的数据,如何将目录中的数据快速删除
    # 1. 创建一个空目录
    [root@backup ~]# mkdir /null
    # 2. 使用--delete参数无差异同步
    [root@backup ~]# rsync -rp --delete /null/ /tmp
    # 确认数据是否被删除
    [root@backup ~]# ll /tmp/
    total 0
    

    4.2 远程模式

    代替命令SCP

    上传方式:

    # 把本地文件install.txt上传到远程服务器192.168.1.7上
    [root@backup tools]# rsync install.txt root@192.168.1.7:/root
    
    # 上传本地目录
    [root@backup tools]# rsync -rp test root@192.168.1.7:/root
    
    -r   递归复制传输数据
    -p   保持文件属性信息不变
    # 备份目录后面有  /  test/ : 只将目录下面的内容进行备份传输 
    # 备份目录后面没有/  test : 会将目录本身以及下面的内容进行传输备份
    

    下载方式:

    # 把远程服务器192.168.1.7/root/test 目录下载到当前目录下
    [root@backup tools]# rsync  -rp root@192.168.1.7:/root/test ./
    

    4.3 守护进程模式

    守护进程方式备份数据:

    1. 可以进行一些配置管理
    2. 可以进行安全策略管理
    3. 可以实现自动传输备份数据

    Rsync命令语法格式和参数

    SYNOPSIS # 概要
    
    # 本地备份数据方式
    Local:  rsync [OPTION...] SRC... [DEST] 
       本地备份数据: 
       src: 要备份的数据信息
       dest: 备份到什么路径中
    
    # 远程备份数据方式:
    Access via remote shell:
       Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
           [USER@]    --- 以什么用户身份拉取数据(默认以当前用户)
           hosts      --- 指定远程主机IP地址或者主机名称
           SRC        --- 要拉取的数据信息
           dest       --- 保存到本地的路径信息
       
       Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
           SRC        --- 本地要进行远程传输备份的数据
           [USER@]    --- 以什么用户身份推送数据(默认以当前用户)
           hosts      --- 指定远程主机IP地址或者主机名称
           dest       --- 保存到远程的路径信息
    
    # 守护进程备份数据方式
    Access via rsync daemon:
       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
                  
    # 选项参数      
    [OPTION...] 
        -a #归档模式传输, 等于-tropgDl
        -v #详细模式输出, 打印速率, 文件数量等
        -z #传输时进行压缩以提高效率
        -r #递归传输目录及子目录,即目录下得所有目录都同样传输。
        -t #保持文件时间信息
        -o #保持文件属主信息
        -p #保持文件权限
        -g #保持文件属组信息
        -l #保留软连接
        -P #显示同步的过程及传输时的进度等信息
        -D #保持设备文件信息
        -L #保留软连接指向的目标文件
        -e #使用的信道协议,指定替代 rsh 的 shell 程序
        --exclude=PATTERN #指定排除不需要传输的文件
        --exclude-from=file #指定排除file中包含的文件名 所在目录的文件
        --bwlimit=100 #限速传输  100Mb/8=12.5MB
        --delete #让目标目录和源目录数据保持一致,实现数据无差异同步
    # 例如    
    [root@backup ~]# rsync  -avz  /backup root@192.168.1.7::/back
    
    

    五、 Rsync守护进程部署(服务端)

    5.1 下载安装软件

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

    5.2 编写配置文件

    [root@backup ~]# cat /etc/rsyncd.conf
    uid = www 
    gid = www 
    port = 873
    fake super = yes
    use chroot = no
    max connections = 200
    timeout = 600
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    ignore errors
    read only = false
    list = false
    hosts allow = 172.16.1.0/24
    hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file = /etc/rsync.passwd
    log file = /var/log/rsync/rsyncd.log
    
    [web_backup]
    comment = "The backup data from web_server"
    path = /backup
    
    [db_backup]
    path = /db_backup
    
    ## 配置文件解释
    uid = rsync       	--- 指定管理备份目录的用户  
    gid = rsync       	--- 指定管理备份目录的用户组
    port = 873        	--- 定义rsync备份服务的网络端口号
    fake super = yes  	--- 将rsync虚拟用户伪装成为一个超级管理员用户 
    use chroot = no   	--- 和安全相关的配置,禁锢推送的数据至某个目录, 不允许跳出该目录
    max connections = 200 	 --- 最大连接数  同时只能有200个客户端连接到备份服务器
    timeout = 300         	 		--- 超时时间(单位秒)
    pid file = /var/run/rsyncd.pid   --- 记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行  
    lock file = /var/run/rsync.lock  --- 锁文件
    log file = /var/log/rsync/rsyncd.log   --- rsync服务的日志文件 用于排错分析问题
    ignore errors                    	--- 忽略传输中的简单错误
    read only = false                  --- 指定备份目录是可读可写
    list = false                    		 --- 是否允许客户端可以查看服务端的模块信息
    hosts allow = 172.16.1.0/24       --- 允许传输备份数据的主机(白名单)
    hosts deny = 0.0.0.0/32          	--- 禁止传输备份数据的主机(黑名单)
    auth users = rsync_backup        --- 指定认证用户 
    secrets file = /etc/rsync.password   --- 指定认证用户密码文件 用户名称:密码信息 
     
    [web_backup] 		---模块信息
    comment = "The backup data from web_server"   --- 模块注释信息
    path = /backup          --- 备份路径
    
    [db_backup]
    path = /db_backup
    
    

    5.3 创建用户和数据目录

    [root@backup ~]# useradd -M www -s /sbin/nologin
    [root@backup ~]# id www
    uid=1005(www) gid=1005(www) groups=1005(www)
    [root@backup ~]# mkdir /backup
    [root@backup ~]# chown -R www.www /backup
    

    5.4 创建密码文件

    [root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
    [root@backup ~]# chmod 600 /etc/rsync.passwd
    

    5.5 启动服务

    [root@backup ~]# systemctl start rsyncd
    [root@backup ~]# systemctl enable rsyncd
    [root@backup ~]# netstat -tunlp |grep 73
    
    

    六、 Rsync守护进程部署(客户端)

    6.1 下载安装软件

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

    6.2 配置密码文件

    [root@web01 ~]# echo 123456> /etc/rsync.password
    

    七、练习

    7.1 客户端备份数据至Rsync服务端

    # 客户端要备份的数据/backup
    [root@web01 backup]# tree /backup
    web01_backup/
    ├── a.txt
    ├── b.txt
    ├── c.txt
    ├── install.txt
    └── test
        ├── e.txt
        ├── f.txt
        ├── g.txt
        └── h.txt
    5 directories, 4 files
    
    # --password-file 指定密码认证文件
    [root@web01 backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::web_backup --password-file=/etc/rsync.password
    
    # 在备份服务器查是否备份成功
    [root@backup ~]# cd /web_backup/
    [root@backup web_backup]# ll
    total 0
    drwxr-xr-x 3 www www 76 Jul  4 03:26 web01_backup
    [root@backup web_backup]# tree web01_backup/
    web01_backup/
    ├── a.txt
    ├── b.txt
    ├── c.txt
    ├── install.txt
    └── test
        ├── e.txt
        ├── f.txt
        ├── g.txt
        └── h.txt
    5 directories, 4 files
    # 两边数据一样,备份成功
    

    7.2 客户端从Rsync服务端下载数据

    [root@web01 backup]# rsync -avz rsync_backup@172.16.1.41::web_backup /backup --password-file=/etc/rsync.password
    
    # 把Rsync服务端的web_backup模块下的数据下载到本地/backup目录下
    

    7.3 Rsync实现数据无差异同步

    # 1. 客户端操作
    [root@web01 backup]# cd /backup/web01_backup
    [root@web01 web01_backup]# ls
    a.txt  b.txt  c.txt  install.txt  test
    # 2. 把test目录移走
    [root@web01 web01_backup]# mv test/ /tmp
    [root@web01 web01_backup]# ls
    a.txt  b.txt  c.txt  install.txt
    
    # 3. 开始无差异同步
    [root@web01 web01_backup]# rsync -avz --delete /backup/ rsync_backup@172.16.1.41::web_backup --password-file=/etc/rsync.password
    
    # 4. Rsync服务端查看数据是否存在差异
    [root@backup backup]# cd /web_backup/web01_backup/
    [root@backup web01_backup]# ls
    a.txt  b.txt  c.txt  install.txt
    
    说明:
    #1. 下载远端数据:远端与本地保持一致,远端没有本地有会被删除, 造成客户端数据丢失
    #2. 上传数据至远端:本地与远端保持一致, 本地没有远端会被删除, 造成服务器端数据丢失
    

    7.4 Rsync备份数据排除功能

    ### 使用--exclude参数实现排除不想同步的文件
    [root@backup web01_backup]# ls
    a.txt  b.txt  c.txt  install.txt
    # 批量创建1到10,后缀名为.c的文件
    [root@web01 web01_backup]# touch {1..5}.c
    [root@web01 web01_backup]# ls
    1.c  2.c  3.c  4.c  5.c  a.txt  b.txt  c.txt  install.txt
    
    # 删除Rsync服务端以前的备份
    [root@backup web01_backup]# rm -rf /web_backup/*
    
    # 备份数据时不要备份以1.c 2.c 5.c
    [root@web01 web01_backup]# [root@web01 web01_backup]# rsync -avz /backup/web01_backup --exclude=1.c --exclude=2.c --exclude=5.c rsync_backup@172.16.1.41::web_backup --password-file=/etc/rsync.password
    
    # Rsync服务端查看备份情况,没有备份排除掉的1.c  2.c  5.c
    [root@backup web_backup]# tree web01_backup/
    web01_backup/
    ├── 3.c
    ├── 4.c
    ├── a.txt
    ├── b.txt
    ├── c.txt
    └── install.txt
    0 directories, 6 files
    
    # 使用--exclude参数排除文件时,每指定一个排除文件都要使用一个--exclude=xxx file,这样使得命令过长,很容易出错,如果要排除的文件多了,会带来很大的不便
    
    ### 使用--exclude-from参数只需要编写一个排除文件,把要排除的文件名写入其中,就可以达到备份时排除多个文件的目的
    
    # 1.客户端准备数据
    [root@web01 backup]# tree web01_backup/
    web01_backup/
    ├── 1.c
    ├── 2.c
    ├── 3.c
    ├── 4.c
    ├── 5.c
    ├── a.txt
    ├── b.txt
    ├── c.txt
    ├── exclude.txt
    ├── hello
    ├── install.txt
    └── test
        ├── 11.php
        ├── 12.php
        ├── 13.php
        ├── 14.php
        └── 15.php
    # 2. 编写排除文件,注意后面不要有空格,备份的时候会把排除文件也备份,需要把排除文件名也加上
    [root@web01 web01_backup]# cat /backup/web01_backup/exclude.txt 
    1.c
    5.c
    c.txt
    test/14.php
    hello/
    exclude.txt
    
    # 3. 开始备份
    [root@web01 web01_backup]# rsync -avz /backup/web01_backup --exclude-from=exclude.txt rsync_backup@172.16.1.41::web_backup --password-file=/etc/rsync.password
    
    #4. 检查Rsync服务端数据
    [root@backup web_backup]# tree web01_backup/
    web01_backup/
    ├── 2.c
    ├── 3.c
    ├── 4.c
    ├── a.txt
    ├── b.txt
    ├── install.txt
    └── test
        ├── 11.php
        ├── 12.php
        ├── 13.php
        └── 15.php
    

    7.5 Rsync创建备份目录

    [root@web01 backup]# rsync -avz /backup/web01_backup rsync_backup@172.16.1.41::web_backup/172.16.1.7/ --password-file=/etc/rsync.password
    
    # 备份数据时会自动在Rsync服务端备份目录下自动创建172.16.1.7目录,不能创建多级目录
    [root@backup web_backup]# ls
    172.16.1.7  web01_backup
    
    

    7.6 Rsync访问控制

    主要是/etc/rsyncd.conf配置文件中的两个参数

    hosts allow = 172.16.1.0/24 允许备份的IP
    hosts deny = 0.0.0.0/32 拒绝备份数据的IP

    7.7 Rsync 的 Limit 限速

    企业案例: 某 DBA 使用 rsync 拉取备份数据时,由于文件过大导致内部交换机带宽被沾满,导致用户的请求无法响应
    rsync -avz --bwlimit=100 rsync_backup@172.16.1.41::backup /web_backup
    

    八、全网备份项目

    备份环境:备份服务器backup、 3台web服务器web01 web02 web03

    客户端需求:

    1、每天凌晨2点服务器本地打包备份

    • 系统配置文件/etc/fstab/etc/passwd/etc/rc.local/etc/sysconfig/iptables
    • 日常脚本目录/server/scripts
    • web服务器站点目录/html/www
    • 日志文件/var/log/messages/var/log/secure、web访问日志目录/var/log/nginx

    2、 打包备份的文件必须保存在/backup目录下,以主机名+IP地址+备份日期命令的目录中,如:web01_172.16.1.7_2020-6-28

    3、 本地只保留打包后的最近7天数据,避免磁盘资源浪费

    备份服务端需求:

    1、 备份目录必须为/backup

    2、 需要每天校验客户端推送过来的数据是否完整

    3、 将每天校验的结果以163邮件发送给管理员,便于及时发现问题

    4、 服务端只保留一年的数据,其他的全部删除

    客户端配置

    hostname: 主机名称

    hostname -i : IP地址

    date +%F : 日期

    1、 编写客户端脚本

    [root@web01 scripts]# cat /server/scripts/01-rsync_push.sh 
    #!/bin/sh
    # author: Zachariah
    # desc: Push local data to Rsync_server
    
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    backup_dir=/backup/$(hostname)_$(hostname -i)_$(date +%F)
    passwd_file=/etc/rsync.password
    
    # 1. 创建本地备份目录
    mkdir -p ${backup_dir}
    
    # 2. 压缩数据
    cd /
    if [ $?==0 ];then
    tar -chf ${backup_dir}/system_file.tar.gz 
      etc/fstab etc/passwd etc/rc.local etc/sysconfig/iptables
    fi
    
    if [ $?==0 ];then
    tar -chf ${backup_dir}/log.tar.gz 
      var/log/messages var/log/secure var/log/nginx
    fi 
    
    if [ $?==0 ];then
    tar -chf ${backup_dir}/scripts.tar.gz 
      server/scripts
    fi 
    
    if [ $?==0 ];then
    tar -chf ${backup_dir}/site_dir.tar.gz  
      html/www
    fi 
    
    # 3. 生成md5验证文件
    if [ $?==0 ];then
    md5sum ${backup_dir}/*.tar.gz > ${backup_dir}/md5.txt
    fi 
    
    # 4. 推送本地备份好的数据到备份服务器
    rsync -az  ${backup_dir} rsync_backup@172.16.1.41::web_backup 
      --password-file=${passwd_file}
    
    # 5. 删除7天以前的压缩文件
    if [ $?==0 ];then
    find ${backup_dir}/ -mtime +7 |xargs rm -rf
    fi
    
    

    2、 编写定时任务,每天2:00自动打包上传

    [root@web01 scripts]# crontab -e
    # push local achive date to rsync_server
    00 02 * * * /bin/sh /server/scripts/01-rsync_push.sh > /dev/null 2>&1
    
    

    服务端需求

    1.服务端部署 rsync,用于接收客户端推送过来的备份数据,备份目录/web_backup
    2.服务端需要每天校验客户端推送过来的数据是否完整
    3.服务端需要每天校验的结果通知给管理员
    4.服务端仅保留 6 个月的备份数据,其余的全部删除

    服务端操作

    1.编写邮件配置

    [root@backup scripts]# yum -y install postfix
    [root@backup scripts]# cat /etc/mail.rc
    set from=zachariah9426@163.com
    set smtp=smtp.163.com
    set smtp-auth-user=zachariah9426@163.com                               
    set smtp-auth-password=xxxxxx
    set smtp-auth=login
    

    重启邮件服务: systemctl restart postfix.service

    2.编写服务端脚本

    #!/bin/sh
    # check rsync data by client backup
    
    path=/backup
    mail_addr=zachariah9426@163.com
    
    # 1. creat rsync check file
    find ${path}/*_$(date +%F)/ -type f -name "md5.txt" |xargs 
      md5sum -c > ${path}/$(date +%F)_checkResult.txt
    
    # 2. send mail to admin
    if [ $?==0 ];then
      mail -s "$(date +%F)_RsyncCheckResult" ${mail_addr} < 
        ${path}/$(date +%F)_checkResult.txt
    fi
    
    # find data from 6 months ago and delete it
    # find data from 7 day ago and delete it
    find ${path}/ -type f -mtime +7 |xargs rm -rf
    find ${path}/ -type d -mtime +180 |xargs rm -rf
    
  • 相关阅读:
    二分查找
    django 中间件
    logging 模块
    linux ssh keys
    spark(一) build
    hadoop中遇到的问题。
    算法----字符串拷贝
    phpmailer 实现发送邮件
    thinkphp操作数据库
    thinkphp 使用过程中遇到的一个小函数
  • 原文地址:https://www.cnblogs.com/Zachariah9426/p/13237385.html
Copyright © 2020-2023  润新知