自动化备份全网服务器数据平台

任务清单

项目环境搭建

  • 可以使用iventoy网启安装3台centos7.9服务器

  • 管理员模式启动iventoy:

  • 【剩下两台机子以此类推】

  • 按照规划,最小化部署系统,

  • 替换yum源:

  • 删除原本yum源:

复制代码
  rm -rf yum.repos.d/
  • 创建新的:

复制代码
  mkdir  /etc/yum.repos.d


*

  • 关闭防火墙

设置服务器名字:

  • 禁用SELinux

  • 确保能够联网。

  • 部署静态IP:

安装所需软件:

复制代码
yum install vim  tree tar net-tools rsync nfs-utils -y

 yum install epel-release -y

部署网站:

复制代码
yum install nginx -y

复制代码
vim /etc/nginx/nginx.conf

启动nginx:

复制代码
systemctl start nginx

测试:

部署nfs01:

安装必要软件:

复制代码
yum install vim  tree tar net-tools rsync -y

 yum  install  rpcbind  -y

yum  install  nfs-utils  -y

创建共享文件包:

复制代码
mkdir  /nfsfile

测试:

复制代码
echo  "welcome to www.openlab.com" > /nfsfile/readme

启动软件:

【切记启动顺序不可乱】

回到web01:

创建本地挂载目录:

复制代码
mkdir  /web_nfs

挂载:【出错查看nfs的设定】

复制代码
mount -t nfs  192.168.12.201:/nfsfile  /web_nfs

测试:

复制代码
cd  /web_nfs
复制代码
mount

或者:

backup部署:

安装必要软件:

复制代码
yum install vim  tree tar net-tools rsync mailx -y

修改rsync软件的配置:

复制代码
vim /etc/rsyncd.conf

删掉原有,直接粘贴:

复制代码
uid = rsync							# 用户
gid = rsync							# 组
use chroot = no						# 程序安全设置
max connections = 200				# 客户端连接数
timeout = 300						# 超时时间
pid file = /var/run/rsyncd.pid		# 进程号文件位置
lock file = /var/run/rsync.lock		# 进程锁
log file = /var/log/rsyncd.log		# 日志文件
fake super = yes 					# 无需rsync以root身份运行,允许接受数据

[backup]
        path = /backup						# 目录
        ignore errors						# 有错误时忽略
        read only = false					# 可读可写
        list = false			            # 阻止远程列表
        hosts allow = 192.168.88.0/24		# 允许IP
        hosts deny = 0.0.0.0/32				# 禁止IP
        auth users = rsync					# 用于认证的账户
        secrets file = /etc/rsync.password	# 存放用户和密码的文件

我的:

复制代码
uid = rsync                                                     
gid = rsync                                                     
use chroot = no                                         
max connections = 200                           
timeout = 300                                           
pid file = /var/run/rsyncd.pid          
lock file = /var/run/rsync.lock         
log file = /var/log/rsyncd.log          fake super = yes                                        

[backup]
        path = /backup                                          
        ignore errors                                           
        read only = false                                       
        list = false                                
        hosts allow = 192.168.12.0/24           
        hosts deny = 0.0.0.0/32                         
        auth users = rsync                              
        secrets file = /etc/rsync.password
~                                             

账户的新建和备份目录新建:

复制代码
useradd -M -s /sbin/nologin rsync

mkdir /backup

递归:

复制代码
chown -R rsync /backup

启动并开机启动:

复制代码
systemctl enable --now rsyncd

检查:

密码配置:

建立密码文件:

复制代码
echo "rsync:rsync123" > /etc/rsync.password

权限:

复制代码
chmod 600 /etc/rsync.password

配置备份脚本

web01:

复制代码
rpm -q rsync
复制代码
tree /www 

新建备份目录:

复制代码
mkdir  /backup

新建备份脚本:

复制代码
mkdir -p  /server/scripts

vim  /server/scripts/backup.sh

#!/bin/bash
# Date:2025-2-19
# Author:Andy
# Mail:[email protected]
# Function: Regularly backup data from web servers
# Version: V1.0

Date=$(date +%F_Week0%w)          # 定义时间方式  
Host_IP=$(ifconfig ens32 | awk '/inet / {print $2}')  # 获取IP,注意网卡名
Backup_Dir="/backup/"             # 本地备份路径
Backup_Server_IP=192.168.12.202   # 备份服务器的IP

# 创建指定目录和IP的目录
[ ! -d $Backup_Dir/$Host_IP ] && mkdir -p $Backup_Dir/$Host_IP

# 输出提示信息
echo ${Date} ${Host_IP} start backup ......

Date=$(date +%F_Week0%w)          # 定义时间方式  
Host_IP=$(ifconfig ens32 | awk '/inet / {print $2}')  # 获取IP,注意网卡名
Backup_Dir="/backup/"             # 本地备份路径
Backup_Server_IP=192.168.12.202   # 备份服务器的IP

# 创建指定目录和IP的目录
[ ! -d $Backup_Dir/$Host_IP ] && mkdir -p $Backup_Dir/$Host_IP

# 输出提示信息
echo ${Date} ${Host_IP} start backup ......


# 把备份推送到备份服务器
rsync -az $Backup_Dir rsync@${Backup_Server_IP}::backup --password-file=/etc/rsync.password

# 删除7天以前的所有本地备份数据
find ${Backup_Dir:-/tmp} -type f -name "*.tar.gz" -a -name "*flag*" -mtime +7|xargs rm -f

echo "Local backup successful, the backup files have been pushed to the backup server"
[root@web01 ~]# vim  /server/scripts/backup.sh
[root@web01 ~]# cat  /server/scripts/backup.sh
#!/bin/bash
# Date:2025-4-11
# Author:Andy
# Mail:[email protected]
# Function: Regularly backup data from web servers
# Version: V1.0

