数据备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。传统的数据备份主要是采用内置或外置的磁带机进行冷备份。但是这种方式只能防止操作失误等人为故障,而且其恢复时间也很长。随着技术的不断发展,数据的海量增加,不少的企业开始采用网络备份。网络备份一般通过专业的数据存储管理软件结合相应的硬件和存储设备来实现。

实现基础架构图

1、基本备份要求

已知3台服务器主机名分别为web01,backup、nfs01,主机信息见下表:

要求:

每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录及访问日志,

通过rsync命令推送备份服务器backup上备份保留

(备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上)

具体要求如下:

1)Web服务器和备份服务器的备份目录必须都为/backup
2)要备份的系统配置文件包括但不限于:

a.定时任务服务的配置文件(var/spool/cron/root)。.
b.开机自启动的配置文件(/etc/rc.local)
c.日常脚本的目录(/server/scripts)
d.防火墙iptables的配置文件(/etc/sysconfig/iptables)。.
e.自己思考下还有什么需要备份呢?

3)Web服务器站点目录假定为(var/htm/www).
4)Web服务器A访问日志路径假定为(/app/logs).
5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)

6)备份服务器上,保留最近7天的备份数据,同时保留6个月内每周一的所有数据副本。
7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
8)需要确保备份的数据尽量完整性,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中

数据备份项目实战:

解题思路

1、搭建backup服务器

a、resync服务器

2、搭建web01服务器

a、验证rsync服务器能否推送成功

b、开发脚本实现打包,备份,推送,校检,删除

c、配置定时任务每天0点定时推送

3、backup服务器

a、开发脚本实现校检,删除、报警

b、配置定时任务每天6点定时执行

4、同理搭建存储nfs01服务器

2、项目实施

配置所有hosts服务器

cat >> /etc/hosts <<EOF
192.168.116.129 web
192.168.116.130 backup
192.168.116.131 nfs
EOF

backup服务器安装rsync

 yum install -y rsync
[root@backup ~]# useradd -s /sbin/nologin -M rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) 组=1001(rsync)[root@backup ~]# vim /etc/rsyncd.conf
port=873
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
motd file = /var/rsyncd/rsync.motd
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[backup]
path = /backup/
ignore errorsread only = false
write only = false
list = falsehosts allow = 192.168.116.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsyncd.passwd
######### 全局配置参数 ##########
port=888    # 指定rsync端口。默认873
uid = rsync # rsync服务的运行用户,默认是nobody,文件传输成功后属主将是这个uid
gid = rsync # rsync服务的运行组,默认是nobody,文件传输成功后属组将是这个gid
use chroot = no # rsync daemon在传输前是否切换到指定的path目录下,并将其监禁在内
max connections = 200 # 指定最大连接数量,0表示没有限制
timeout = 300         # 确保rsync服务器不会永远等待一个崩溃的客户端,0表示永远等待
motd file = /var/rsyncd/rsync.motd   # 客户端连接过来显示的消息
pid file = /var/run/rsyncd.pid       # 指定rsync daemon的pid文件
lock file = /var/run/rsync.lock      # 指定锁文件
log file = /var/log/rsyncd.log       # 指定rsync的日志文件,而不把日志发送给syslog
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2  # 指定哪些文件不用进行压缩传输###########下面指定模块,并设定模块配置参数,可以创建多个模块###########
[longshuai]        # 模块ID
path = /longshuai/ # 指定该模块的路径,该参数必须指定。启动rsync服务前该目录必须存在。rsync请求访问模块本质就是访问该路径。
ignore errors      # 忽略某些IO错误信息
read only = false  # 指定该模块是否可读写,即能否上传文件,false表示可读写,true表示可读不可写。所有模块默认不可上传
write only = false # 指定该模式是否支持下载,设置为true表示客户端不能下载。所有模块默认可下载
list = false       # 客户端请求显示模块列表时,该模块是否显示出来,设置为false则该模块为隐藏模块。默认true
hosts allow = 10.0.0.0/24 # 指定允许连接到该模块的机器,多个ip用空格隔开或者设置区间
hosts deny = 0.0.0.0/32   # 指定不允许连接到该模块的机器
auth users = rsync_backup # 指定连接到该模块的用户列表,只有列表里的用户才能连接到模块,用户名和对应密码保存在secrts file中,# 这里使用的不是系统用户,而是虚拟用户。不设置时,默认所有用户都能连接,但使用的是匿名连接
secrets file = /etc/rsyncd.passwd # 保存auth users用户列表的用户名和密码,每行包含一个username:passwd。由于"strict modes"# 默认为true,所以此文件要求非rsync daemon用户不可读写。只有启用了auth users该选项才有效。
[xiaofang]    # 以下定义的是第二个模块
path=/xiaofang/
read only = false
ignore errors
comment = anyone can access

