Rsync备份服务

2023-10-30

rsync 软件介绍

rsync是一款开源、快速、多功能、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于Unix/linux/Windows等多种操作系统平台。
rsync官方地址:https://rsync.samba.org/
rsync默认监听端口:873
rsync运行模式:C/S
rsync本身不对数据加密

  • 实现本地备份传输数据(在本地对目录传输要加参数)
    [root@backup ~]# cp -a /etc/hosts /tmp/
    [root@backup ~]# ls /tmp/hosts
    [root@backup ~]# \rm /tmp/hosts
    [root@backup ~]# rsync /etc/hosts /tmp/
    [root@backup ~]# ls /tmp/hosts
    /tmp/hosts
  • 远程备份传输数据
    [root@backup ~]# ls /tmp/hosts
    /tmp/hosts
    [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 d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c.
    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@backup ~]# rsync -rp /etc/hosts 10.0.0.31:/tmp/
    root@10.0.0.31’s password:
  • 实现无差异同步备份(跟源文件保持一致)
    [root@backup znix]# ll
    total 4
    -rw-r–r-- 1 root root 357 Oct 11 15:21 hosts
    [root@backup ~]# mkdir /null
    root@backup ~]# rsync -a == --delete == /null/ /znix/
    [root@backup ~]# ll /znix/
    total 0
    -本地文件信息查看
    [root@backup ~]# ls -l install.log
    -rw-r–r--. 1 root root 21736 Sep 25 08:38 install.log
    [root@backup ~]# rsync install.log
    -rw-r–r-- 21736 2017/09/25 08:38:28 install.log
  • 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能( tar zcvf backup_1.tar.gz /opt/data -exclude=man )
    [root@tecmint]# rsync -avze ssh --include ‘R*’ --exclude ‘*’ root@192.168.0.101:/var/lib/rpm/ /root/rpm
  • 使用==–exclude–include==
    传输R开头的文件、目录,派出其他情况的文件、目录
    root@192.168.0.101’s password:
    receiving incremental file list
    created directory /root/rpm
    ./
    Requirename
    Requireversion
    sent 67 bytes received 167289 bytes 7438.04 bytes/sec
    total size is 434176 speedup is 2.59
  • –max-size用于限制传输时文件的大小,只有≤max-size的文件才会被传输
    [root@tecmint]# rsync -avzhe ssh --max-size=‘200k’ /var/lib/rpm/
  • 传输完毕后自动删除源文件、目录

[root@tecmint]# rsync –remove-source-files -zvh backup.tar /tmp/backups/
[root@tecmint]# ll backup.tar
ls: backup.tar: No such file or directory

  • 如果你对rsync不熟悉,贸然使用rsync可能会搞乱对端文件、目录。借助–dry-run可以让你知道会传输些什么东西,但实际上并没有传输任何东西。如果输出结果与你的预期吻合,可以去掉–dry-run,进行实际的传输工作。

root@tecmint]# rsync –dry-run --remove-source-files -zvh backup.tar /tmp/backups/
backup.tar
sent 35 bytes received 15 bytes 100.00 bytes/sec
total size is 16.18M speedup is 323584.00 (DRY RUN)

  • 使用==–bwlimit==可以设置同步时网络带宽上限

[root@tecmint]# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.100:/root/tmprpm/
root@192.168.0.100’s password:
sending incremental file list
sent 324 bytes received 12 bytes 61.09 bytes/sec
total size is 38.08M speedup is 113347.05

  • rsync由于采用远程更新协议( remote-update protocol ),默认是同步变化的字节或块。使用==-W==可以取消这种机制,整个文件同步

[root@tecmint]# rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes received 31 bytes 3.27M bytes/sec
total size is 16.18M speedup is 1.10

  • 注意:
    /tmp --表示将tmp目录本身及目录下的内容进行传输
    /tmp/ --表示只传输tmp目录下面的内容信息

备份类型

完全备份
就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝。实际应用中就是用一盘磁带对整个系统进行完全备份,包括其中的系统和所有数据。
增量备份
指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加和者被修改的文件;这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。
差异备份: 在全备的基础上,对新增的数据进行备份。

Rsync传输模式

本地方式(类似于使用cp命令,但请注意,虽然rsync和cp能达到相同的目的,但它们的实现方式是不一样的)
远程方式(通过网络传输)
守护进程(运行一个服务一直在后台)

参数

-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
–exclude=PATTERN #指定排除不需要传输的文件模式
–exclude-from=file #文件名所在的目录文件
在这里插入图片描述
–bwlimit=100 #限速传输
–partial #断点续传
–delete #让目标目录和源目录数据保持一致
–password-file=xxx #使用密码文件

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

规划:

1、backup服务器作为rsync服务端