Date=$(date +%F_Week0%w)          # 定义时间方式  
Host_IP=$(ifconfig ens32 | awk '/inet / {print $2}')  # 获取IP,注意网卡名
Backup_Dir="/backup/"             # 本地备份路径
Backup_Server_IP=192.168.12.202   # 备份服务器的IP

# 创建指定目录和IP的目录
[ ! -d $Backup_Dir/$Host_IP ] && mkdir -p $Backup_Dir/$Host_IP

# 输出提示信息
echo ${Date} ${Host_IP} start backup ......

Date=$(date +%F_Week0%w)          # 定义时间方式  
Host_IP=$(ifconfig ens32 | awk '/inet / {print $2}')  # 获取IP,注意网卡名
Backup_Dir="/backup/"             # 本地备份路径
Backup_Server_IP=192.168.12.202   # 备份服务器的IP

# 创建指定目录和IP的目录
[ ! -d $Backup_Dir/$Host_IP ] && mkdir -p $Backup_Dir/$Host_IP

# 输出提示信息
echo ${Date} ${Host_IP} start backup ......


# 把备份推送到备份服务器
rsync -az $Backup_Dir rsync@${Backup_Server_IP}::backup --password-file=/etc/rsync.password

# 删除7天以前的所有本地备份数据
find ${Backup_Dir:-/tmp} -type f -name "*.tar.gz" -a -name "*flag*" -mtime +7|xargs rm -f

echo "Local backup successful, the backup files have been pushed to the backup server"

客户端建立认证的文件密码如下:

复制代码
 vim /etc/rsync.password  

权限:

复制代码
chmod 600 /etc/rsync.password 

测试:

复制代码
bash  /server/scripts/backup.sh 

backup:

nfs01同上

设置定时任务:

web01下载软件:

复制代码
yum  install  crontabs

查看crontabs的状态:【一般系统中会自带】

设置定时任务:

web01:

编辑crontab文档:

nfs01:

同上:

backup:

同上:

邮件设置backup:

创建目录:

复制代码
mkdir  /backup

mkdir -p  /server/scripts

  • 强制创建多级目录,忽略已存在的情况

  • 这是脚本和日常操作中的最佳实践,能有效避免路径缺失导致的错误。

进入设置文档:

复制代码
vim  /server/scripts/backup.sh

#!/bin/bash
# Date:2025-4-12
# Author:Andy
# Mail:[email protected]
# Function: Verify the integrity of backup files
# Version: V1.0

Date=$(date +%F_Week0%w)
Backup_Dir="/backup/"
Check_Log="/tmp/bak.log_$(date +%F)"    
[email protected]    

find $Backup_Dir -type f -name "${Date}.flag"|xargs md5sum -c >> $Check_Log


if [ -n "cat $Check_Log" ]
then
    mail -s "$Date backup data info" $Admin_Mail < $Check_Log
else
    echo "$Date backup data error,pls check it." > $Check_Log    
    mail -s "$Date backup data info" $Admin_Mail < $Check_Log
fi
cp $Check_Log{,.ori} && > $Check_Log

配置邮件告警功能:

backup安装发邮件的软件:

复制代码
yum  install  mailx  -y

backup配置QQ邮箱ssl证书:

复制代码
mkdir -p /root/.certs

cd  /root/.certs

 echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt

 certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

 certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

 certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt

返回该内容为成功:

【Notice: Trust flag u is set automatically if the private key is present.】

配置邮件文件:

复制代码
vim  /etc/mail.rc

修改文档:

复制代码
set from=      @qq.com
set smtp=smtps://smtp.qq.com:465         # ssl端口默认465
set smtp-auth-user=       @qq.com
set smtp-auth-password=             # 授权码
set smtp-auth=login
set nss-config-dir=/root/.certs/     # 设置证书路径
set ssl-verify=ignore                # 启用加密ssl传输in

授权码:

QQ的授权码申请:

登录QQ邮箱--->打开设置--->进入账号与安全--->选择安全设置----如图选择生成授权码:

backup测试邮件:

复制代码
echo  "testmail"  |  mail  -s  "testmail"       @qq.com

测试成功:

backup发送邮件:

复制代码
 bash /server/scripts/send_mail.sh

如图所示,则项目成功:

易出错点:

Web01的备份数据没有备份成功,在backup和web01中的存储备份的文件中没有应出现的数据

如图所示:

解决方案:

发现备份脚本有重复信息,删除备份脚本内容,重新输入并启动。备份文件中出现内容,备份成功。

相关推荐
MobiCetus8 分钟前
Linux Kernel 7
linux·运维·服务器·windows·ubuntu·centos·gnu
再学一丢丢32 分钟前
用户管理和权限管理
linux·运维·服务器
Bardb1 小时前
05--MQTT物联网协议
linux·服务器·阿里云·json
红虾程序员2 小时前
Linux进阶命令
linux·服务器·前端
.R^O^2 小时前
VLAN的知识
linux·服务器·网络·mysql
Sherry Wangs2 小时前
GitHub实用手册
github
uhakadotcom2 小时前
PyTorch 2.0:最全入门指南,轻松理解新特性和实用案例
后端·面试·github
LTPP3 小时前
掌握Rust Web开发的未来:Hyperlane框架全方位教程 🎓🔧
前端·后端·github
随猿Fa3 小时前
用密钥方式让通过JumpServer代理的服务器可以在我本地电脑直接访问
运维·服务器
库库林_沙琪马4 小时前
Linux 命令全解析:从零开始掌握 Linux 命令行
linux·运维·服务器