Linux备份服务及rsync企业备份架构(应用场景)

news2024/11/21 2:38:49

备份服务概述

备份服务:需要使用到脚本,打包备份,定时任务.

备份服务:rsyncd服务,不同主机之间数据传输.

  • 特点:
  1. rsync是个服务也是命令
  2. 使用方便,具有多种模式
  3. 传输数据的时候是增量传输

增量与全量:
全量 :无论多少数据全部推送走(scp)
增量:只会把修改新建了的文件传输走(rsync)

把/etc/目录传输到另外一台机器的/tmp/下面
scp -r /etc/sysconfig/ root@192。168.28.131:/tmp/
rsync -avz /etc/sysconfig/ root@192.168.28.131:/mnt/

rsync企业应用场景:
应用场景(业务场景) 应用建议

rsync作为命令使用 临时拉取,推送数据.未来这个需求可以通过scp命令实现.

定时备份:rsync服务+定时任务 定时备份,定期备份案例.(定时任务进行备份+通过rsync传输备份)

实时同步:rsync服务+sersync/lsyncd实现实时同步 解决存储服务单点问题

rsync服务与异地容灾找一个异地的服务器存放备份

注意:单点问题:同一个功能/同一个服务,只有1台节点.

rsync不同的模式

1.1rsync本地模式

rsync -a /etc/ /tmp/
rsync -a /etc /opt/

在rsync对于目录 /etc/ /etc是有区别的
/etc /etc目录+目录的内容
/etc/ /etc/目录下面的内容

1.2远程模式

格式

rsync -a 源文件 目标

推送:rsync /etc/hostname root@192.168.28.131:/tmp

拉取:rsync root@192.168.28.131:/etc/hosts /opt/

#推送/etc/hostname到192.168.28.131的/tmp/目录
rsync -a /etc/hostname root@192.168.28.131:/tmp

#推送/etc目录及目录内容到131的/tmp下面
##推送第1次 全量
rsync -av /etc root@192.168.28.131:/tmp
##推送第2次 发现没有推送
rsync -av /etc root@192.168.28.131:/tmp
##创建文件再次推送
touch /etc/wulin.txt
rsync -av /etc root@192.168.28.131:/tmp
#通过scp推送 /etc目录及目录内容到131的 /opt下面
scp -r /etc/ root@192.168.28.131:/opt/
-r递归传输

1.3守护进程模式

服务使用流程

部署

配置

启动,使用

优化

故障

自动化

(监控,日志,安全,自动部署,容器)

1.3.1检查是否安装

检查安装 更新
yum install -y rsync
检查软件包内容
/etc/rsyncd.conf #配置文件
/usr/bin/rsync #命令
/usr/lib/systemd/system/rsyncd.service #systemctl对应的配置文件

1.3.2进行配置

[root@backup /wulin]# cat/etc/rsyncd.conf
#created by wulin 2024-5-12
##rsyncd.conf start##
fake super =yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors

read only = false
list = false
#hosts allow = 10.0.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[data]
comment = www by wulin 2024-5-12
path = data

#启动服务
systemctl enable rsyncd
systemctl start rsyncd

#检查进程
ps -ef |grep rsync

#检查端口
ss -lntup |grep rsync

1.3.2后续配置

 #1.添加虚拟用户
useradd  -s /sbin/nologin -M   rsync

#2.创建密码文件
密码文件格式:用户名:密码
echo 'rsync_backup:123 ' >/etc/rsync.password
chmod 600 /etc/rsync.password

#3.共享目录与权限
mkdir /data/

#启动服务
systemctl start rsyncd
systemctl enable rsyncd

#访问测试:

rsync -avz /etc/hosts rsync_backup@192.168.28.41::data

rsync_backup是服务端配置文件中的认证用户

data表示模块名字

本地测试:
[root@backup ~]# rsync -av /etc/hostname  
rsync_backup@192.168.28.41::data
Password:
sending incremental file list
hostname
sent 102 bytes
received 43 bytes  41.43 bytes/sec
total size is 7
speedup is 0.05

