翼度科技»论坛 云主机 LINUX 查看内容

Linux备份任务综合实验

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
任务背景

客户端需求

客户端需求:
  1. 1.客户端每一个小时整点在服务器本地打包备份(/etc目录和/var/log目录)
  2. 2.客户端备份的数据必须存放至以 "主机名_ip地址_当前时间" 命名的目录中
  3. 3.客户端最后通过rsync推送本地已经打包好的备份文件至backup服务器
  4. 4.客户端服务器本地保留最近2天的数据,避免浪费磁盘空间
复制代码
服务端需求
  1. 服务端需求:
  2. 1.服务端部署rsync,用于接收客户端推送过来的备份数据
  3. 2.服务端需要每次校验客户端推送过来的数据是否完整
  4. 3.服务端需要每次校验的结果通知给管理员
  5. 4.服务端仅保留7天的备份数据,其余的全部删除
  6. 注意:所有服务器的备份目录必须都为/backup
复制代码
主机列表
  1. 客户端:172.16.1.110  client-110
  2. 服务端:172.16.1.241  rsync-test-241
复制代码
实验过程记录

思路:先把大需求,拆分为每一个小需求,思考出解决办法,然后再综合操作,最后再写成脚本。
一、客户端

1.打包备份

客户端每一个小时整点在服务器本地打包备份(/etc目录和/var/log目录)
  1. 注意tar命令打包,尽量以相对路径去打包
  2. /etc目录是为了备份系统配置文件、应用配置文件
  3. /var/log是为了备份所有应用程序的日志
复制代码
1.1.创建备份目录/backup
  1. [root@client-110 ~]# mkdir /backup
复制代码
1.2.打包/etc
  1. [root@client-110 ~]# cd / && tar -czf /backup/etc.tgz etc
  2. [root@client-110 /]# ll -h /backup/
  3. 总用量 10M
  4. -rw-r--r-- 1 root root 10M 11月 20 14:48 etc.tgz
复制代码
1.3.打包/var/log
  1. [root@client-110 /]# cd / && tar -czf /backup/log.tgz var/log
  2. [root@client-110 /]# ll -h /backup/log.tgz
  3. -rw-r--r-- 1 root root 391K 11月 20 14:57 /backup/log.tgz
复制代码
2.文件夹命名要求

客户端备份的数据必须存放至以"主机名_ip地址_当前时间"命名的目录中,期望的结果是,如client-110_172.16.1.110_2024-11-20_16
2.1.获取主机名
  1. [root@client-110 /]# hostname
  2. client-110
复制代码
2.2.提取ip地址

查看网卡eth1地址
  1. [root@client-110 /]# ifconfig eth1
  2. eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  3.         inet 172.16.1.110  netmask 255.255.255.0  broadcast 172.16.1.255
  4.         inet6 fe80::5054:ff:fef4:86e2  prefixlen 64  scopeid 0x20<link>
  5.         ether 52:54:00:f4:86:e2  txqueuelen 1000  (Ethernet)
  6.         RX packets 735  bytes 46116 (45.0 KiB)
  7.         RX errors 0  dropped 680  overruns 0  frame 0
  8.         TX packets 34  bytes 2236 (2.1 KiB)
  9.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
复制代码
通过awk命令提取ip地址
  1. [root@client-110 /]# ifconfig eth1|awk 'NR==2{print $2}'
  2. 172.16.1.110
复制代码
2.3.获取当前时间

日期_小时
  1. [root@client-110 /]# date +%F_%H
  2. 2024-11-20_15
复制代码
2.4.拼接在一起,文件夹命名的命令如下
  1. [root@client-110 /]# echo "$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)"
  2. client-110_172.16.1.110_2024-11-20_15
复制代码
2.5.创建符合要求的目录
  1. [root@client-110 /]# mkdir -p /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)
  2. [root@client-110 /]# ls /backup/
  3. client-110_172.16.1.110_2024-11-20_15  etc.tgz  log.tgz
  4. [root@client-110 /]# ll -h /backup/
  5. 总用量 11M
  6. drwxr-xr-x 2 root root    6 11月 20 15:29 client-110_172.16.1.110_2024-11-20_15
  7. -rw-r--r-- 1 root root  10M 11月 20 14:48 etc.tgz
  8. -rw-r--r-- 1 root root 391K 11月 20 14:57 log.tgz
复制代码
2.6.将之前打包好的备份包移动到该目录
  1. [root@client-110 /]# mv /backup/*.tgz /backup/client-110_172.16.1.110_2024-11-20_15/
  2. [root@client-110 /]# tree /backup/
  3. /backup/
  4. └── client-110_172.16.1.110_2024-11-20_15
  5.     ├── etc.tgz
  6.     └── log.tgz
  7. 1 directory, 2 files