授权

[root@backup ~]# mkdir -p /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 6月  17 10:39 /backup/

配置密码

​
[root@backup ~]# touch /etc/rsyncd.passwd
[root@backup ~]# echo "rsync_backup:root" > /etc/rsyncd.passwd
[root@backup ~]# chmod 600 /etc/rsyncd.passwd
[root@backup ~]# ls -ld /etc/rsyncd.passwd
-rw------- 1 root root 18 6月  17 10:42 /etc/rsyncd.passwd​

重启看是否成功

[root@backup ~]# rsync --daemon
[root@backup ~]# ss -lntup | grep rsync
tcp    LISTEN     0      5         *:873                   *:*                   users:(("rsync",pid=2280,fd=4))
tcp    LISTEN     0      5        :::873                  :::*                   users:(("rsync",pid=2280,fd=5))

开机自启动

[root@backup ~]# which rsync
/usr/bin/rsync
[root@backup ~]# echo "/usr/bin/rsync --daemon" >> /etc/rc.local
[root@backup ~]# tail -1 /etc/rc.local
/usr/bin/rsync --daemon

web服务器测试

rsync服务器接收客户端的请求

下面测试,显示成功

[root@web backup]# echo "root" >> /etc/rsync.password
[root@web backup]# chmod 600 /etc/rsync.password
[root@web backup]# rsync -avz /backup/ rsync://rsync_backup@192.168.116.130/backup --password-file=/etc/rsy
nc.password sending incremental file list
rsync: chgrp "." (in backup) failed: Operation not permitted (1)
./
mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

另一种传输方法

 rsync -avz /backup/ rsync_backup@192.168.116.130::backup --password-file=/etc/rsync.password 

web服务器,创建模拟数据

[root@web backup]#
[root@web backup]# mkdir /var/html/www -p
[root@web backup]# cd /var/html/www/
[root@web www]# touch {1..10}
[root@web www]# mkdir -p /app/logs
[root@web www]# touch /app/logs/{a..g}

备份脚本存放目录

[root@web www]# mkdir -p /server/scriptsvim  /server/scripts/bak.sh
#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
IP=$(ifconfig ens33|awk -F "[ :]+" 'NR==2{print $3}')
BakPath=/backup
mkdir $BakPath/$IP -p
if [ $(date +%w) -eq 2 ];thendate="$(date +%F -d "-1day")_week1"
elsedate="$(date +%F -d "-1day")"
ficd / &&\
tar zcfh $BakPath/$IP/sys_config_${date}.tar.gz var/spool/cron etc/rc.local server/scripts &&\
tar zcfh $BakPath/$IP/webdata_${date}.tar.gz var/html/www/ &&\
tar zcf $BakPath/$IP/access_log_${date}.tar.gz app/logs &&\
find $BakPath -type f -name "*.tar.gz"|xargs md5sum >$BakPath/$IP/flag_${date}
###bak data
rsync -az $BakPath/ rsync_backup@192.168.116.130::backup --password-file=/etc/rsync.password
###del data 7 days ago.
find $BakPath -type f  -mtime +7|xargs rm -f

数据校检MD5sum

定时任务

#backup00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1

Backup服务器校检,删除,报警

backup备份推送类容

邮件

yum install mailx -yvim /etc/mail.rc#设置发件人名称
set from=32915245@qq.com
#设置邮件服务器
set smtp=smtp.qq.com
#填写自己邮箱地址
set smtp-auth-user=3291245@qq.com
#输入邮箱验证码
set smtp-auth-password=wrgcmeapjw
#smtp的认证方式,默认是login
set smtp-auth=login

测试【已经完成】

 echo "admin ,文件内容" | mail -s "标题" 你的qq@qq.com

检验文件

vim /server/scripts/checkbak.sh#!/bin/sh
export LANG=en
find /backup/ -name "flag_$(date +%F -d "-1day")*"|xargs md5sum -c &>>/tmp/mail_$(date +%F).log
if [ $(date +%w) -eq 2 ];thendate="$(date +%F -d "-1day")_week1"
elsedate="$(date +%F -d "-1day")"
fifind /backup/ -type f -name "*.tar.gz" -a ! -name "*week1*" -mtime +1|xargs rm -f
mail -s "backup `date`" 1794748404@qq.com </tmp/mail_$(date +%F).log
\cp /tmp/mail_$(date +%F).log /tmp/mail_$(date +%F).log.ori
>/tmp/mail_$(date +%F).log

定时任务

#backup00 06 * * * /bin/sh /server/scripts/checkbak.sh >/dev/null 2>&1

正确

错误

然后可以把脚本使用ansible批量发布各个主机,然后就可以大规模集群备份