[root@backup ~]# ll /data/
total 4
-rw-r--r-- 1 rsync rsync  17:02 hostname

#客户端测试:
##基本测试
[root@nfs01 ~]# rsync -avz /etc/hosts
rsync_backup@172.16.1.41::data
Password:
sending incremental file list
hosts

sent 214 bytes
received 43 bytes 73.43 bytes/sec
total size is 329 speedup is 1.28

##免密码传输数据到服务器
[root@nfs01 ~]#echo ‘123’ >/etc/rsync.passwords
[root@nfs01 ~]#chmod 600 /etc/rsync.passwords
[root@nfs01 ~]#
[root@nfs01 ~]#rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.passwords
sending incremental file list

sent 47 bytes received 20 bytes 134.00 bytes/sec
total size is 333 speedup is 4.97

传到客户端
[root@nfs01 ~]#rsync -avz /tmp/etc.tar.gz rsync_backup@172.16.1.41::data --password-file=/etc/rsync.passwords
sending incremental file list
etc.tar.gz在这里插入图片描述

1.4守护进程补充

uid,gid与auth user

1.用户执行命令:rsync -avz /tmp/etc.tar.gz rsync_backup@backup::data --passwordfile=/etc/rsync.password

2.服务端收到数据:判断rsync_backup用户,然后等待输入密码

3.把用户名和密码与配置文件里面对比auth user和secretsfile

4.通过后,传输数据

5.数据到达服务器所有者被修改为uid和gid指定的(rsync)

6.数据写入data模块(/data/)目录下面.

免密的方式连接服务端(命令行指定客户端密码文件)

客户端密码文件只存储密码即可
echo 123 >/etc/client.rsync
chmod 600 /etc/client.rsync
rsync -avz /etc/hosts
rsync_backup@172.16.1.41::data --password-
file=/etc/client.rsync

访问控制-安全措施

hosts allow只准许指定的ip或网段访问

hosts deny拒绝.
配置只准许172.16.1.0/24网段访问

2.1rsync选项

-a

  1. -rlptgoD
  2. -r递归复制
  3. -l复制软连接
  4. -p保持权限不变
  5. -m保持修改时间不变
  6. -o所有者不变
  7. -g用户组不变
  8. -D --devices --specials设备与特殊文件

-v 显示过程

-z 传输数据时候进行压缩(公网)

-p 显示每rsync -av . root@192.168.28.131:/tmp/ --exclude=04rsync -av . root@192.168.28.131:/mnt --exclude={04,05}个文件传输过程(进度条)断点续传–partial --progress

–bwlimit 限速注意不要与-z一起使用

–exclude、–exclude-from排除

–delete目标目录与源目录保持一致的传输

限速并传输
rsync  -aP --bwlimit=500kb   /tmp/1g  
192.168.28.131:/mnt/

传输并排除
rsync -av .  root@1192.168.28.1311:/tmp/   --exclude=04
rsync -av .  
root@192.168.28.131:/mnt   --exclude=
{04,05}

通过文件内容进行排除
[root@backup /wulin]# cat /tmp/paichu.txt
03
05
10

[root@backup /wulin]# rsync -av .  
root@192.168.28.131:~   --exclude-from=/tmp/paichu.txt

保持源与目标数据一致
rsync  -avP --delete   .  root@192.168.28.131:/tmp/

故障总结

password mismatch

backup rsyncd[3177]: authfailed on module data from UNKNOWN(10.0.0.41) for rsync_backup: no secretsfile

no secrets file

selinux和防火墙
在这里插入图片描述

项目案例

可能来自于老大的一句话:网站数据需要备份,你操作一下

接下来的内容需要你自己规划,备份什么内容?如何备份?如何收集备份(统一存放备份)?保留时间?都是什么系统?什么系统的版本?

  • 备份什么?

    1. 数据(用户数据库)数据库 存储

    2. 配置文件

    3. 脚本和代码

    4. 网站代码