2、以rysnc客户端作为参照物,将数据推到rsync服务器上
配置rsync服务端(将服务端配置到 backup 服务器上)
检测软件是否存在
在这里插入图片描述
3.进行软件服务配置
在这里插入图片描述
4.创建rsync用户
在这里插入图片描述
5.创建数据备份储存目录,目录修改属主
在这里插入图片描述
6.创建认证用户密码文件
在这里插入图片描述
7.启动rsync服

rsync --daemon

至此服务端配置完成
在这里插入图片描述
配置rsync客户端(其他服务器为客户端)
1.软件是否存在
在这里插入图片描述
2.创建认证文件
客户端的认证文件只需要有密码即可
在这里插入图片描述
3.实现数据传输
交互式:在这里插入图片描述
免交互式:
在这里插入图片描述

rsync 命令同步参数选项&特殊参数

目录参数 参数说明
-v,–verbose 详细模式输出,传输时的信息
-z,–compress 传输时进行压缩以提高传输效率–compress-level=NUM 可按级别压缩局域网可以不用压缩
-a,–archive (主要) 归档模式,表示以递归方式传输文件,并保持文件属性。等于-rtopgDl
-r,–recursive 归档于-a 对子目录以递归模式,即目录下的所有目录都同样传输。小写r
-t,–times 归档于-a 保持文件时间信息
-o,–owner 归档于-a 保持文件属主信息
-p,–perms 归档于-a 保持文件权限
-g,–group 归档于-a 保持文件属组信息
-P,–progress 显示同步的过程及传输时的进度等信息(大P)
-D,–devices 归档于-a 保持设备文件信息
-l,–links 归档于-a 保留软连接(小写字母l)
-e,–rsh=COMMAND 使用的信道协议(remote shell),指定替代rsh的shell程序。例如 ssh
–exclude-from=file 文件名所在目录文件,即可以实现排除多个文件
–bwlimit=RATE 限速功能

在这里插入图片描述
实例:
指定IP
在这里插入图片描述
指定配置文件路径:
在这里插入图片描述
服务端指定服务端口:
在这里插入图片描述

定义变量信息实现免秘钥交互

通过man 手册获得方法:
Some modules on the remote daemon may require authentication. If so, you will receive a password prompt when you connect. You can avoid the password prompt by setting the environment variable RSYNC_PASSWORD to the password you want to use or using the --password-file option. This may be useful when scripting rsync.
WARNING: On some systems environment variables are visible to all users. On those systems using --password-file is recommended.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

rsync服务端多模块配置实践

只能有一个虚拟用户
== 第一个历程:编写rsync服务端配置文件 添加多模块==
[backup]
comment = “backup dir by oldboy”
path = /backup
[backupdba]
comment = “backup dir by oldboy”
path = /backupdba
[backupdev]
comment = “backup dir by oldboy”
path = /backupdev
第二个历程:rsync服务端创建备份目录
服务端:
命令:
mkdir /{backupdev,backupdba,backupsa}
chown -R rsync.rsync /{backupdev,backupdba,backupsa}
ll -d /{backupdev,backupdba,backupsa}
[root@backup ~]# mkdir /backupdba
[root@backup ~]# mkdir /backupsa
[root@backup ~]# mkdir /backupdev
[root@backup ~]# chown -R rsync.rsync /backupdba
[root@backup ~]# chown -R rsync.rsync /backupsa
[root@backup ~]# chown -R rsync.rsync /backupdev
第三个历程:重启rsync服务
分步式:
killall rsync 杀掉进程
rsync --daemon 重启服务
一键式:
killall rsync;sleep 3;rsync --daemon — 服务重启脚本中的命令
[root@backup ~]# killall rsync;sleep 2; rsync --daemon
第四个历程:进行测试
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backupdba --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 202 bytes received 27 bytes 458.00 bytes/sec
total size is 379 speedup is 1.66
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backupsa --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 202 bytes received 27 bytes 458.00 bytes/sec
total size is 379 speedup is 1.66
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backupdev --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 202 bytes received 27 bytes 458.00 bytes/sec
total size is 379 speedup is 1.66
注意:此处是copy到一个目录下的子目录;注意要逐层创建,如果backupdev/1/2 必须要建立在backupdev/1/有的前提下
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backupdev/1/ --password-file=/etc/rsync.password
sending incremental file list
created directory 1
hosts
sent 202 bytes received 27 bytes 152.67 bytes/sec
total size is 379 speedup is 1.66
[root@backup ~]# ls /backup*
/backup:
history
/backupdba:
hosts
/backupdev:
1 hosts
/backupsa:
hosts
3. rsync服务端自动创建目录信息
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backupdev/1/ --password-file=/etc/rsync.password
sending incremental file list
created directory 1
hosts
sent 200 bytes received 27 bytes 454.00 bytes/sec
total size is 379 speedup is 1.67
强调:不能创建多级目录;
注意:此处是copy到一个目录下的子目录;注意要逐层创建,如果backupdev/1/2 必须要建立在backupdev/1/有的前提下

