Rsync备份服务器

第1章 Rsync服务  

  Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具
    rsync软件使用方法:
    rsync命令  1v4

  1.1 本地备份数据 cp

[root@nfs01 backup]# cp /etc/hosts /tmp
[root@nfs01 backup]# ll /tmp/hosts
-rw-r--r-- 1 root root 371 May  6 16:11 /tmp/hosts
[root@nfs01 backup]# rsync /etc/hosts /tmp/host_rsync
[root@nfs01 backup]# ll /tmp/host_rsync
-rw-r--r-- 1 root root 371 May  6 16:12 /tmp/host_rsync

 1.2 远程备份数据 scp

scp -rp /etc/hosts root@172.16.1.41:/backup
root@172.16.1.41's password:
hosts   100%  371    42.8KB/s   00:00

    -r    --- 递归复制传输数据
    -p    --- 保持文件属性信息不变

[root@nfs01 ~]# rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync
root@172.16.1.41's password:     

    rsync远程备份目录:

[root@nfs01 ~]# rsync -rp /oldboy 172.16.1.41:/backup   --- 备份的目录后面没有 /
root@172.16.1.41's password:
[root@backup ~]# ll /backup
total 0
drwxr-xr-x 2 root root 48 May  6 16:22 oldboy
[root@backup ~]# tree /backup/
 /backup/
└── oldboy
    ├── 01.txt
    ├── 02.txt
    └── 03.txt
1 directory, 3 files
[root@nfs01 ~]# rsync -rp /oldboy/ 172.16.1.41:/backup  --- 备份的目录后面有 /
 root@172.16.1.41's password:
[root@backup ~]# ll /backup
total 0
-rw-r--r-- 1 root root 0 May  6 16:24 01.txt
-rw-r--r-- 1 root root 0 May  6 16:24 02.txt
-rw-r--r-- 1 root root 0 May  6 16:24 03.txt

    总结: 在使用rsync备份目录时:
    备份目录后面有  / -- /oldboy/ : 只将目录下面的内容进行备份传输
    备份目录后面没有/ -- /oldboy  : 会将目录本身以及下面的内容进行传输备份

  1.3 替代删除命令

rm命令
[root@nfs01 ~]# rsync -rp --delete /null/ 172.16.1.41:/backup
root@172.16.1.41's password:
--delete   实现无差异同步数据   

面试题