日志收集

  • 如何备份?

  • 如何收集?

    rsync服务收集备份(rsync客户端推送备份到rsync服务器)

在这里插入图片描述

2.2项目流程:

1)环境准备

1)环境准备
角色 主机 运行服务
存放备份 backuprsync服务端
生成备份 nfs01rsync客户端,其他服务
生产备份 web01rsync客户端,其他服务
  1. 项目步骤
    这里为操作步骤,未来的工作还会有沟通(与其他部门进行商讨)定期汇报
    | 步骤说明 详细内容 | |
    | ------------------------------------------------------------ | ---- |
    | rsync服务端并调试 服务端配置 、back目录 | |
    | rsync客户端节点配置脚本(备份) 备份 推送 清理 | |
    | 其他节点匹配定时任务 定时运行脚本 | |
    | 在备份服务器上检查并发送邮件 在rsync服务端检查备份并发送邮件 | |

  2. 配置与检查rsync服务端与客户端
    vim/etc/rsyncd.conf
    在这里插入图片描述

[root@backup ~]#mkdir -p /backup/ #创键目录

chown -R rsync.rsync /backup/

ll -d /backup/检查

在这里插入图片描述
改完了配置文件进行重启

systemctl restart rsyncd(端口号为873)

ch在客户端测试

rsync -av /etc/hostname rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwords
sending incremental file list
hostname

在备份服务器看是否传输过来

ll /backup/

cat /backup/hostname

4)书写备份脚本
书写脚根据企业,任务需求合理高效进行书写脚本,写脚本在多窗口化进行编写边测试(整理这个的需要命令,写成脚本(引用变量名实现脚本万能功能–在相同类型机器上省时间省力气–当然注意整体磁盘空间内存信息,在架构搭建初期各部门进行会议交流))

在nf01这个客户端上

vim /server/scripts/bak_conf.sh

(写脚本编写脚本边进行测试)

[root@nfs01 ~]#hostname -I

[root@nfs01 ~]#hostname -I |awk '{print $2}'

在这里插入图片描述
在存储服务器上对推送脚本进行测试

mkdir -p /backup/172.16.1.131

tar zcf /backup/172.16.1.131/etc.tar.gz /etc /var/spool/cron/

ll /backup/172.16.1.131/

tree /backup/(企业数量文件内容特别多的时候,可以采用树状结构)

rsync -a /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwords

检查服务端是否推送过来

tree /backup/
在这里插入图片描述
测试成功,将脚本写入脚本

继续在客户端测试删除旧的客户端备份命令
在这里插入图片描述
[root@nfs01 ~]#find /backup/ -type f -name “*.tar.gz”

[root@nfs01 ~]#find /backup/ -type f -name “*.tar.gz” -mtime +7 |xargs rm -f

(这里xargs后不支持别名 ,rm删文件会接提示)
在这里插入图片描述
测试成功写入脚本!

整个备份服务器脚本配置文件:
在这里插入图片描述
脚本运行完进行测试

rm -fr /backup/

把服务端的ip可以进行删掉,这里如果删除了backup目录,备份服务器会报错
在这里插入图片描述
删掉客户端目录并tree
在这里插入图片描述
运行脚本并检查服务端是存在backup
在这里插入图片描述
在这里插入图片描述
未来我们只需要调整脚本备份内容(目录)ip即可

写定时任务:
在这里插入图片描述
在这里插入图片描述
crontab -e

在这里插入图片描述
在这里插入图片描述
查看日志tail -f /var/log/cron

date

查看结果(每2秒进行执行)

在这里插入图片描述
查看服务端:
在这里插入图片描述
(说明测试没有问题,可以在定时任务按照企业时间需求及追加目录进行配置

5)服务端备份脚本调试
检查备份并清除旧的备份脚本

vim /server/scripts/check.sh

find /backup/ -type f -name "*.tar.gz" |xargs ls -lhd
find /backup/ -type f -name "*.tar.gz" |awk '{print $NF,$5}'
find /backup/ -type f -name "*.tar.gz" |awk 
-F  '[ /]+' '{print $(NF-1),NF,$5}'