复制代码
3.文件传输

客户端最后通过rsync推送本地已经打包好的备份文件至备份服务器。
此处不展示服务端rysnc搭建,请参考1.在rsync-test-241服务器上搭建rsync
3.1.1客户端安装rsync工具
  1. [root@client-110 /]# yum install -y rsync
  2. 已加载插件:fastestmirror
  3. Loading mirror speeds from cached hostfile
  4. 软件包 rsync-3.1.2-12.el7_9.aarch64 已安装并且是最新版本
  5. 无须任何处理
复制代码
3.1.2使用RSYNC_PASSWORD变量与rsync服务端同步文件
  1. [root@client-110 /]# export RSYNC_PASSWORD=mima666
  2. [root@client-110 /]# rsync -avzP /backup/ rsync_backup@172.16.1.241::backup-nfs
  3. sending incremental file list
  4. ./
  5. client-110_172.16.1.110_2024-11-20_15/
  6. client-110_172.16.1.110_2024-11-20_15/etc.tgz
  7.      10,406,491 100%   21.32MB/s    0:00:00 (xfr#1, to-chk=1/4)
  8. client-110_172.16.1.110_2024-11-20_15/log.tgz
  9.         399,728 100%  809.87kB/s    0:00:00 (xfr#2, to-chk=0/4)
  10. sent 10,602,412 bytes  received 65 bytes  21,204,954.00 bytes/sec
  11. total size is 10,806,219  speedup is 1.02
复制代码
4.删除过期文件

客户端机器本地保留最近2天的数据,避免浪费磁盘空间
  1. [root@client-110 /]# find /backup/ -mtime +2 -delete
复制代码
5.整合脚本

把上述拆解的过程,写成一个脚本、批量执行。
  1. [root@client-110 /]# vim /scripts/autorsync.sh
  2. [root@client-110 /]# cat /scripts/autorsync.sh
  3. #!/bin/bash
  4. #1.创建符合要求的目录
  5. mkdir -p /backup/"$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)"/
  6. #2.打包要备份的数据
  7. cd / && tar -czf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)/etc.tgz etc
  8. cd / && tar -czf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)/log.tgz var/log
  9. #3.执行同步
  10. export RSYNC_PASSWORD=mima666
  11. rsync -az /backup/ rsync_backup@172.16.1.241::backup-nfs
  12. #4.删除超过2天的过期文件
  13. find /backup/ -mtime +2 -delete
复制代码
6.调试脚本
  1. [root@client-110 /]# bash -x /scripts/autorsync.sh
  2. ++ hostname
  3. ++ ifconfig eth1
  4. ++ awk 'NR==2{print $2}'
  5. ++ date +%F_%H
  6. + mkdir -p /backup/client-110_172.16.1.110_2024-11-20_16/
  7. + cd /
  8. ++ hostname
  9. ++ ifconfig eth1
  10. ++ awk 'NR==2{print $2}'
  11. ++ date +%F_%H
  12. + tar -czf /backup/client-110_172.16.1.110_2024-11-20_16/etc.tgz etc
  13. + cd /
  14. ++ hostname
  15. ++ ifconfig eth1
  16. ++ awk 'NR==2{print $2}'
  17. ++ date +%F_%H
  18. + tar -czf /backup/client-110_172.16.1.110_2024-11-20_16/log.tgz var/log
  19. + export RSYNC_PASSWORD=mima666
  20. + RSYNC_PASSWORD=mima666
  21. + rsync -az /backup/ rsync_backup@172.16.1.241::backup-nfs
  22. + find /backup/ -mtime +2 -delete
复制代码
二、服务端

1.脚本化部署rsyncd服务端

服务端部署rsync,用于接收客户端推送过来的备份数据
配置rsyncd服务端的的全流程请参考1.在rsync-test-241服务器上搭建rsync,也可以写成如下脚本,一键安装
  1. #!/bin/bash
  2. yum install rsync -y
  3. cat > /etc/rsyncd.conf << 'EOF'
  4. uid = www
  5. gid = www
  6. port = 873
  7. fake super = yes
  8. use chroot = no
  9. max connections = 200
  10. timeout = 600
  11. ignore errors
  12. read only = false
  13. list = false
  14. auth users = rsync_backup
  15. secrets file = /etc/rsync.passwd
  16. log file = /var/log/rsyncd.log
  17. [backup-nfs]
  18. comment = client backup!
  19. path = /backup
  20. EOF
  21. useradd -u 1000 -M -s /sbin/nologin www
  22. mkdir -p /backup
  23. chown -R www:www /backup
  24. echo "rsync_backup:mima666" > /etc/rsync.passwd
  25. chmod 600 /etc/rsync.passwd
  26. systemctl start rsyncd