有一个存储数据信息的目录, 目录中数据存储了50G数据, 如何将目录中的数据快速删除
 rm /目录/* -rf   

    替代查看文件命令 ls

[root@backup ~]# ls /etc/hosts
/etc/hosts
[root@backup ~]# rsync /etc/hosts
-rw-r--r--            371 2019/05/06 11:55:22 hosts

   rsync监听端口:873

rsync运行模式:C/S

全量备份:

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

全量备份,将客户端所有的数据内容file1 file2 file3全部备份至服务端 (效率低下, 占用空间)

 

 

 增量备份,只将客户端的file3增量备份至服务端 (提高备份效率,节省空间, 适合异地备份 )

 

 

 

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       --- 保存到远程的路径信息
   守护进程方式备份数据 备份服务
   01. 可以进行一些配置管理
   02. 可以进行安全策略管理
   03. 可以实现自动传输备份数据
   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

 

 

 

大量服务器备份场景

 

 

 

 

通过ssh通道传输数据,类似scp命令

#pull拉取数据命令
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
#pull拉取数据示例
[root@backup ~]# rsync -avz root@172.16.1.41:/etc/hostname ./   #拉取远程文件
[root@backup ~]# rsync -avz root@172.16.1.41:/root/ /backup/   #拉取远程目录下的所有文件
[root@backup ~]# rsync -avz root@172.16.1.41:/root /backup/    #拉取远程目录以及目录下的所有文件
Pull        #拉取, 下载
rsync       #备份命令
[options]   #选项
[USER@]     #目标主机的系统用户
HOST        #目主机IP地址或域名
SRC...      #目标主机源文件
[DEST]      #下载至本地哪个位置
	 

#push推送数据命令
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
#push推送数据示例
rsync -avz /backup/2018-10-01 root@172.16.1.41:/tmp/
Push        #推送, 上传
rsync       #备份命令
[options]   #选项
SRC...      #本地源文件
[USER@]     #目标主机的系统用户
HOST        #目主机IP地址或域名
[DEST]      #目标对应位置

 rsync自身非常重要的功能(不使用系统用户,更加安全)

#pull拉取数据命令
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
#1.拉取rsync备份服务的"backup模块"至本地/mnt目录
[root@nfs01 ~]# rsync -avz rsync_backup@172.16.1.41::backup/ /mnt/ --password-file=/etc/rsync.password
rsync           #命令
[OPTION...]     #选项
[USER@]         #远程主机用户(虚拟用户)
HOST::          #远程主机地址  
SRC...          #远程主机模块(不是目录)
[DEST]          #将远程主机数据备份至本地什么位置     
#push推送数据命令
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
#2.将本地/mnt目录推送至rsync备份服务器的"backup模块"
[root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password
rsync           #命令
[OPTION...]     #选项
SRC...          #远程主机模块(不是目录)
[USER@]         #远程主机用户(虚拟用户)
HOST::          #远程主机地址
[DEST]          #将远程主机模块备份至本地什么位置

第2章   rsync守护进程部署方式

    客户端---服务端 
    rsync守护进程服务端配置:
    第一个历程: 下载安装软件

rpm -qa|grep rsync
yum install -y rsync 

 第二个历程: 编写配置文件

 man rsyncd.conf
 vim /etc/rsyncd.conf
 created by HQ at 2017
 rsyncd.conf start
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/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   --- 指定认证用户密码文件 用户名称:密码信息
[backup]                         --- 模块信息
comment = "backup dir by oldboy"  
path = /backup                   --- 模块中配置参数 指定备份目录 

    第三个历程: 创建rsync服务的虚拟用户

[root@nfs01 ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup/
useradd rsync -M -s /sbin/nologin

    第四个历程: 创建备份服务认证密码文件

 echo "rsync_backup:oldboy123" >/etc/rsync.password
 chmod 600 /etc/rsync.password

    第五个历程: 创建备份目录并修改属主属组信息

mkdir /backup
chown rsync.rsync /backup/

    第六个历程: 启动备份服务

systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd

    需要熟悉rsync守护进程名称语法:
    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
          src: 要推送备份数据信息
          [USER@]: 指定认证用户信息
          HOST: 指定远程主机的IP地址或者主机名称
          ::DEST: 备份服务器的模块信息       
          rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
    rsync守护进程客户端配置:
    第一个历程: 创建一个秘密文件

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

    第二个历程: 进行免交互传输数据测试

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

  rsync命令参数详细说明

-v, --verbose     显示详细的传输信息
-a, --archive     命令的归档参数 包含: rtopgDl
-r, --recursive   递归参数
-t, --times       保持文件属性信息时间信息不变(修改时间)
-o, --owner       保持文件属主信息不变
-g, --group       保持文件属组信息不变
PS: 如何让-o和-g参数生效,需要将配置文件uid和gid改为root,需要将 fake super参数进行注释
-p, --perms       保持文件权限信息不变
-D,               保持设备文件信息不变
-l, --links       保持链接文件属性不变
-L,               保持链接文件数据信息不变
-P,               显示数据传输的进度信息
--exclude=PATTERN   排除指定数据不被传输
--exclude-from=file 排除指定数据不被传输(批量排除)
--bwlimit=RATE    显示传输的速率  100Mb/8=12.5MB
企业案例:    马路(带宽-半)   人人网地方
--delete          无差异同步参数(慎用)
                      我有的你也有,我没有的你也不能有

第三章 守护进程服务企业应用   

a. 守护进程多模块功能配置

sa  sa_data.txt
dev dev_data.txt
dba dba_data.txt
[backup]
comment = "backup dir by oldboy"
path = /backup
[dba]
comment = "backup dir by oldboy"
path = /dba
[dev]
comment = "backup dir by oldboy"
path = /devdata

    b. 守护进程的排除功能实践
    准备环境:
 

[root@nfs01 /]# mkdir -p /oldboy
[root@nfs01 /]# mkdir -p /oldboy/{a..c}
[root@nfs01 /]# touch /oldboy/{a..c}/{1..3}.txt
[root@nfs01 /]# tree /oldboy
/oldboy
├── 01.txt
├── 02.txt
├── a
│?? ├── 1.txt
│?? ├── 2.txt
│?? └── 3.txt
├── b
│?? ├── 1.txt
│?? ├── 2.txt
│?? └── 3.txt
└── c
    ├── 1.txt
    ├── 2.txt
    └── 3.txt


 实例01: 将/oldboy目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录不要做备份
    --exclude=PATTERN
    绝对路径方式:

[root@nfs01 /]# rsync -avz /oldboy --exclude=/oldboy/b/1.txt --exclude=/oldboy/c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
oldboy/
oldboy/01.txt
oldboy/02.txt
oldboy/a/
oldboy/a/1.txt
oldboy/a/2.txt
oldboy/a/3.txt
oldboy/b/
oldboy/b/2.txt
oldboy/b/3.txt

    相对路径方式:

[root@nfs01 /]# rsync -avz /oldboy --exclude=b/1.txt --exclude=c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
oldboy/
oldboy/01.txt
oldboy/02.txt
oldboy/a/
oldboy/a/1.txt
oldboy/a/2.txt
oldboy/a/3.txt
oldboy/b/
oldboy/b/2.txt
oldboy/b/3.txt    
sent 502 bytes  received 177 bytes  1,358.00 bytes/sec
total size is 0  speedup is 0.00

    实例02: 将/oldboy目录下面 a目录数据全部备份 b目录不要备份1.txt文件 c整个目录1.txt 3.txt文件不要备份
    --exclude-from=file  --- 批量排除
    第一个历程: 编辑好一个排除文件

   [root@nfs01 /]# cat /oldboy/exclude.txt
    b/1.txt
    c/1.txt
    c/3.txt
    exclude.txt

    第二个历程: 实现批量排除功能

[root@nfs01 /]# rsync -avz /oldboy --exclude-from=/oldboy/exclude.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
oldboy/
oldboy/01.txt
oldboy/02.txt
oldboy/a/
oldboy/a/1.txt
oldboy/a/2.txt
oldboy/a/3.txt
oldboy/b/
oldboy/b/2.txt
oldboy/b/3.txt
oldboy/c/
oldboy/c/2.txt

    c. 守护进程来创建备份目录

[root@nfs01 /]# rsync -avz /etc/hosts  rsync_backup@172.16.1.41::backup/10.0.0.31/ --password-file=/etc/rsync.password
sending incremental file list
created directory 10.0.0.31
hosts
sent 226 bytes  received 75 bytes  602.00 bytes/sec
total size is 371  speedup is 1.23

    PS: 客户端无法在服务端创建多级目录
    d. 守护进程的访问控制配置
    守护进程白名单和黑名单功能
    PS: 建议只使用一种名单
    e. 守护进程的列表功能配置

[root@nfs01 /]# rsync rsync_backup@172.16.1.41::
backup           "backup dir by oldboy"
dba                "backup dir by oldboy"
dev                "backup dir by oldboy"

 

Rsync备份案例

使用3台服务器主机名分别为web01、backup 、nfs主机信息见下表:

角色外网IP(WAN)内网IP(LAN)主机名 
WEB eth0:10.0.0.7 eth1:172.16.1.7 web01  
NFS eth0:10.0.0.31 eth1:172.16.1.31 nfs01  
Rsync eth0:10.0.0.41 eth1:172.16.1.41 backup  

客户端需求

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02

2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02

3.客户端最后将备份的数据进行推送至备份服务器

4.客户端每天凌晨1点定时执行该脚本

5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间


服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据

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

3.服务端需要每天校验的结果通知给管理员

4.服务端仅保留6个月的备份数据,其余的全部删除

注意:所有服务器的备份目录必须都为/backup

建议备份的数据内容如下:

 # 1.开机自启动配置文件  设备挂载配置文件  本地内网配置文件    (系统配置文件)
 /etc/rc.local       /etc/fstab     /etc/hosts              
 
 # 2.cron定时任务     firewalld防火墙     脚本目录         (重要目录)
 /var/spool/cron/   /etc/firewalld     /server/scripts
 
 # 3.系统日志文件
 /var/log/   /系统安全日志、sudo日志、内核日志、rsyslog日志
 
 # 4.应用程序服务配置文件 nginx、PHP、mysql、redis.....

  1. 客户端备份实现思路,每天凌晨01点定时执行一次脚本(打包->标记->推送->保留最近7天的文件)

 [root@nfs scripts]# vim /server/scripts/client_rsync_backup.sh
 #!/usr/bin/bash​
 # 1.定义变量
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
 Host=$(hostname)
 Addr=$(ifconfig eth1|awk 'NR==2{print $2}')
 Date=$(date +%F)
 Dest=${Host}_${Addr}_${Date}
 Path=/backup​
 # 2.创建备份目录
 [ -d $Path/$Dest ] || mkdir -p $Path/$Dest​
 # 3.备份对应的文件
 cd / && \
 [ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \
 [ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz var/log/messages var/log/secure && \​
 # 4.携带md5验证信息
 [ -f $Path/$Dest/flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date​
 # 5.推送本地数据至备份服务器
 export RSYNC_PASSWORD=123456
 rsync -avz $Path/ rsync_backup@172.16.1.41::backup​
 # 6.本地保留最近7天的数据
 find $Path/ -type d -mtime +7 | xargs rm -rf
 2.客户端编写定时任务,让备份每天凌晨1点执行
 00 01 * * * /bin/bash /server/scripts/client_rsync_backup.sh &>/dev/null
3.服务端校验客户端推送数据的完整性, (校验->存储校验结果->将保存的结果通过邮件发送给管理员->保留最近180天的数据)
 # 1.服务端配置邮件功能
 [root@backup /]# yum install mailx -y
 [root@backup /]# vim /etc/mail.rc        # 文件最后添加
 set from=2543843664@qq.com               # 邮件来源(发件人)
 set smtp=smtps://smtp.qq.com:465         # smtp服务器地址
 set smtp-auth-user=2543843664@qq.com     # 发件人邮箱帐号
 set smtp-auth-password=xcvzpqgrjtmuecaa  # smtp客户端授权密码,登录邮箱设置,并非邮箱密码!
 set smtp-auth=login                      # 需要登录认证
 set ssl-verify=ignore                    # 忽略证书警告
 set nss-config-dir=/etc/pki/nssdb/       # 证书所在目录
 # 2.服务端校验、以及邮件通知脚本
 [root@backup ~]# mkdir /server/scripts -p
 [root@backup ~]# vim /server/scripts/check_backup.sh
 #!/usr/bin/bash
 # 1.定义全局的变量
 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
 # 2.定义局部变量
 Path=/backup
 Date=$(date +%F)
 # 3.查看flag文件,并对该文件进行校验, 然后将校验的结果保存至result_时间
 find $Path/ -type f -name "flag_$Date"|xargs md5sum -c >$Path/result_${Date}
 # 4.将校验的结果发送邮件给管理员
 mailx -s "Rsync Backup $Date" 2543843664@qq.com <$Path/result_${Date}
 # 5.删除超过7天的校验结果文件, 删除超过180天的备份数据文件
 find $Path/ -type f -name "result*" -mtime +7|xargs rm -f
 find $Path/ -type d -mtime +180|xargs rm -rf
 4.服务端编写定时任务脚本
 00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null
扩展多台客户端
5.对其他客户端重复1. 2. 步即可

 rsync服务部署安装过程
    linux系统安装部署服务流程:
    a 下载安装软件  yum
    b 编写配置文件
    c 搭建服务环境  备份的目录/目录权限
    d 启动服务程序     开机自动启动
    e 测试服务功能
 

posted @ 2021-08-08 12:40  上善若水~小辉  阅读(127)  评论(0编辑  收藏  举报