rsync搭建全网备份
rsync搭建全网备份
- 1. 总体概述
- 1.1 目标
- 1.2 简易指导图
- 1.3 涉及工具或命令
- 1.4 环境
- 2. 实施
- 2.1 配置备份服务器
- 2.2 备份文件准备
- 2.3 整合命令
- 2.4 扩展功能
1. 总体概述
1.1 目标
本次搭建目标:
- 每天定时把服务器数据备份到备份服务器
- 备份完成后进行校验
- 把过期数据删除(普通服务器数据保留7天,备份服务器数据保留1年)
- 完成后邮件通知
1.2 简易指导图
1.3 涉及工具或命令
rsysnc
:备份工具,守护进程模式cron
:定时任务md5sum
:MD5校验工具mailx
:邮件tar
、find
、date
等等
1.4 环境
服务器 | ip | 系统版本 | 说明 |
---|---|---|---|
backup-svr-01 | 192.168.202.128 | CentOS Linux release 7.9.2009 (Core) | 备份服务器 |
data-svr-01 | 192.168.202.129 | CentOS Linux release 7.9.2009 (Core) | 数据服务器 |
2. 实施
在每个步骤中,会把具体的需求细化分解
2.1 配置备份服务器
- 创建备份目录
[root@backup-svr-01 ~]# chown rsync.rsync /backup/
[root@backup-svr-01 ~]# ll /backup/ -d
drwxr-xr-x 2 rsync rsync 6 Aug 29 16:39 /backup/
- 创建rsync进程使用的用户
[root@backup-svr-01 ~]# useradd -s /sbin/nologin -M rsync
[root@backup-svr-01 ~]# id rsync
uid=1003(rsync) gid=1004(rsync) groups=1004(rsync)
客户端连到备份服务器用rsync用户访问权限访问数据,这个用户只提供访问权限,所以不需要登录shell
- 创建客户端访问备份服务器的账户
[root@backup-svr-01 ~]# echo "rsync_bak_01:rsync" > /etc/rsync.passwd
[root@backup-svr-01 ~]# cat /etc/rsync.passwd
rsync_bak_01:rsync
[root@backup-svr-01 ~]# chmod 400 /etc/rsync.passwd
[root@backup-svr-01 ~]# ll /etc/rsync.passwd
-r-------- 1 root root 19 Aug 29 16:51 /etc/rsync.passwd
- 编译rsync的配置文件
没有安装
rsync
可以通过yum install -y rsync
安装
[root@backup-svr-01 ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon modeuid = rsync
gid = rsync
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
# exclude = lost+found/
# transfer logging = yes
timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
fake super = yes
[backup]
path = /backup/ #备份到服务器的目录
ignore errors
read only = false
list = false
hosts allow = 192.168.202.0/24 #允许的IP范围
hosts deny = 0.0.0.0/32 #其他IP都禁止
auth users = rsync_bak_01
secrets file = /etc/rsync.passwd
配置完成后重启rsyncd
服务
[root@backup-svr-01 ~]# systemctl restart rsyncd
- 测试
rsync
首先在客户端配置密码文件
[root@data-svr-01 ~]# cat /etc/rsync.passwd
rsync
传输测试
[root@data-svr-01 ~]# rsync -avz /etc/hosts rsync_bak_01@192.168.202.128::backup --password-file=/etc/rsync.passwd
sending incremental file list
hostssent 187 bytes received 43 bytes 153.33 bytes/sec
total size is 254 speedup is 1.10[root@backup-svr-01 ~]# ll /backup/
total 4
-rw-r--r-- 1 rsync rsync 254 May 9 2023 hosts
2.2 备份文件准备
这里我们在普通服务器(客户端),把一些常用文件,重要数据等内容进行备份,视具体情况而定
本次示例中以/etc
目录为例
- 创建备份数据存放目录
[root@data-svr-01 ~]# mkdir /data
这里我们把备份数据存放在/data/ip
目录中
mkdir -p /data/`ip a s ens33|sed -rn '3 s#^[^[:digit:]]+(.*)/.*#\1#gp'`
取IP可以有多种方式,例如:
[root@data-svr-01 ~]# hostname -I|awk '{print $1}'
192.168.202.129
[root@data-svr-01 ~]# ip a s ens33|awk 'BEGIN{FS="inet |/24"} NR==3{print $2}'
192.168.202.129
- 打包数据,并以时间进行区分
打包数据
[root@data-svr-01 ~]# tar zcf /data/`ip a s ens33|sed -rn '3 s#^[^[:digit:]]+(.*)/.*#\1#gp'`/etc.`date +%F`.tar.gz /etc/
tar: Removing leading `/' from member names
查看
[root@data-svr-01 ~]# tree /data/
/data/
└── 192.168.202.129└── etc.2024-08-29.tar.gz1 directory, 1 file
后面我们会把这些命令整理到脚本中,目前只是测试
2.3 整合命令
我们把前面用到的命令整合到脚本中,并进行测试
- 编写脚本
[root@data-svr-01 scripts]# cat etc_bak2svr.sh
#!/bin/bash
#author yurq#set -e. /etc/profileip=`ip a s ens33|sed -rn '3 s#^[^[:digit:]]+(.*)/.*#\1#gp'`
time=`date +%F`
svr=192.168.202.128if [ ! -d /data/$ip ];thenmkdir -p /data/$ip
fitar zcf /data/$ip/etc.$time.tar.gz /etc/if [ $? -ne 0 ];thenecho "tar etc failed"
fils /data/$ip/etc.$time.tar.gzif [ $? -ne 0 ];thenecho "etc.$time.tar.gz lost found."
firsync -avz /data/$ip/etc.$time.tar.gz rsync_bak_01@$svr::backup --password-file=/etc/rsync.passwdif [ $? -ne 0 ];thenecho "rsync failed"
fi
- 测试脚本
客户端
[root@data-svr-01 scripts]# rm -rf /data/*
[root@data-svr-01 scripts]# sh etc_bak2svr.sh
tar: Removing leading `/' from member names
/data/192.168.202.129/etc.2024-08-29.tar.gz
sending incremental file list
etc.2024-08-29.tar.gzsent 10,207,860 bytes received 43 bytes 4,083,161.20 bytes/sec
total size is 10,411,198 speedup is 1.02
服务器
[root@backup-svr-01 ~]# ll /backup/
total 10168
-rw-r--r-- 1 rsync rsync 10411198 Aug 29 19:42 etc.2024-08-29.tar.gz
这并不是我们想要的,rsync
我们在使用的时候,应该把ip
构建的目录也带上一起传过去
- 修改脚本
rsync -avz /data/$ip rsync_bak_01@$svr::backup --password-file=/etc/rsync.passwd
把这行给了就可以了,注意ip
后不要加/
- 清理环境,重新上传
[root@data-svr-01 scripts]# sh etc_bak2svr.sh
tar: Removing leading `/' from member names
/data/192.168.202.129/etc.2024-08-29.tar.gz
sending incremental file list
192.168.202.129/
192.168.202.129/etc.2024-08-29.tar.gzsent 10,207,905 bytes received 47 bytes 6,805,301.33 bytes/sec
total size is 10,411,198 speedup is 1.02
[root@backup-svr-01 ~]# tree /backup/
/backup/
└── 192.168.202.129└── etc.2024-08-29.tar.gz1 directory, 1 file
- 校验文件
写到这笔者想起来还应该带上MD5校验文件,修改脚本
[root@data-svr-01 data]# cat /scripts/etc_bak2svr.sh
#!/bin/bash
#author yurq#set -e. /etc/profileip=`ip a s ens33|sed -rn '3 s#^[^[:digit:]]+(.*)/.*#\1#gp'`
time=`date +%F`
svr=192.168.202.128if [ ! -d /data/$ip ];thenmkdir -p /data/$ip
fitar zcf /data/$ip/etc.$time.tar.gz /etc/if [ $? -ne 0 ];thenecho "tar etc failed"
fils /data/$ip/etc.$time.tar.gzif [ $? -ne 0 ];thenecho "etc.$time.tar.gz lost found."
firsync -avz /data/$ip rsync_bak_01@$svr::backup --password-file=/etc/rsync.passwdif [ $? -ne 0 ];thenecho "rsync failed"
ficd /data/
md5sum $ip/etc.$time.tar.gz > $ip/etc.md5if [ $? -ne 0 ];thenecho "make md5 failed"
fi
验证
[root@data-svr-01 data]# sh /scripts/etc_bak2svr.sh
tar: Removing leading `/' from member names
/data/192.168.202.129/etc.2024-08-29.tar.gz
sending incremental file list
192.168.202.129/
192.168.202.129/etc.2024-08-29.tar.gz
192.168.202.129/etc.md5sent 3,513 bytes received 19,446 bytes 4,174.36 bytes/sec
total size is 10,411,270 speedup is 453.47
[root@data-svr-01 data]# cat 192.168.202.129/etc.md5
f9a218d7b059fa412fdecef06d27f469 192.168.202.129/etc.2024-08-29.tar.gz
[root@backup-svr-01 ~]# tree /backup/
/backup/
└── 192.168.202.129├── etc.2024-08-29.tar.gz└── etc.md51 directory, 2 files
- 下面编辑定时任务,每天晚上2点备份
首先,编辑一个任务每分钟的任务进行测试,毕竟不能等到晚上2点再验证
[root@data-svr-01 data]# cat /var/spool/cron/root
* * * * * sh /scripts/etc_bak2svr.sh &>/dev/null
[root@data-svr-01 data]# tail -f /var/log/cron
...
Aug 30 03:26:01 data-svr-01 CROND[65599]: (root) CMD (sh /scripts/etc_bak2svr.sh &>/dev/null)
...
[root@backup-svr-01 ~]# tree /backup/
/backup/
└── 192.168.202.129├── etc.2024-08-29.tar.gz├── etc.2024-08-30.tar.gz└── etc.md51 directory, 3 files
任务正常完成了,不过发现一个问题,md5文件把之前的冲掉了,所以需要修改脚本
md5sum $ip/etc.$time.tar.gz > $ip/etc.$time.md5
制作md5的时候加上日期
- 清除环境,再次验证。另外发现,md5在上传之后增加的,实际是不对的,调整执行顺序。
[root@data-svr-01 scripts]# cat etc_bak2svr.sh
#!/bin/bash
#author yurq#set -e. /etc/profileip=`ip a s ens33|sed -rn '3 s#^[^[:digit:]]+(.*)/.*#\1#gp'`
time=`date +%F`
svr=192.168.202.128if [ ! -d /data/$ip ];thenmkdir -p /data/$ip
fitar zcf /data/$ip/etc.$time.tar.gz /etc/if [ $? -ne 0 ];thenecho "tar etc failed"
fils /data/$ip/etc.$time.tar.gzif [ $? -ne 0 ];thenecho "etc.$time.tar.gz lost found."
ficd /data/
md5sum $ip/etc.$time.tar.gz > $ip/etc.$time.md5if [ $? -ne 0 ];thenecho "make md5 failed"
firsync -avz /data/$ip rsync_bak_01@$svr::backup --password-file=/etc/rsync.passwdif [ $? -ne 0 ];thenecho "rsync failed"
fi
[root@backup-svr-01 ~]# tree /backup/
/backup/
└── 192.168.202.129├── etc.2024-08-30.md5└── etc.2024-08-30.tar.gz1 directory, 2 files
2.4 扩展功能
- 添加清除过期备份,客户端备份保留7天
[root@data-svr-01 scripts]# mkdir /tmp/etc_backup
[root@data-svr-01 scripts]# ll /home/
total 0
[root@data-svr-01 scripts]# mkdir /home/yurq
[root@data-svr-01 scripts]# cp -r /etc/* /home/yurq/
[root@data-svr-01 scripts]# find /etc/ -type f -mtime +7|xargs -I file mv file /tmp/etc_backup/
[root@data-svr-01 scripts]# ll /tmp/etc_backup/
total 22300
-rwxr-xr-x. 1 0 0 8702 Jul 28 2020 00_header
-rw-r--r--. 1 0 0 232 May 9 2023 00-keyboard.conf
-rwxr-xr-x. 1 0 0 175 May 22 2020 00-netreport
-rwxr-xr-x. 1 0 0 1043 Mar 21 2019 00_tuned
-rwxr-xr-x. 1 0 0 232 Jul 28 2020 01_users
-rwxr-xr-x. 1 0 0 392 Aug 8 2019 0anacron
...
创建目录,并拷贝/etc/
内容进行测试,完成后把查找目录改为备份数据目录
find /data/ -type f -mtime +7|xargs -I file mv file /tmp/etc_backup/
把命令添加到脚本中
- 添加邮件通知
echo "test" |mailx -s "test" xxx@163.com
这里最好申请企业邮箱,发送太多条邮件到个人邮箱,可能被邮箱系统拦截
相关文章:

rsync搭建全网备份
rsync搭建全网备份 1. 总体概述1.1 目标1.2 简易指导图1.3 涉及工具或命令1.4 环境 2. 实施2.1 配置备份服务器2.2 备份文件准备2.3 整合命令2.4 扩展功能 1. 总体概述 1.1 目标 本次搭建目标: 每天定时把服务器数据备份到备份服务器备份完成后进行校验把过期数据…...

网络安全售前入门09安全服务——安全加固服务
目录 1.服务概述 2.流程及工具 2.1服务流程 2.2服务工具 3.服务内容 4.服务方式 5.风险规避措施 6.服务输出 1.服务概述 安全加固服务是参照风险评估、等保测评、安全检查等工作的结果,基于科学的安全思维方式、长期的安全…...
【Android】GreenDao数据库的使用方式
需求 使用GreenDao数据库进行数据的存储。 介绍 GreenDao 是一个轻量级的对象关系映射(ORM)库,用于简化 Android 应用中的数据库操作。它提供了以下主要功能: 简化数据库操作:通过注解定义实体类,Green…...
搜索算法之线性搜索详细解读(附带Java代码解读)
1. 基本概念 线性搜索(Linear Search),也称为顺序搜索,是一种在列表中查找特定元素的算法。它从列表的第一个元素开始,逐个检查每个元素,直到找到目标元素或检查完所有元素。 2. 工作原理 线性搜索的操作…...

Quartz.Net_依赖注入
简述 有时会遇到需要在IJob实现类中依赖注入其他类或接口的情况,但Quartz的默认JobFactory并不能识别具有有参构造函数的IJob实现类,也就无法进行依赖注入 需要被依赖注入的类: public class TestClass {public TestClass(Type jobType, s…...

【系统架构设计师-2011年】综合知识-答案及详解
更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2~4题】【第5~7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18~19题】【第20~21题】【第22题】【第23题】【第24题】【第25题】【第2…...

World of Warcraft [CLASSIC][80][Grandel]Sapphire Hive Drone
Sapphire Hive Drone 蓝玉虫巢雄蜂 蓝玉虫巢巨峰 索拉查盆地 实用性不强,好看是好看,模型很大,无奈栏位太少...
Unity 对接 Android 第三方广告,App 切换到后台后,再次打开时,第三方广告被销毁导致无法触发回调逻辑的问题
该问题是由发行进行游戏测试时遇到并反馈的。大致情况如下: 1. 当触发了插屏广告后,在关闭广告前将 App 切换到后台,之后再次打开 App,此时插屏广告消失,并切游戏卡死。 2. 当触发激励视频广告后,在广告展…...
Kafka Broker处于高负载状态(例如消息处理量大或系统资源不足),无法及时响应消费者的请求
Caused by: org.apache.kafka.common.errors.TimeoutException: Timeout of 60000ms expired before the position for partition activity-0 could be determined。 出现这个错误的原因是Kafka消费者在尝试获取分区(activity-0)的位置信息时,超时了。在60秒内无法确…...

相关二叉树进阶面试题的讲解?看这一篇足矣
引子:我们在之前学过c语言的二叉树,但是c来做更好!本期要讲的题目如下(其实有点拖欠了,很久之前,就想写这个了,今天终于克服自己的欲望,达成了这个愿望) 1, 二叉树创建字…...
Nginx部署前端Vue项目的深度解析
目录 一、准备工作 1.1 开发环境 1.2 服务器环境 1.3 Nginx安装 二、构建Vue项目 三、上传静态文件到服务器 四、配置Nginx 五、测试并重新加载Nginx 六、访问Vue应用 七、高级配置 7.1 启用HTTPS 7.2 启用Gzip压缩 7.3 缓存控制 八、常见问题与解决方案 8.1 40…...

PHP一站式解决方案高级房产系统小程序源码
一站式解决方案,高级房产系统让房产管理更轻松 🏠【开篇:告别繁琐,迎接高效房产管理新时代】🏠 你是否还在为房产管理的繁琐流程而头疼?从房源录入、客户咨询到合同签订、售后服务,每一个环节…...

轻量级模型解读——EfficientNet系列
EfficientNet自2019年谷歌提出以来,经历了三个版本,2019EfficientNet ——> 2020EfficientNet-Lite——> 2021EfficientNetv2 文章目录 1、EfficientNet2、EfficientNetv23、EfficientNet-Lite 对于EfficientNet和EfficientNetv2的解读可见另外两篇…...

深入浅出SRS—RTMP实现
RTMP 直播是 SRS 最典型的使用场景,客户端使用 RTMP 协议向 SRS 推流,使用 RTMP 协议从 SRS 拉流,SRS 作为一个 RTMP 直播服务器实现媒体的转发。同时,RTMP 是 SRS 的中转协议,其他协议之间的互通需要先转为 RTMP&…...

睿赛德科技携手先楫共创RISC-V生态|RT-Thread EtherCAT主从站方案大放异彩
日前,在先楫HPM6E00技术日上,睿赛德科技(RT-Thread)向广大工业用户展示了多年来双方在RISC-V生态领域的合作历程和成果,同时睿赛德科技携手先楫半导体首次推出了基于HPM6800处理器的EtherCAT主站解决方案,吸…...
【Cesium实体创建】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Cesium目录 前言一、Cesium二、点 线 实体1.点实体2.线实体 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不…...
为何一些包的Priority在apt-cache和deb文件当中的不一样
最近遇到一些问题,调查的时候发现是一些包的Priority在apt-cache和deb文件当中的不一样导致的,复现步骤如下: $ apt update $ apt download whiptail $ dpkg-deb -e whiptail_0.52.23-1b1_amd64.deb $ cat control | grep Prio Priority: op…...

CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(三)
关说不练假把式,在上一,二篇中介绍了我心目中的CRUD的样子 基于之前的理念,我开发了一个命名为PasteTemplate的项目,这个项目呢后续会转化成项目模板,转化成项目模板后,后续需要开发新的项目就可以基于这…...

nvidia-cuda-tensorrt-cudnn下载网站
tensorrt:https://developer.nvidia.com/tensorrt/download cudnn:https://developer.nvidia.com/rdp/cudnn-archive cuda:https://developer.nvidia.com/cuda-toolkit-archive...

GitLab 是什么?GitLab使用常见问题解答
GitLab 是什么 GitLab是由GitLab Inc.开发,使用MIT许可证的基于网络的Git仓库管理工具开源项目,且具有wiki和issue跟踪功能,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。 GitLab 是由 GitLab Inc.开发,…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...