在这里插入图片描述
让内容多一点将nfs01客户端脚本文件传入到web01服务器上

[root@nfs01~]#scp/server/scripts/bak_conf.sh 192.168.28.7:/server/scripts/
在这里插入图片描述
[root@nfs01 ~]#scp /etc/rsync.password 192.168.28.7:/etc

[root@nfs01 ~]#scp /var/spool/cron/root 192.168.28.7:/var/spoo
l/cron/

检查传输到web01服务器内容

[root@web01 ~]#ll /etc/rsync.password

[root@web01~]#ll/etc/rsync.password /server/scripts/bak_conf.sh

[root@web01 ~]#ll /etc/rsync.password /var/spool/cron/root

[root@web01~]#head-30/etc/rsync.password /server/scripts/bak_conf.sh /var/spool/cron/root
在这里插入图片描述
在这里插入图片描述
在web01服务器运行bak_conf.sh脚本
在这里插入图片描述
在备份服务器进行检查如果成功会有172.16.1.7这一行

[root@backup ~]#find /backup/ -type f -name “*.tar.gz” |awk -F ‘[ /]+’ ‘{print $(NF-1),NF,$5}’

在这里插入图片描述
在这里插入图片描述
测试统计结果命令并写入脚本:

[root@backup ~]#awk -F: ‘BEGIN{print “用户名”,“UID”}{print 1 , 1, 1,​3}’ /etc/passwd

在这里插入图片描述
完成脚本(清除旧的脚本统计结果并将结果发送到邮件)
在这里插入图片描述
[root@backup /backup]#sh /server/scripts/check.sh

如果在邮箱中没有见到信息,在垃圾邮箱查找(被邮箱系统屏蔽掉了)
在这里插入图片描述
在这里插入图片描述
配置定时任务:

crontab -e
在这里插入图片描述
然后观察日志文件及邮箱信息

[root@backup /backup]#tail -f /var/log/cron

最后将结果追加到result.txt
在这里插入图片描述

6)增加校验功能

简单理解校验测试(知识理解):

  • 检查传输中是否有变化及检查的那个文件md5:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    检查多个检验文件(find+md5)
#给/etc/下面所有的文件创建MD5保存到指定文件中
find /etc/ -type f | md5sum   >etc-all.md5
#进行校验
md5sum -c etc-all.md5
#修改/etc/下某个文件比如增加个"#"
vim /etc/rsyncd.conf
#进行校验
md5sum -c etc-all.md5
#只显示md5
异常的文件
md5sum --quiet  -c etc-all.md5

在这里插入图片描述
具体应用:

  • 客户端备份的时候生成备份,创建指纹信息

安全防护措施:

给命令和较为固定的配置设置md5,定期校验

作图为清理旧的备份服务端脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

rsync2022年漏洞

影响的版本:3.2.5版本验证不足情况

检查rsync版本:
在这里插入图片描述
检查yum源是否有新的rsync版本,在装yum最新版本之前,我们自己的rsync比它最新的版本很低:
在这里插入图片描述
去官网找rsync包:下载 Samba

下载 Sambarsync (samba.org)

https://rsync.samba.org/

在这里插入图片描述
二进制别人已经弄好了,我们只需要进行解压使用,但是不一定能打开
添加链接描述
https://download.samba.org/pub/rsync/binaries/
在这里插入图片描述
这里的版本还不能进行满足,下载这里最
新的rsync包,看是否还能进行满足:
##下载最新的rsync包
wget https://download.samba.org/pub/rsync/binaries/centos-7.9-x86_64/latest.tar.gz
[root@backup ~]#tar tf latest.tar.gz

[root@backup ~]#tree -F usr/
usr/
└── local/
├── bin/
│ ├── rsync*
│ └── rsync-ssl*
└── share/
├── doc/
│ ├── COPYING
│ ├── NEWS.md
│ └── README.md
└── man/
├── man1/
│ ├── rsync.1
│ ├── rsyncd.conf.5
│ └── rsync-ssl.1
└── man5/