Rsync服务实践

主机角色 外围IP(NAT) 内网IP(LAN) 主机名称
Rsync服务端 10.0.0.41 172.16.1.41 backup
Rsync客户端 10.0.0.31 172.16.1.31 nfs

服务端

  • 安装Rsync
#先检查是否安装了rsync服务
[root@backup data]# rpm -qa rsync                             #使用命令rpm -qa rsync
rsync-3.1.2-6.el7_6.1.x86_64
[root@mumu ~]# yum install -y rsync
  • 配置Rsync配置文件 /etc/rsyncd.conf
uid = rsync                      # 运行进程的用户
gid = rsync                      # 运行进程的用户组
port = 873                       # 监听端口
fake super = yes                 # 无需让rsync以root身份运行,允许接收文件的完整属性
use chroot = no                  # 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 200            # 最大连接数
timeout = 600                    # 超时时间
ignore errors                    # 忽略错误信息
read only = false                # 对备份数据可读写
list = false                     # 不允许查看模块信息
auth users = rsync_backup        # 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd # 定义rsync服务用户连接认证密码文件路径

[backup]                # 定义模块信息
comment = commit        # 模块注释信息
path = /backup          # 定义接收备份数据目录
  • 创建rsync进程启动时需要使用的用户
[root@backup ~]# useradd rsync -M -s /sbin/nologin 
[root@backup ~]# id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
  • 创建存储备份数据的目录,并进行授权
[root@backup ~]# mkdir /backup
[root@backup ~]# ll -d /backup  
[root@backup ~]# chown -R rsync.rsync /backup/                  #把属主、属组修改为rsync
[root@backup ~]# ll -d /backup/
drwxr-xr-x 3 rsync rsync 37 Jul 16 15:30 /backup/

  • 创建密码文件,在密码文件中写入对应的虚拟用户以及虚拟用户的密码
/etc/rsync.passwd---> rsync虚拟用户以及rsync虚拟用户的密码
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
[root@backup ~]# cat /etc/rsync.passwd 
rsync_backup:123456
[root@backup ~]# ll /etc/rsync.passwd 
-rw-r--r-- 1 root root 20 Jul 16 16:31 /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd                    #设置权限为:仅属主可读可写
[root@backup /]# ll /etc/rsync.passwd 
-rw------- 1 root root 20 Jul 16 16:31 /etc/rsync.passwd

  • 启动rsync服务并加入开机自启动
[root@backup ~]# systemctl start rsyncd.service 
[root@backup ~]# systemctl enable rsyncd
[root@backup /]# netstat -lntp                                  #检查rsync的873端口是否存在
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      
8472/rsync

客户端

  • 在客户端的服务器上编辑密码文件,输入密码为:123
[root@nfs ~]# echo "123456" > /etc/rsync.passwd
[root@nfs ~]# cat /etc/rsync.passwd 
123456
  • 授权密码文件
[root@nfs ~]# ll /etc/rsync.passwd 
-rw-r--r-- 1 root root 7 Jul 16 16:53 /etc/rsync.passwd
[root@nfs ~]# chmod 600 /etc/rsync.passwd                       #设置权限位:仅属主可读可写
[root@nfs ~]# ll /etc/rsync.passwd 
-rw------- 1 root root 7 Jul 16 16:53 /etc/rsync.passwd
  • 客户端nfs推送(注意加/ 和不加/的区别)
