【集群实战】Rsync试题-异机数据备份解决方案
企业案例:Rsync上机实战考试题:
某公司有一台Web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其它机器上做一个周期性定时备份。
要求如下:
- 每天晚上00点整在Web服务器A上打包备份网站程序并通过rsync命令推送到服务器B上备份保留(备份思路可以是先在本地按日期打包,然后再利用rsync推送到备份服务器上)。
具体要求如下:
- Web服务器A和备份服务器B的备份必须都为/backup
- 系统配置文件包括但不限于:
- 定时开机服务的配置文件/var/spool/cron/root
- 开机自启动的配置文件/etc/rc.local
- 日常脚本的目录/server/scripts
- 防火墙iptables的配置文件/etc/sysconfig/iptables
- 更多的配置文件...
- Web服务器站点目录假定为/var/www/html
- Web服务器A的日志路径为/app/logs
- Web服务器本地仅保留7天内的备份。
- 备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱。
- 备份服务器上每周六的数据都保留,其它备份仅保留180天备份。
解答:
思路,重点主要分三大部分:
- 一部分是备份服务器的搭建;
- Web服务器的本地打包脚本实现
- 配置定时任务
【备份服务器搭建】
环境准备:
备份服务器:192.168.0.41 backup
web服务器:192.168.0.31 web01
环境模拟:
1. 【web服务器】假定web服务器的站点目录是/var/www/html,创建站点目录
mkdir /var/www/html -p
2. 【备份服务器】web服务器A和备份服务器B的备份都必须为/backup,部署rsync备份配置
备份服务器B:
rpm -qa rsync # 确认是否安装了rsync服务 lsof -i :873 # 查看rsync服务是否运行 rsync --daemon # 如过不运行,则运行rsync服务;若服务在运行中,则忽略
3. 【备份服务器】vi /etc/rsyncd.conf # 对备份服务器端的rsync服务进行配置
[root@backup-41 /]# cat /etc/rsyncd.conf
# rsync_config____start
# created by zoe
## rsyncd.conf start ## 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 ######
[backup]
path = /backup/
ignore errors
read only = false
list = false
hosts allow = 192.168.0.31/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password## rsync_config____end ##
4. 【备份服务器】根据配置内容:创建相应的目录和文件。
4.1 创建rsync用户和用户组
useradd -M -s /sbin/nologin rsync
id rsync
4.2 创建备份目录
mkdir /backup -p
4.3 更改备份目录的属主和属组
chown -R rsync.rsync /backup
4.4 创建/etc/rsync.password文件,创建虚拟用户rsync_backup的用户名和密码,用于服务器之间的socket通信连接;注意更改明文密码的文件权限
echo "rsync_backup:123456">/etc/rsync.password
chmod 600 /etc/rsync.password
【服务器Web端】
1. 确认rsync服务存在,且在运行
rpm -qa rsync lsof -i :873
2. 创建备份目录
mkdir /backup -p
3. 创建/etc/rsync.password密码文件
echo 123456> /etc/rsync.password chmod 600 /etc/rsync.password
======= 备份服务器和web服务器之间的备份配置完成 ======
【测试:部署是否成功】
在web服务器上执行:
rsync -avz /var/www/html rsync_backup@192.168.0.41::backup/ --password-file=/etc/rsync.password
成功,发现部署完成。
【web服务器本地打包脚本】
配置文件,web程序,日志分开打包。以便于后期的管理和恢复。
环境模拟:web程序目录和日志目录创建
mkdir /var/www/html -p mkdir /app/logs -p
脚本在命令行测试:
cd / && tar zcvf www_$(date +%F).tar.gz var/www/html/ cd / && tar zcvf config_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables server/scripts cd / && tar zcvf logs_$(date +%F).tar.gz app/logs/
复制命令行测试完成的命令到脚本,并添加rsync备份命令和删除7天以前的备份文件命令:
[root@nfs-31 scripts]# cat backup.sh
#!/bin/bash
ip=$(ifconfig eth1|awk -F '[: ]+' 'NR==2 {print $4}')
Path="/backup/$ip"
[ ! -d $Path ] && mkdir $Path -p # backup
cd / &&\
tar zcf $Path/www_$(date +%F).tar.gz var/www/html/
tar zcf $Path/config_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables server/scripts
tar zcf $Path/logs_$(date +%F).tar.gz app/logs/ # to backup server
rsync -avz /backup/ rsync_backup@192.168.0.41::backup/ --password-file=/etc/rsync.password # del
find /backup -type f -name "*.tar.gz" -mtime +7|xargs rm -f
【定时任务】
【web服务器】
crontab -e
00 00 * * * /bin/bash /scripts/backup.sh >/dev/null 2>&1
[root@nfs-31 scripts]# crontab -l
# time sync
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 # backup
00 00 * * * /bin/bash /server/scripts/backup.sh >/dev/null 2>&1
【其它】
【备份服务器】
- 备份服务器上每周六的数据都保留,其它备份仅保留180天备份。
[root@backup-41 scripts]# cat backup_del.sh
#!/bin/bash /bin/find /backup -type f -name "*.tar.gz" -mtime +180|xargs rm -f
# 每周六这种的文件格式应该为*$(date +%F-%w),上面就不更改了,细节,仅做说明
/bin/find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz" -mtime +180 |xargs rm -f
[root@backup-41 scripts]# crontab -l
# time sync
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 # del 180days ago backup file
00 00 * * * /bin/bash /server/scripts/backup_del.sh >/dev/null 2>&1
【邮件通知】
备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱。
- 思路:服务器端检查结果
- du -sh /backup/* >/tmp/bak.log
- 或者对比大小,对比修改时间给出成功失败的结果。
- 打包,推送,在推送一个flag(ip+时间的文件名),本地清理7天以前的。
- 手工或定时的解包,模拟数据恢复来确认数据备份的完整性。
- flag+数据包md5sum指纹
下面主要是flag+数据包md5sum的验证:
验证本地打包是否正常:
[root@nfs-31 scripts]# cat backup.sh
#!/bin/bash
ip=$(ifconfig eth1|awk -F '[: ]+' 'NR==2 {print $4}')
Path="/backup/$ip"
[ ! -d $Path ] && mkdir $Path -p # backup
cd / &&\
tar zcf $Path/www_$(date +%F).tar.gz var/www/html/ &&\
tar zcf $Path/config_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables server/scripts &&\
tar zcf $Path/logs_$(date +%F).tar.gz app/logs/ &&\
touch $Path/flag_$(date +%F)
# 通过和&&命令,在所有tar命令执行成功之后,创建对应日期的flag文件。有这个文件说明打包成功。 # to backup server
rsync -avz /backup/ rsync_backup@192.168.0.41::backup/ --password-file=/etc/rsync.password # del
find /backup -type f -name "*.tar.gz" -mtime +7|xargs rm -f
为每个文件生成md5sum指纹:
[root@nfs-31 /]# find /backup/ -type f -name "*$(date +%F).tar.gz"|xargs md5sum
1bd841a50d87963ff60187dee4abf267 /backup/192.168.0.31/www_2019-12-02.tar.gz
bfff332b4bfc8040094c4cc6996c8c66 /backup/192.168.0.31/logs_2019-12-02.tar.gz
f625eb1346b473060bb146bafdaa937b /backup/192.168.0.31/config_2019-12-02.tar.gz
# 在backup.sh脚本中这样写
touch $Path/flag_$(date +%F)
find $Path -type f -name "*$(date +%F).tar.gz"|xargs md5sum >$Path/flag_$(date +%F)
在备份服务器端进行计较:md5sum -c flag_2019_12_02
[root@backup-41 192.168.0.31]# md5sum -c flag_2019-12-02
/backup/192.168.0.31/www_2019-12-02.tar.gz: OK
/backup/192.168.0.31/logs_2019-12-02.tar.gz: OK
/backup/192.168.0.31/config_2019-12-02.tar.gz: OK
md5sum -c会把md5sum对应的文件重新加密,再和文件内的md5值进行比较。
【邮件发送】
#!/bin/bash
ip = 192.168.0.31
find /backup/$(ip)/ -type f -name "flag_$(date +%F)" |xargs md5sum -c|grep FAILED >/opt/mail_body_$(date +%F).txt
mail -s "$(date +%U%F) back" 123456789@qq.com </opt/mail_body_$(date +%F).txt
其它参考博客:https://www.jianshu.com/p/4e90b286a9c7
【集群实战】Rsync试题-异机数据备份解决方案的更多相关文章
- Kubernetes-3.3:ETCD集群搭建及使用(https认证+数据备份恢复)
etcd集群搭建 环境介绍 基于CentOS Linux release 7.9.2009 (Core) ip hostname role 172.17.0.4 cd782d0a790b etcd1 ...
- 基于Ambari Server部署HDP集群实战案例
基于Ambari Server部署HDP集群实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari Server端 博主推荐阅读: https://www.c ...
- MySQL/MariaDB数据库的Galera高可用性集群实战
MySQL/MariaDB数据库的Galera高可用性集群实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Galera Cluster概述 1>.什么是Gale ...
- 假如Kafka集群中一个broker宕机无法恢复,应该如何处理?
假如Kafka集群中一个broker宕机无法恢复, 应该如何处理? 今天面试时遇到这个问题, 网上资料说添加新的broker, 是不会自动同步旧数据的. 笨办法 环境介绍 三个broker的集群, z ...
- redis3.0 集群实战1 -- 安装和配置
本文主要是在centos7上安装和配置redis集群实战 参考: http://hot66hot.iteye.com/blog/2050676 集群教程: http://redisdoc.com/to ...
- [转]ZooKeeper 集群环境搭建 (本机3个节点)
ZooKeeper 集群环境搭建 (本机3个节点) 是一个简单的分布式同步数据库(或者是小文件系统) ------------------------------------------------- ...
- 《跟老男孩学Linux运维:Web集群实战》读书笔记
Linux 介绍 Linux 安装 Linux 调优 Web 基础 Nginx 应用 LNMP 应用 PHP 缓存加速 Nginx 调优 MySQL 应用 NFS 网络文件共享 Nginx 反向代理与 ...
- zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。
zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的.
- 基于Ceph分布式集群实现docker跨主机共享数据卷
上篇文章介绍了如何使用docker部署Ceph分布式存储集群,本篇在此基础之上,介绍如何基于Ceph分布式存储集群实现docker跨主机共享数据卷. 1.环境准备 在原来的环境基础之上,新增一台cen ...
随机推荐
- Vertica的这些事(二)——SQL-Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 绝对值 S:select abs(-1) value O ...
- Java 程序该怎么优化?(命令篇)
灵魂拷问,JDK 提供的命令,除了 java.javac,你还用过哪些命令呢? 灵魂再拷问,若你写的 Java 程序,出现了性能问题,该怎么去排查呢? Java 作为编程语言中的战斗机,JDK 默认已 ...
- cls
class : python中cls代表的是类的本身,相对应的self则是类的一个实例对象. class Person(object): def __init__(self, name, age): ...
- 原生js,jquery通过ajax获得后台json数据动态新增页面元素
一.原生js通过ajax获取json数据 因为IE浏览器对ajax对象的创建和其他浏览器不同,为了兼容全部浏览器,我用下面的代码: function createXMLHttpRequest(){ t ...
- java web知识点复习,重新编写学生选课系统的先关操作。
为了复习之前学习的相关的html,javaweb等知识.自己有重新编写了一遍学生选课系统. 下面主要展示登录界面的代码,以及各个大的主页面的相关jsp. <%@ page language=&q ...
- LINUX解压缩 zip文件
压缩当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip xxx.zip
- CH5701 开车旅行(倍增dp+set)
传送门 解题思路: 一道比较有趣的题,解题工作主要分为两块: ①找出k(k=0表示小A先走,k=1表示小B先走,下面同理)从点i出发下一个到达的点to[k][i]; 一开始偷懒用了vector(偷懒一 ...
- Python pip高级用法
1.pip 高级用法为了便于用户安装和管理第三方库和软件,越来越多的编程语言拥有自己的包管理工 具,如 nodejs 的 npm, ruby 的 gem. Python 也不例外,现在 Python ...
- x聊之后,又一波新的诈骗套路
前些天刚看到,x聊勒索诈骗套路,骗子的套路可以说是花样百出,这不又一网友深受其害. 事情经过是这样的 某被骗网友由于工资微薄一直想找副业增加收入,关注和加了很多群. 注意群里都是有偏亮头像的”小姐姐” ...
- python基础:如何使用python pandas将DataFrame转换为dict
之前在知乎上看到有网友提问,如何将DataFrame转换为dict,专门研究了一下,pandas在0.21.0版本中是提供了这个方法的.下面一起学习一下,通过调用help方法,该方法只需传入一个参数, ...