在这里插入图片描述
会发现还是满足不了

  • yum源不行
  • 软件包不行
  • 官网二进制也不行
  • 我们使用最本制的方式:编译安装(这里有3.2.7的版本)

通过yum update rsync升级,查到的版本还是低,但是升级说不定修复了补丁(说不来)厂商已经发布升级补丁修复漏洞方式(不方便升级版本的时候使用补丁)

还是要进行改源代码–》回到本质还是编译

还可以通过漏洞扫描工具,针对具体漏洞具体处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1686718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】必会降维算法之:t-分布邻域嵌入(t-SNE)

t-分布邻域嵌入(t-SNE) 1、引言2、随机梯度下降(SGD)2.1 简介2.1.1 定义2.1.2 应用场景 2.2 原理2.3 实现方式2.4 算法公式2.5 代码示例解析: 3、总结 1、引言 小屌丝:鱼哥, 啥是降维算法 小鱼…

AI三级淋巴结构·预测癌症预后和免疫疗法反应

小罗碎碎念 今天分享的这篇文章对于想从事三级淋巴结交叉研究等同学和老师来说,具有非常重要的参考价值,反正我写完这篇推文以后,觉得受益匪浅。 其中重点需要提醒大家关注的是——从2D组织切片计算的TLS面积已被验证为多种肿瘤类型的预后和…

pycharm打开服务器(linux)上的项目

先在本地打开项目 一、项目文件配置 tools-deployment-configuration 新增一个sftp连接 测试服务器是否可以连通 mappings中设置本地路径和服务器上的路径 二、环境配置 先参考文章 复现论文的conda环境(win和联网、离线linux)_conda复现环境-CSDN博…

bugku 网络安全事件应急响应

开启靶场: 开始实验: 使用Xshell登录服务器,账号及密码如上图。 1、提交攻击者的IP地址 WP: 找到服务器日志路径,通常是在/var/log/,使用cd /var/log/,ls查看此路径下的文件. 找到nginx文件夹。 进入ng…

SAP Credit Management-Reconcile Documented Credit Decisions

ECC 升级S4后,经过事后迁移后,出现如下报错 找到了这里的配置路径: DCD settings – to maintain/complete Create Profile for Case Search -> no entry UKM_CASE – DCD search -> no search fields BC set UKM_DCD_CUST not activated -> transactio

温故而知新-秒杀项目篇【面试复习】

温故而知新-秒杀项目篇【面试复习】 前言版权推荐温故而知新-论坛项目篇【面试】秒杀项目中注册模块怎么实现的?秒杀项目中登录模块怎么实现的?秒杀项目中显示登录用户信息怎么实现的?SessionStorage是什么?为什么不用session而用token什么是…

2024年电工杯高校数学建模竞赛(B题) 建模解析| 大学生平衡膳食食谱的优化设计 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长,就读于上海交通大学,截至目前已经帮200人完成了建模与思路的构建的处理了~ 本篇文章是鹿鹿学长经过深度思考,独辟蹊径,实现综合建模。独创复杂系统视角,帮助你解决电工杯的难关呀。 本题&…

南京中科微Ci2451+11dbm发射功率 国产8位RISC内核无线MCU芯片

Ci2451是一款在现有的2.4GHz射频芯片基础上,内部集成8位RISC内核(精简指令集)MCU的SOC芯片。 Ci2451引脚图↑ 无线MCU解决方案,集成丰富的MCU资源、更小尺寸,来满足设计中的各种内存、功率、尺寸要求,充分…

QCC30xx如何实单声道MONO输出

有客户提出需要将QCC30xx的输出改为单声道输出(我们的QCC30xx是双声道输出,如果采用单声道输出,我们需要进行混音操作)。 客户采用目前最新的 SDK上将INCLUDE_STEREO屏蔽掉,直接进行编译,会报一系列的问题,编译不过。 也有很多客户尝试在各个模式下强制将通道输出设置…

