rsync搭建全网备份

news/2024/9/16 18:38:39/ 标签: linux, 运维, 服务器

rsync搭建全网备份

    • 1. 总体概述
      • 1.1 目标
      • 1.2 简易指导图
      • 1.3 涉及工具或命令
      • 1.4 环境
    • 2. 实施
      • 2.1 配置备份服务器
      • 2.2 备份文件准备
      • 2.3 整合命令
      • 2.4 扩展功能

在这里插入图片描述

1. 总体概述

1.1 目标

本次搭建目标:

  1. 每天定时把服务器数据备份到备份服务器
  2. 备份完成后进行校验
  3. 把过期数据删除(普通服务器数据保留7天,备份服务器数据保留1年)
  4. 完成后邮件通知

1.2 简易指导图

在这里插入图片描述

1.3 涉及工具或命令

  1. rsysnc:备份工具,守护进程模式
  2. cron:定时任务
  3. md5sum:MD5校验工具
  4. mailx:邮件
  5. tarfinddate等等

1.4 环境

服务器ip系统版本说明
backup-svr-01192.168.202.128CentOS Linux release 7.9.2009 (Core)备份服务器
data-svr-01192.168.202.129CentOS Linux release 7.9.2009 (Core)数据服务器

2. 实施

在每个步骤中,会把具体的需求细化分解

2.1 配置备份服务器

  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/
  1. 创建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

  1. 创建客户端访问备份服务器的账户