复制代码
2.校验数据完整性

服务端需要每次校验客户端推送过来的数据是否完整
通过md5sum命令即可生成文件的唯一校验值,等于添加了一个防伪标记。
2.1.此时需要修改客户端client-110上的脚本了,多一个对文件校验的过程
  1. [root@client-110 /]# vim autorsync.sh
  2. [root@client-110 /]# cat autorsync.sh
  3. #!/bin/bash
  4. #1.创建符合要求的目录
  5. mkdir -p /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)/
  6. #2.打包要备份的数据
  7. cd / && tar -czf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)/etc.tgz etc
  8. cd / && tar -czf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)/log.tgz var/log
  9. #2.1添加文件校验
  10. md5sum /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F_%H)/*.tgz > /backup/md5_tgz.txt
  11. #3.执行同步
  12. export RSYNC_PASSWORD=mima666
  13. rsync -az /backup/ rsync_backup@172.16.1.241::backup-nfs
复制代码
2.2.客户端client-110修改完脚本后手动运行一次脚本
  1. [root@client-110 /]# bash  /scripts/autorsync.sh
复制代码
2.3.此时在rsync服务端rsync-test-241,可以通过命令校验文件完整性
  1. [root@rsync-test-241 ~]# md5sum -c /backup/md5_tgz.txt
  2. /backup/client-110_172.16.1.110_2024-11-20_16/etc.tgz: 确定
  3. /backup/client-110_172.16.1.110_2024-11-20_16/log.tgz: 确定
  4. [root@rsync-test-241 ~]#
复制代码
3.邮件通知

服务端需要每次校验的结果通知给管理员
  1. 这里照抄就好,需要更换为你自己的qq邮箱即可
  2. 然后需要打开qq邮箱的smtp服务器的授权码
  3. 注意授权码别泄露给别人
复制代码
  1. #1.安装配置mailx:
  2. yum install mailx -y
  3. #2.邮箱配置文件
  4. cat > /etc/mail.rc << 'EOF'
  5. set from=877348***0@qq.com
  6. set smtp=smtps://smtp.qq.com:465
  7. set smtp-auth-user=877348***0@qq.com
  8. set smtp-auth-password=be********aje
  9. set smtp-auth=login
  10. set ssl-verify=ignore
  11. set nss-config-dir=/etc/pki/nssdb/
  12. EOF
  13. #3.服务端生成校验结果文件:
  14. md5sum -c /backup/md5_tgz.txt > /backup/check_md5_result.txt
  15. #4.校验发送命令,把校验结果,发给自己的qq邮箱
  16. # 语法 mail -s "邮件主题" 邮箱 < 邮件正文
  17. mail -s "check-rsync-$(date +%F)" 877348***0@qq.com < /backup/check_md5_result.txt
复制代码
4.过期文件删除

服务端仅保留7天的备份数据,其余的全部删除
  1. [root@rsync-test-241 ~]#  find /backup/ -mtime +7 -delete
复制代码
5.将服务端的操作汇总为脚本
  1. [root@rsync-test-241 ~]# vim /scripts/checkrsync.sh
  2. [root@rsync-test-241 ~]# cat /scripts/checkrsync.sh
  3. #!/bin/bash
  4. export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  5. #1.校验数据完整性
  6. md5sum -c /backup/md5_tgz.txt > /backup/check_md5_result.txt
  7. #2.发送邮件
  8. mail -s "check-rsync-$(date +%F)" 877348***0@qq.com < /backup/check_md5_result.txt
  9. #3.删除过期文件
  10. find /backup/ -mtime +7 -delete
复制代码
三、设置定时任务

1.客户端要求每小时整点执行备份
  1. [root@client-110 /]# crontab -e
  2. crontab: installing new crontab
  3. [root@client-110 /]# crontab -l
  4. 0 * * * * /bin/bash /scripts/autorsync.sh > /tmp/backup.log 2>&1
复制代码
2.服务端要求每次同步后进行校验
  1. [root@rsync-test-241 ~]# crontab -e
  2. crontab: installing new crontab
  3. [root@rsync-test-241 ~]# crontab -l
  4. 30 * * * * /bin/bash    /scripts/checkrsync.sh > /tmp/backup.log 2>&1
复制代码
来源:https://www.cnblogs.com/funlyp/p/18558670
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具