cert-s

绕不过,啊对对对。 安全公司的东西都是无敌的。 菜你就多练。

C中十进制转十六进制示例

uint8_t QR_code_RxBfr[255]{0}; uint8_t TouchCode[100];memcpy (&Sys.TouchCode[0], &QR_code_RxBfr[0], Sys.QR_code_Len);Str &Sys.TouchCode[TmpVble];Sys.Card_ID 0; while(0 ! isdigit(*Str)){Sys.Card_ID Sys.Card_ID*10 *Str - 0;Str;} 最后在通过以下…

Springboot阶段项目---《书城项目》

一 项目介绍 本项目采用集成开发平台IntelliJ IDEA开发了在线作业成绩统计系统的设计与实现,实现了图书商城系统的综合功能和图形界面的显示,可以根据每个用户登录系统后,动态展示书城首页图书,实现了分类还有分页查询&#xff0c…

CAN报文,Motorola和Intel格式

CAN报文,Motorola和Intel格式 车载测试系列:CAN报文之Intel格式与Motorola格式 当信号在一个字节内实现(信号不跨字节)时,Intel模式和Motorola模式的信号字节顺序,完全一样: 信号的高位&am…

leetcode-顺时针旋转矩阵-111

题目要求 思路 1.假设现在有一个矩阵 123 456 789 2.我们可以根据19这个对角线将数据进行交换&#xff0c;得到矩阵 147 258 369 3.然后将矩阵每一行的数据再翻转&#xff0c;得到矩阵 741 852 963 代码实现 class Solution { public:vector<vector<int> > rot…

【HMGD】STM32/GD32 I2C DMA 主从通信

STM32 I2C配置 主机配置 主机只要配置速度就行 从机配置 从机配置相同速度&#xff0c;可以设置第二地址 因为我的板子上面已经有了上拉电阻&#xff0c;所以可以直接通信 STM32 I2C DMA 定长主从通信代码示例 int state 0; static uint8_t I2C_recvBuf[10] {0}; stat…

ROS2安装教程之强大辅助

第一次接触ROS2&#xff0c;安装时跟这个&#xff0c;跟那个教程&#xff0c;真的是一把泪&#xff0c;耗费数多个小时&#xff0c;依旧存在一些或多或少的问题&#xff0c;最主要的是永远提示 直到遇到了一个鱼香大佬&#xff0c;是真的香啊&#xff0c;好不容易找到的资料&a…

深度学习——图像分类(CNN)—训练模型

训练模型 1.导入必要的库2.定义超参数3.读取训练和测试标签CSV文件4.确保标签是字符串类型5.显示两个数据框的前几行以了解它们的结构6.定义图像处理参数7.创建图像数据生成器8.设置目录路径9.创建训练和验证数据生成器10.构建模型11.编译模型12.训练模型并收集历史13.绘制损失…

145.栈和队列:删除字符串中的所有相邻重复项(力扣)

题目描述 代码解决 class Solution { public:string removeDuplicates(string s) {// 定义一个栈来存储字符stack<char> st;// 遍历字符串中的每一个字符for(int i 0; i < s.size(); i){// 如果栈为空或栈顶字符与当前字符不相同&#xff0c;则将当前字符入栈if(st.e…

SpringBoot项目中redis序列化和反序列化LocalDateTime失败

实体类中包含了LocalDateTime 类型的属性&#xff0c;把实体类数据存入Redis后变成这样&#xff1a; 此时&#xff0c;存入redis不会报错&#xff0c;但是从redis获取的时候&#xff0c;会报错&#xff1a; com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Ca…

AI - Transformer架构工作原理

一、概述 Transformer是由Vaswani等人在2017年提出的一种基于自注意力机制&#xff08;Self-Attention Mechanism&#xff09;的深度学习网络架构的大模型&#xff0c;被广泛应用于自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;如机器翻译、文本生成等任务。它摒弃…