[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
  1. 编译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
  1. 测试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目录为例

  1. 创建备份数据存放目录
[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
  1. 打包数据,并以时间进行区分

打包数据

[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 整合命令

我们把前面用到的命令整合到脚本中,并进行测试

  1. 编写脚本
[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
  1. 测试脚本
    客户端
[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构建的目录也带上一起传过去

  1. 修改脚本
rsync -avz /data/$ip rsync_bak_01@$svr::backup --password-file=/etc/rsync.passwd

把这行给了就可以了,注意ip后不要加/

  1. 清理环境,重新上传
[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
  1. 校验文件
    写到这笔者想起来还应该带上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
  1. 下面编辑定时任务,每天晚上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的时候加上日期

  1. 清除环境,再次验证。另外发现,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 扩展功能

  1. 添加清除过期备份,客户端备份保留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/

把命令添加到脚本中

  1. 添加邮件通知
echo "test" |mailx -s "test" xxx@163.com

这里最好申请企业邮箱,发送太多条邮件到个人邮箱,可能被邮箱系统拦截


http://www.ppmy.cn/news/1521810.html

相关文章

代码随想录 -- 二叉树 -- 二叉树的最小深度

111. 二叉树的最小深度 - 力扣(LeetCode) 思路:递归调用 递归返回值:返回以当前节点为根节点的二叉树的最小深度 递归出口:当根节点为空时,返回 0 单层递归逻辑:特殊情况处理:当…

【区块链 + 人才服务】区块链教学管理平台 | FISCO BCOS应用案例

面对传统教育行业存在的教育过程难监督、教育信息不公开、教育效果难认定、教务管理缺抓手、数据造假和证 书局限性等诸多痛点问题。北京奕江科技有限公司基于 FISCO BCOS 底层开发区块链教学管理平台,搭建区块链 教学管理系统、区块链课程学习及实训环境&#xff0…

HTTP中常用的4种请求方式——前端如何发送?后端怎么接受?

一.Get请求: 1.什么是Get请求? 2.前后端如何使用Get交互? 2.1.Query参数格式的Get请求 2.2.Path参数格式的Get请求 二.Post请求: 1.什么是Post请求? 2.前后端如何使用Post交互? 三.Put请求&#xf…

C语言代码练习(第十五天)

今日练习: 37、输入连个正整数 n 和 m ,求其最大公约数和最小公倍数 38、请编程序将“China”翻译成密码,密码规律是:用原来的字母后面第4个字符代替原来的字母 39、设半径 r 1.5,圆柱高 h 3,求圆周长、圆…

优化 spring boot 的启动速度

优化Spring Boot应用的启动速度可以采取以下几个策略: 最小化依赖:检查项目是否有不必要的依赖,特别是那些启动时不使用的库。使用spring-boot-starter-web而不是spring-boot-starter-tomcat可以减少一些默认依赖。 懒加载组件:使…

Linux中Ubuntu系统安装Windows得字体

背景 安装了geoserver 然后geoserver中需要用到微软雅黑字体 所以需要安装一下Linux系统安装Windows中的字体 创建字体目录 cd /usr/share/fonts/ mkdir winfont在Windows找到对应字体 C:\Windows\Fonts 复制该字体到桌面 Linux系统中上传字体 roottest-server03:/usr/sha…

【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能

昨天写了一篇文章,使用fastapi直接操作neo4j图数据库插入数据的例子, 本文实现LLM大模型结合neo4j图数据库实现AI问答功能。 废话不多说,先上代码 import gradio as gr from fastapi import FastAPI, HTTPException, Request from pydantic…

APP长文本内容编辑器功能实现方案

背景 CSDN APP 中原有编辑器页面为纯H5适配,整体用户交互体验差,如何优化APP端编辑器用户体验是我们团队需要思考的问题。下面我们以iOS为例展开讨论。 一、方案调研 我们分析了几款国内内容发布的APP,如知乎、今日头条、简书,…

谷歌的 GameNGen:无需游戏引擎,人工智能模拟 “毁灭战士“,开辟新天地

谷歌公司的研究人员创建了一个神经网络,可以在不使用传统游戏引擎的情况下生成经典射击游戏《毁灭战士》的实时游戏,从而实现了人工智能领域的一个重要里程碑。这个名为 GameNGen 的系统标志着人工智能向前迈出了重要一步,它能在单芯片上以每…

淘客APP的前后端分离架构设计

淘客APP的前后端分离架构设计 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的软件开发中,前后端分离架构已经成为了一种主流的设计模式。这种架构模式将前端和后端的职责明…

[论文笔记] LLaVA

一、LLaVA 论文中的主要工作和实验结果 Existing Gap: 之前的大部分工作都在做模态对齐,做图片的 representation learning,而没有针对 ChatBot(多轮对话,指令理解)这种场景优化。 Contribution: 这篇工作已经在 BLIP-2 之后了,所以 Image 的理解能力不是 LLaVA 希望提升…

0902,DEQUE,LIST,VECTOR

目录 01_vector.cc 02_vector.cc 作业 01STL包括哪些组件?各自具有哪些特点? 02 序列式容器包括哪些?他们之间有哪些异同? 03 下面程序有什么错误? 04 创建和初始化vector的方法,每种都给出一个实例…

OpenCV Jet颜色映射和HSV颜色空间对比

目录 一、概述 二、Jet颜色空间映射 2.1优势 2.2颜色变化范围 2.3应用场景 三、HSV 颜色空间 3.1优势 3.2颜色分布 3.3应用场景 四、Jet与HSV区别 4.1对比总结 4.2选择建议 OpenCV图像处理与应用实战算法汇总地址: OpenCV 图像处理应用实战算法列表汇总…

Elasticsearch 再次开源

作者:来自 Elastic Shay Banon [D.N.A] Elasticsearch 和 Kibana 可以再次被称为开源了。很难表达这句话让我有多高兴。我真的激动得跳了起来。Elastic 的所有人都是这样的。开源已经融入我的 DNA,也融入了 Elastic 的 DNA。能够再次将 Elasticsearch 称…

电脑回收站被清空,怎么恢复丢失数据?

回收站,这个看似不太起眼的电脑功能,实际上在关键时刻能够为我们挽回重大损失,帮助我们重新获得至关重要的文件和数据。对于经常与电脑打交道的朋友们来说,当某个文件被不小心删除时,回收站往往成为我们文件找回和恢复…

【实战案例】项目经理和产品经理高效配合的秘诀:产品与项目关联

最近,不断收到关于项目经理岗位以及产品经理岗位相关的提问,比如: “产品经理和项目经理,有什么区别?” “产品经理和项目经理,哪个发展前景更好?” “产品经理和项目经理发生冲突&#xff0…

开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布

开源云原生数据库PolarDB PostgreSQL 15兼容版正式发布上线,该版本100%兼容开源PostgreSQL 15。PolarDB是阿里云自研云原生关系型数据库,基于共享存储的存算分离架构使其具备灵活弹性和高性价比的特性,在开源PostgreSQL很好的性能表现的基础上…

Matlab 并联双振子声子晶体梁结构带隙特性研究

参考文献:吴旭东,左曙光,倪天心,等.并联双振子声子晶体梁结构带隙特性研究[J].振动工程学报,2017,30(01):79-85. 为使声子晶体结构实现范围更宽的多带隙特性,基于单振子型声子晶体结构弯曲振动带隙频率范围窄的局 限,提出了一种双侧振子布置…

监理工程师职业资格考试

根据住房城乡建设部、交通运输部、水利部、人力资源社会保障部关于印发《监理工程师职业资格制度规定》《监理工程师职业资格考试实施办法》(建人规〔2020〕3号)文件精神,监理工程师职业资格考试实行全国统一大纲、统一命题、统一组织。 一、…

TikTok直播为什么要用独立IP

TikTok直播作为一种受欢迎的社交媒体形式,吸引了越来越多的用户和内容创作者。在进行TikTok直播时,选择使用独立IP地址是一种被广泛推荐的做法。本文将探讨为什么在TikTok直播中更推荐使用独立IP,并解释其优势和应用。 独立IP是指一个唯一的互…