[root@nfs ~]# rsync -avz /etc/ rsync_backup@172.16.1.41::backup #推送/etc/下面的内容
[root@nfs ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup  #推送/etc这个目录

  • 客户端拉取
[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt
拉取服务端172.16.1.41的backup目录下面的所有内容至本地的 /opt目录

Rsync无差异同步

推送方式实现无差异

客户端:
[root@nfs nfs]# pwd
/nfs
[root@nfs nfs]# ll service/
total 0
-rw-r--r-- 1 root root 0 Jul 16 18:04 111
-rw-r--r-- 1 root root 0 Jul 16 18:02 222
-rw-r--r-- 1 root root 0 Jul 16 18:02 333
[root@nfs nfs]# rsync -avz ./service rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
service/
service/111
service/222
service/333

sent 232 bytes  received 85 bytes  126.80 bytes/sec
total size is 0  speedup is 0.00
[root@nfs nfs]#

服务端:
[root@backup backup]# pwd
/backup
[root@backup backup]# ll
total 0
drwxr-xr-x 2 rsync rsync 39 Jul 16 18:04 service
[root@backup backup]# ll service/
total 0
-rw-r--r-- 1 rsync rsync 0 Jul 16 18:04 111
-rw-r--r-- 1 rsync rsync 0 Jul 16 18:02 222
-rw-r--r-- 1 rsync rsync 0 Jul 16 18:02 333
[root@backup backup]#

客户端:
[root@nfs nfs]# rm -rf service/111 
[root@nfs nfs]# ll service/
total 0
-rw-r--r-- 1 root root 0 Jul 16 18:02 222
-rw-r--r-- 1 root root 0 Jul 16 18:02 333
[root@nfs nfs]#rsync -avz --delete ./service rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
deleting service/111
service/

sent 106 bytes  received 43 bytes  59.60 bytes/sec
total size is 0  speedup is 0.00
[root@nfs nfs]#

服务端:
[root@backup backup]# ll service/
total 0
-rw-r--r-- 1 rsync rsync 0 Jul 16 18:02 222
-rw-r--r-- 1 rsync rsync 0 Jul 16 18:02 333
[root@backup backup]# 

拉取方式实现无差异

服务端:
[root@backup backup]# ll service/
total 0
-rw-r--r-- 1 root root 0 Jul 16 18:20 111
-rw-r--r-- 1 root root 0 Jul 16 18:20 222
-rw-r--r-- 1 root root 0 Jul 16 18:20 333
-rw-r--r-- 1 root root 0 Jul 16 18:20 444
[root@backup backup]#

客户端:
[root@nfs nfs]# ll service/
total 0
[root@nfs nfs]# rsync -avz rsync_backup@172.16.1.41::backup ./
Password: 
receiving incremental file list
service/
service/111
service/222
service/333
service/444

sent 108 bytes  received 310 bytes  167.20 bytes/sec
total size is 0  speedup is 0.00
[root@nfs nfs]# ll service/
total 0
-rw-r--r-- 1 root root 0 Jul 16 18:20 111
-rw-r--r-- 1 root root 0 Jul 16 18:20 222
-rw-r--r-- 1 root root 0 Jul 16 18:20 333
-rw-r--r-- 1 root root 0 Jul 16 18:20 444
[root@nfs nfs]#

服务端:
[root@backup backup]# rm -rf service/111 
[root@backup backup]# rm -rf service/222
[root@backup backup]# ll service/
total 0
-rw-r--r-- 1 root root 0 Jul 16 18:20 333
-rw-r--r-- 1 root root 0 Jul 16 18:20 444
[root@backup backup]#

客户端:
[root@nfs nfs]# rsync -avz --delete rsync_backup@172.16.1.41::backup ./
Password: 
receiving incremental file list
deleting service/222
deleting service/111

sent 25 bytes  received 133 bytes  63.20 bytes/sec
total size is 0  speedup is 0.00
[root@nfs nfs]# ll service/
total 0
-rw-r--r-- 1 root root 0 Jul 16 18:20 333
-rw-r--r-- 1 root root 0 Jul 16 18:20 444
[root@nfs nfs]#

Rsync传输限速

对传输时候进行限速:
[root@nfs ~]# dd if=/dev/zero of=./size.disk bs=1M count=500  生成大文件

限制传输的速率为1MB 
[root@nfs ~]# rsync -avzP --bwlimit=1 ./size.disk rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
size.disk
    118,358,016  22%    1.01MB/s    0:06:33 
rsync参数:-avz
-a           #归档模式传输, 等于-tropgDl
-v           #详细模式输出, 打印速率, 文件数量等
-z           #传输时进行压缩以提高效率
-r           #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t           #保持文件时间信息
-o           #保持文件属主信息
-p           #保持文件权限
-g           #保持文件属组信息
-l           #保留软连接
-P           #显示同步的过程及传输时的进度等信息
-D           #保持设备文件信息
-L           #保留软连接指向的目标文件
-e           #使用的信道协议,指定替代rsh的shell程序  ssh
--exclude=PATTERN   #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100       #限速传输
--partial           #断点续传
--delete            #让目标目录和源目录数据保持一致

Rsync备份案例

已知3台服务器主机名分别为 web01、backup、nfs 主机信息如下:

主机角色 外网IP(NAT) 内网(LAN) 主机名称
WEB 10.0.0.7 172.16.1.7 web01
NFS 10.0.0.31 172.16.1.31 nfs
Rsync 10.0.0.41 172.16.1.41 backup

客户端需求:

1、客户端提前准备存放的备份的目录,目录规则如下/backup/nfs_172.16.1.31_2019-07-17
2、客户端在本地打包备份(系统配置文件、应用配置文件等)拷贝至/backup/nfs_172.16.1.31_2019-07-17
3、客户端最后将备份的数据进行推送至备份服务器
4、客户端每天凌晨一点定时执行该脚本
5、客户端服务器本地保留最近7天的数据,避免磁盘浪费空间

服务端

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

客户端

  • 每天创建一个当天的备份文件夹
#目录格式为 "主机名_ip_当天日期"
[root@nfs ~]# hostname                                      #主机名获取
nfs
[root@nfs ~]# ifconfig eth1 | awk 'NR==2 {print $2}'        #本机ip获取
172.16.1.31
[root@nfs ~]# date +%F                                      #当天日期获取
2019-07-17

#获取指定格式的目录名称:
[root@nfs ~]# echo `hostname`_`ifconfig eth1 | awk 'NR==2 {print $2}'`_`date +%F`
nfs_172.16.1.31_2019-07-17
#或者
[root@nfs ~]# echo $(hostname)_$(ifconfig eth1 | awk 'NR==2 {print $2}')_$(date +%F)
nfs_172.16.1.31_2019-07-17
[root@nfs ~]#

#创建指定格式的目录:
[root@nfs ~]# mkdir /backup/`hostname`_`ifconfig eth1 | awk 'NR==2 {print $2}'`_`date +%F`
[root@nfs ~]# ll /backup/
total 0
drwxr-xr-x 2 root root 6 Jul 17 17:20 nfs_172.16.1.31_2019-07-17
#或者
[root@nfs ~]# rm -rf /backup/*
[root@nfs ~]# ll /backup/
total 0
[root@nfs ~]# mkdir -p /backup/$(hostname)_$(ifconfig eth1 | awk 'NR==2 {print $2}')_$(date +%F)
[root@nfs ~]# ll /backup/
total 0
drwxr-xr-x 2 root root 6 Jul 17 17:21 nfs_172.16.1.31_2019-07-17
[root@nfs ~]#
  • 将文件每天备份
[root@nfs ~]# cp -ar /etc/fstab /var/spool/cron/ /tmp/yum.log /backup/nfs_172.16.1.31_2019-07-17
[root@nfs ~]# ll /backup/nfs_172.16.1.31_2019-07-17/
total 4
drwx------. 2 root root   6 Apr 11  2018 cron
-rw-r--r--. 1 root root 501 Jul 13 10:45 fstab
-rw-------. 1 root root   0 Jul 13 10:45 yum.log
  • 推送数据至备份服务器
[root@nfs ~]# rsync -avz /backup/nfs_172.16.1.31_2019-07-17 rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
nfs_172.16.1.31_2019-07-17/
nfs_172.16.1.31_2019-07-17/fstab
nfs_172.16.1.31_2019-07-17/sys.tar.gz
nfs_172.16.1.31_2019-07-17/yum.log
nfs_172.16.1.31_2019-07-17/cron/

sent 1,062 bytes  received 93 bytes  256.67 bytes/sec
total size is 958  speedup is 0.83
[root@nfs ~]# 
  • 脚本执行推送
#将前几步写成脚本
[root@nfs ~]# cat /server/scripts/client_push_data.sh 
#!/bin/bash
mkdir /backup/`hostname`_`ifconfig eth1 | awk 'NR==2 {print $2}'`_`date +%F`
cp -ar /etc/fstab /var/spool/cron/ /tmp/yum.log /backup/nfs_172.16.1.31_2019-07-17
export RSYNC_PASSWORD=123456
rsync -avz /backup/nfs_172.16.1.31_2019-07-17 rsync_backup@172.16.1.41::backup
  • 每天定时推送数据
[root@nfs ~]# crontab -l
#每天凌晨一点推送数据
00 01 * * * /bin/bash /server/scripts/client_push_data.sh
  • 数据清理(仅保留七天数据)
#数据太少,生成30天的文件
[root@nfs ~]# for i in {1..30};do date -s 2018/12/$i;sh /server/scripts/client_push_data.sh ;done
[root@nfs ~]# ls /backup/
nfs_172.16.1.31_2018-12-01  nfs_172.16.1.31_2018-12-12  nfs_172.16.1.31_2018-12-23
nfs_172.16.1.31_2018-12-02  nfs_172.16.1.31_2018-12-13  nfs_172.16.1.31_2018-12-24
nfs_172.16.1.31_2018-12-03  nfs_172.16.1.31_2018-12-14  nfs_172.16.1.31_2018-12-25
nfs_172.16.1.31_2018-12-04  nfs_172.16.1.31_2018-12-15  nfs_172.16.1.31_2018-12-26
nfs_172.16.1.31_2018-12-05  nfs_172.16.1.31_2018-12-16  nfs_172.16.1.31_2018-12-27
nfs_172.16.1.31_2018-12-06  nfs_172.16.1.31_2018-12-17  nfs_172.16.1.31_2018-12-28
nfs_172.16.1.31_2018-12-07  nfs_172.16.1.31_2018-12-18  nfs_172.16.1.31_2018-12-29
nfs_172.16.1.31_2018-12-08  nfs_172.16.1.31_2018-12-19  nfs_172.16.1.31_2018-12-30
nfs_172.16.1.31_2018-12-09  nfs_172.16.1.31_2018-12-20  nfs_172.16.1.31_2019-07-17
nfs_172.16.1.31_2018-12-10  nfs_172.16.1.31_2018-12-21
nfs_172.16.1.31_2018-12-11  nfs_172.16.1.31_2018-12-22

[root@nfs ~]# find /backup/ -type d -mtime +7 | xargs rm -rf 
[root@nfs ~]# ls /backup/
nfs_172.16.1.31_2018-12-23  nfs_172.16.1.31_2018-12-26  nfs_172.16.1.31_2018-12-29
nfs_172.16.1.31_2018-12-24  nfs_172.16.1.31_2018-12-27  nfs_172.16.1.31_2018-12-30
nfs_172.16.1.31_2018-12-25  nfs_172.16.1.31_2018-12-28  nfs_172.16.1.31_2019-07-17

  • 添加校验方式
#md5sum只能针对文件做标记
[root@nfs ~]# tar zcf /backup/nfs_172.16.1.31_2019-07-17/sys.tar.gz /etc/fstab /var/spool/cron/ /tmp/yum.log
[root@nfs ~]# ll /backup/nfs_172.16.1.31_2019-07-17/
total 8
drwx------. 2 root root  18 Jul 17 20:16 cron
-rw-r--r--. 1 root root 501 Jul 13 10:45 fstab
-rw-r--r--  1 root root 544 Jul 17 21:29 sys.tar.gz
-rw-------. 1 root root   0 Jul 13 10:45 yum.log
[root@nfs ~]# md5sum /backup/nfs_172.16.1.31_2019-07-17/sys.tar.gz > /backup/nfs_172.16.1.31_2019-07-17/flag_2019-07-17
[root@nfs ~]# ll /backup/nfs_172.16.1.31_2019-07-17/
total 12
drwx------. 2 root root  18 Jul 17 20:16 cron
-rw-r--r--  1 root root  80 Jul 17 21:32 flag_2019-07-17
-rw-r--r--. 1 root root 501 Jul 13 10:45 fstab
-rw-r--r--  1 root root 544 Jul 17 21:29 sys.tar.gz
-rw-------. 1 root root   0 Jul 13 10:45 yum.log
md5sum -c /backup/nfs_172.16.1.31_2019-07-17/flag_2019-07-17 
/backup/nfs_172.16.1.31_2019-07-17/sys.tar.gz: OK
  • 客户端脚本
#!/bin/bash

#1.定义变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
SRC=/backup
HOST=$(hostname)
ADDR=$(ifconfig eth1|awk 'NR==2 {print $2}')
DATE=$(date +%F)
DEST=${HOST}_${ADDR}_${DATE}

#2.创建目录
mkdir -p $SRC/$DEST

#3.备份文件
cd / && \
[ -f $SRC/$DEST/sys.tar.gz ] || tar czf $SRC/$DEST/sys.tar.gz etc/fstab etc/passwd && \
[ -f $SRC/$DEST/other.tar.gz ] || tar czf $SRC/$DEST/other.tar.gz var/spool/cron/ server/scripts && \

#4.使用md5sum做标记
[ -f $SRC/$DEST/flag_$DATE ] || md5sum $SRC/$DEST/*.tar.gz  > $SRC/$DEST/flag_$DATE

#5.本地推送到备份服务器
export RSYNC_PASSWORD=123456
rsync -avz $SRC/$DEST rsync_backup@172.16.1.41::backup

#6.保留最近七天数据
find $SRC/ -type d -mtime +7|xargs rm -rf 

服务端

  • 校验上传上来的文件是否完整
[root@nfs ~]# md5sum -c nfs_172.16.1.31_2019-07-17/flag_2019-07-17 
/backup/nfs_172.16.1.31_2019-07-17/other.tar.gz: OK
/backup/nfs_172.16.1.31_2019-07-17/sys.tar.gz: OK

  • 发送校验结果给管理员
[root@backup ~]# yum install mailx -y
[root@backup ~]# vim /etc/mail.rc
set from=123@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=123@qq.com
set smtp-auth-password=客户端授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
#验证发送邮件
[root@backup ~]# mail -s "数据备份校验结果" 1240206455@qq.com < backup/result_2019-07-18

  • 服务端脚本
#!/bin/bash

#1.定义变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
SRC=/backup
DATE=$(date +%F)

#2.使用md5sum进行校验,并保存校验结果
md5sum -c $SRC/*_$DATE/flag_$DATE > $SRC/result_$DATE

#3.将保存的结果文件发送给管理员
mail -s "Rsync Backup $DATE" 1240206455@qq.com <$SRC/result_$DATE

#4.保留最近180天的数据
find $SRC/ -type d -mtime +180|xargs rm -rf

  • Rsync扩展多台备份
[root@web01 ~]# hostname
web01
[root@web01 ~]# rsync -avz root@172.16.1.31:/server /
root@172.16.1.31's password: 
receiving incremental file list
server/
server/scripts/
server/scripts/client_push_data.sh

sent 55 bytes  received 682 bytes  491.33 bytes/sec
total size is 776  speedup is 1.05
[root@web01 ~]#
[root@web01 ~]# sh /server/scripts/client_push_data.sh 
sending incremental file list
web01_172.16.1.7_2019-07-18/
web01_172.16.1.7_2019-07-18/flag_2019-07-18
web01_172.16.1.7_2019-07-18/other.tar.gz
web01_172.16.1.7_2019-07-18/sys.tar.gz

sent 1,940 bytes  received 85 bytes  4,050.00 bytes/sec
total size is 1,705  speedup is 0.84
[root@web01 ~]# 

#服务端查看
[root@backup ~]# hostname
backup
[root@backup ~]# ll /backup/
total 8
drwxr-xr-x 2 rsync rsync  67 Jul 17 22:17 nfs_172.16.1.31_2019-07-17
drwxr-xr-x 2 rsync rsync  67 Jul 18 09:06 nfs_172.16.1.31_2019-07-18
-rw-r--r-- 1 root  root  102 Jul 17 22:29 result_2019-07-17
-rw-r--r-- 1 root  root  102 Jul 18 09:07 result_2019-07-18
drwxr-xr-x 2 rsync rsync  67 Jul 18 10:13 web01_172.16.1.7_2019-07-18
[root@backup ~]#
  • Rsync备份案例图解思路

1、客户端准备存储文件目录(/backup/主机名_ip_时间)
2、客户端将要备份的文件打包并放到存储目录下(/backup/主机名_ip_时间/*.tar.gz)
3、客户端使用md5给每个打包文件增加校验标记(flag_时间)
4、客户端通过rsync将数据推送至备份服务器的指定目录下(/backup)
5、客户端定时清理,只保留最近7天数据
6、服务端创建接收客户端数据的目录(/backup)
7、服务端使用md5校验客户端每天推过来的数据是否正确(md5sum -c flag_时间)
8、服务端将校验结果存储至指定文件(result_时间)
9、服务端定时将校验结果以邮件形式发送给管理员
10、服务端定时清理数据,只保留最近180天的数据

Rsync结合inotify[扩展]

  • 安装inotify
 yum -y install inotify-tools
  • inotify参数说明
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
    %Xe 事件
    %w 目录
    %f 文件
-e 指定监控的事件
    access 访问
    modify 内容修改
    attrib 属性修改
    close_write 修改真实文件内容
    open 打开
    create 创建
    delete 删除
    umount 卸载
  • 命令测试
 /usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /backup
  • 脚本编写
    粗糙版:
[root@backup ~]# vim rsyn-inotify.sh
#!/bin/bash
dir=/backup
/usr/bin/inotifywait  -mrq  --format '%w %f' -e create,delete,attrib,close_write  $dir | while read line;do
cd  $dir  && rsync -az -R  --delete  .  rsync_backup@172.16.1.31::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1
done  &

精油版:

#!/bin/bash
src=/data
des=backup
rsync_passwd_file=/etc/rsync.passwd
ip1=172.16.1.41
user=rsync_backup
cd ${src}
/usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
do
        INO_EVENT=$(echo $file | awk '{print $1}')
        INO_FILE=$(echo $file | awk '{print $2}')
        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
        then
                rsync -azcR --password-file=${rsync_passwd_file} ${INO_FILE} ${user}@${ip1}::${des}
        fi
        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
        then
                rsync -azR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1
        fi
        if [[ $INO_EVENT =~ 'ATTRIB' ]]
        then
                if [ ! -d "$INO_FILE" ]
                then
                        rsync -azcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1
                fi
        fi
done &
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rsync备份服务 的相关文章

  • 设计模式之工厂方法模式

    定义 定义一个用于创建对象的接口 让子类决定实例化哪个类 使用场景 在任何需要生成复杂对象的地方 都可以使用工厂方法模式 复杂对象适合使用工厂模式 public interface Car public void make public v
  • db2实现两个数相减_DB2中求两个日期之间相差多少个月?

    DB2中怎么来求两个日期之间相差多少个月呢 今天在工作中遇到一个问题 就是怎么在DB2中怎么来求两个日期之间相差多少个月呢 结果找到一个方法如下 在DB2中两个日期之间相减会等到一个整数总共有六种情况分别是 select date 2010
  • HTML登录页面

    第一步 构建HTML框架 简介 本文用最通俗的语言 一步步教会大家CSS构建登录页面 首先构建HTML框架 包含用户名 密码 记住密码 注册这几个功能 如果大家HTML不牢固 请看我的这篇博客 https blog csdn net qq
  • nginx系列(十七)nginx下的gzip与vary、预压缩、缓存、反向代理的结合

    size xx large 前言 size 在http的协议里 为了减少网络传输 允许将报文进行gzip压缩以后再传输 虽然网络传输体积减小了 但是服务器压缩和浏览器的解压缩消耗了CPU的计算 后来出现了预压缩技术 就是提前把静态文件进行g
  • Coordinate Attention 论文阅读

    Coordinate Attention 论文阅读 背景 研究表明通道注意力可以显著提升了模型性能 但是在以往的工作中通常忽略了位置信息 而位置信息对于生成空间注意力非常重要 为了利用位置信息 Coordinate Attention 将位
  • 关于示波器引入50HZ工频干扰的解释

    前几天 小白在实验室工作时 听到同事抱怨示波器有问题 上前查看 才知道 小白的那位同事在测量信号波形时 实际与理想相差甚远 在探头什么也不接的情况下 发现示波器本身也存在波形信号 于是乎 便有了前述说的抱怨 由于没有保存当时的波形 事后小白
  • 浏览器输入url后经历的过程(详细)

    页面加载流程 DNS查询 TCP连接 发送HTTP请求 服务器处理HTTP请求并返回HTTP报文 浏览器解析并render页面 HTTP连接断开 1 DNS查询 浏览器查看浏览器缓存 gt 系统缓存 gt 查找本地host文件 gt 本地D
  • vue 中 ref 、$refs 的用法

    ref 的三种用法 1 ref 加在普通的元素上 用this ref name 获取到的是dom元素 2 ref 加在子组件上 用this ref name 获取到的是组件实例 可以使用组件的所有方法 3 如何利用 v for 和 ref
  • 凸优化及拉格朗日对偶问题

    只记录机器学习方法中需要用到的最优化知识 不做系统总结 持续更新ing 文章目录 1 凸优化 1 凸集 2 凸性条件 3 凸规划 4 凸规划性质 5 凸优化问题 2 拉格朗日函数及其对偶问题 1 拉格朗日函数 含KKT条件 2 拉格朗日对偶
  • pnpm:简介

    一 概念 performant npm 意味 高性能的 npm pnpm由npm yarn衍生而来 解决了npm yarn内部潜在的bug 极大的优化了性能 扩展了使用场景 被誉为 最先进的包管理工具 二 特点 速度快 节约磁盘空间 支持m
  • keras测试环境搭建

    使用的是windows 22h2 在windows中测试 目前看 如果所有用到的库都是pip可以安装的 就可以在windows测试 考虑cuda cudnn对于操作系统的影响太大了 所以只测试了DirectML 安装python3 8 安装
  • 密码爆破总结

    密码爆破经验分享 什么是密码爆破 密码爆破 通过不断输入密码试错 直到成功为止 密码爆破原理 原理 通过不断请求连接 修改连接中的参数 把对应密码的参数遍历字典 自己创建 或者网上获取 根据连接返回的参数来确定是否爆破成功 总结 建立连接
  • MacOS提示【您没有权限来打开应用程序“XXX”。】的完美解决办法

    前言 在 macOS Big Sur 系统下运行一些注册机类的应用程序 大概率会提示 您没有权限来打开应用程序 XXX 请联系您的电脑或网络管理员以获得帮助 信息 具体如下图 下面给出解决办法 说明 本人电脑为新款 MacBook Pro
  • vuex内容及使用详解

    Vuex是什么 Vuex 是一个专为 Vue js 应用程序开发的状态管理模式 它采用集中式存储管理应用的所有组件的状态 并以相应的规则保证状态以一种可预测的方式发生变化 说起状态管理模式 就不得不提起一个名词 单向数据流 单向数据流 在V
  • ubuntu vi/vim退出文件

    要退出 但是不保存 按esc先 然后输入 q 回车键即可退出 无法退出 则在 q 加入一个叹号回车键就行了 要退出保存的 则输入 wq 强制保存退出 则输入 wq 看到此时已经退出 在等待命令状态 以nano开头编辑文件的 则要退出 按 C
  • SQL Server学习之复合索引

    概要什么是单一索引 什么又是复合索引呢 何时新建复合索引 复合索引又需要注意些什么呢 本篇文章主要是对网上一些讨论的总结 一 概念单一索引是指索引列为一列的情况 即新建索引的语句只实施在一列上 用户可以在多个列上建立索引 这种索引叫做复合索
  • GPT系列模型技术路径演进

    目录 前言 Transformer GPT 1 BERT GPT 2 GPT 3 InstructGPT ChatGPT GPT 4 类ChatGPT产品 Google Bard 诗人 facebook LLaMA 羊驼 复旦 MOSS 清
  • 源码安装ODOO12

    要从源码安装 Odoo 我们首先要从 GitHub 上克隆一套 Odoo 源代码 mkdir home tderp conda envs odoo12 odoo dev 在odoo12虚环境下创建工作目录 cd home tderp con

随机推荐