大规模集群全网数据备份解决方案相关推荐

  1. Hadoop集群大数据解决方案之MapReduce 程序实战进阶(自定义partitionsortgroup)(六)

    准 备   在上一篇博客举了个简单的word count,重在说明mapreduce的流程,但是针对mapreduce的编程,程序员能控制的,远远不止map和reduce,还有诸如partition, ...

  2. 大规模集群故障处理,能抗住这3个灵魂拷问算你赢

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 我相信每一个集群管理员,在长期管理多个不同体量及应用场景的 ...

  3. 在Google使用Borg进行大规模集群的管理

    pdf:  http://vdisk.weibo.com/s/z2pdgMOY-UA4C/1445988517 ----- 在Google使用Borg进行大规模集群的管理 <Large-scal ...

  4. 深度译文|Google的大规模集群管理系统Borg

    编者按:本文是对Google在分布式底层架构的经典文章的翻译,原文可以查看这里,由于原文较长,建议先收藏本文,再下载英文原文,对照译文仔细阅读,可事半功倍. 摘要:Google的Borg系统是一个运行 ...

  5. Google的大规模集群管理系统Borg

    编者按:本文是对Google在分布式底层架构的经典文章的翻译,原文可以查看这里,由于原文较长,建议先收藏本文,再下载英文原文,对照译文仔细阅读,可事半功倍. 摘要:Google的Borg系统是一个运行 ...

  6. 在Google使用Borg进行大规模集群的管理 7-8

    为什么80%的码农都做不了架构师?>>> [编者的话]最后两章探讨的是相关工作和改进.从中可以看到从Borg到Kubernetes,他们也做了不少思考,而这方面的工作远远没有完善,一 ...

  7. 大规模集群下Hadoop NameNode如何承载每秒上千次的高并发访问

    目录 一.问题源起 二.HDFS优雅的解决方案 (1)分段加锁机制 + 内存双缓冲机制 (2)多线程并发吞吐量的百倍优化 (3)缓冲数据批量刷磁盘 + 网络的优化 四.总结 五.参考文章 一.问题源起 ...

  8. Google大规模集群管理系统Borg的解读

    0 背景 0.1 Borg简介 Borg是Google内部的大规模集群管理系统,已经延续十余年的时间,大体上与MapReduce.GFS.BigTable.Chubby是同时代的产物,但一直被雪藏,直 ...

  9. SOFARegistry | 大规模集群优化实践

    文|李旭东 专注于 SOFARegistry 及其周边基础设施的开发与优化 本文 7016 字 阅读 15 分钟 1 前言 SOFARegistry 在蚂蚁内部迭代升级过程中,每年大促都会引来一些新的 ...

最新文章

  1. x264代码剖析(一):图文详解x264在Windows平台上的搭建
  2. mysql 交集_MySQL 查询结果取交集的实现方法
  3. android数据回传多个页面_Android页面之间进行数据回传
  4. C#中子线程操作主线程中窗体上控件的方法
  5. 处理字符串_12_按照指定的位置截取字符
  6. axios怎么封装,才能提升效率?
  7. jquery动画 -- 1.加载指示器
  8. 嵌入式linux 配置usb otg,嵌入式linux系统环境下USB设备的驱动实现
  9. webmin安装_如何在Ubuntu 18.04上安装Webmin
  10. Java基础:什么是List接口,如何去运用?
  11. scala method与function的区别
  12. [Serializable]C#中的对象序列化
  13. finereport9.0破解版|finereport10.0破解并发数|finereport授权注册|FineBI5.0破解lic
  14. 电脑连接android智能电视的一种方法
  15. 移动端后台管理系统框架
  16. Blender快捷键设置
  17. c语言与西门子plc通讯,西门子PLC四种核心通讯方式汇总学习
  18. 适用于WordPress网站的12个最佳计算器插件
  19. HAL库中外设驱动的实现(任意外设通用)
  20. 证明:DES解密算法是DES加密算法的逆

热门文章

  1. 计算机进程管理 360,电脑的进程管理得英文怎么打啊???
  2. 高频交易算法研发心得--WAVT指标(Warensoft交易量趋势指标)算法及应用
  3. 如何用微信web开发者工具测试调试并打包上传小程序
  4. win10装ubuntu双系统
  5. 全站仪与计算机之间的数据传输,【科普】全站仪数据传输的三种方式
  6. 修改ssh命令行[root@xxx]#颜色
  7. CC00016.kylin——|HadoopOLAP_Kylin.V16|——|Kylin.v16|Cube优化|检查Cuboid数量|
  8. 力扣第314场周赛补题
  9. 封神台—高校靶场ctf—第一期Web web_008
  10. mybatis的一级缓存详解