全网服务器数据备份方案(模拟生产环境)+邮件告知

使用rsync实现全网数据备份(模拟生产环境)+邮件告知

项目要求来源于网络:http://oldboy.blog.51cto.com/2561410/1856048

假定3台服务器主机名分别为web01、backup、nfs01,主机信息如下表:


服务器说明


内网IP


主机名


nginx web服务器


192.168.1.222


WEB-01


NFS存储服务器


192.168.1.233


NFS-01


rsync备份服务器


192.168.1.244


BACKUP

要求:每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上),NFS存储服务器同Web服务器,实际工作中就是全部的服务器。

具体要求如下:

1)所有服务器的备份目录必须都为/backup。

2)要备份的系统配置文件包括但不限于:

a.定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)。

b.开机自启动的配置文件(/etc/rc.local)(适合web和nfs服务器)。

c.日常脚本的目录 (/server/scripts)(适合web和nfs服务器)。

d.防火墙iptables的配置文件(/etc/sysconfig/iptables)。

e.自己思考下还有什么需要备份呢?

3)Web服务器站点目录假定为(/var/html/www)。

4)Web服务器A访问日志路径假定为(/app/logs)

5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)

6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本。

7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。

8)*需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中:

特别提示:本题在工作中是网站生产环境全网备份项目方案的一个小型模拟,很有意义。

--准备好相应的机器(修改好机器名,关闭iptables,selinux,配置好yum源),并配置好相应的host解析,相同的时间(这里上台机子都已配置完成)

--host 解析

[[email protected] ~]# vim /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.222 web01

192.168.1.233 nfs01

192.168.1.244 backup #添加

--使用ntpdate实现时间同步

[[email protected] ~]# yum install ntpdate

[[email protected] ~]# vim ntpdate.sh #脚本复制好用执行一遍让时间一致

#!/bin/bash

ntpdate time.nist.gov

hwclock -w

[[email protected] nfs-01 ~]# crontab -e

* * * * 1 /root/time.sh #每周同步一次

1、搭建rsync服务端(blackup服务器)

1.1.安装rsync

[[email protected] ~]# yum install rsync -y

1.2.修改/etc/xinetd.d/rsync

[[email protected] ~]# vim /etc/xinetd.d/rsync

1.3.配置/etc/rsyncd.conf(需要手动生成)

[[email protected] ~]# vim /etc/rsyncd.conf

uid = rsync #rsync以什么用户启动

gid = rsync #rsync 以什么组启动

use chroot = no

max connections = 200 #最大连接数

timeout = 300 #超时时间

pid file = /var/run/rsyncd.pid #pid文件路径

lock file = /var/run/rsync.lock #指定lock文件

log file = /var/log/syncd.log #日志文件

[backup]

path = /backup/ #back目录

ignore errors #忽略错误

read only = no #是否字符(若从客户端同步到服务器必须设为no)

list = no #在否允许列表

hosts allow = 192.168.1.0/24 #允许的ip端

auth users = rsync_backup #认证的用户,服务器必须存在这个系统用户

secrets file = /etc/rsync.password #指定用户密码文件

#以上配置文件需去除注释才能直接复制,否则报错

1.4.创建用户,及目录

[[email protected] ~]# useradd -s /sbin/nologin -M rsync

[[email protected] ~]# mkdir /backup

[[email protected] ~]# chown -R rsync.rsync /backup

1.5.创建密码文件

[[email protected] ~]# vim /etc/rsync.password

rsync_backup:123456 #虚拟用户及密码

[[email protected] ~]# chmod 600 /etc/rsync.password #权限必须为600

1.6.启动,添加开机启动

[[email protected] ~]# rsync --daemon

[[email protected] ~]# ss -antup|grep rsync

[[email protected] ~]# echo "/usr/bin/rsync --daemon">>/etc/rc.local #开机启动

2.1客户端配置(nfs01)

[[email protected] ~]# yum install rsync -y

[[email protected] ~]# mkdir /backup/

[[email protected] ~]# touch /backup/1.txt #创建个测试文件

[[email protected] ~]# echo "123456" >/etc/rsync.password #创建密码文件

[[email protected] ~]# chmod 600 /etc/rsync.password

[[email protected] ~]# rsync -avz /backup/ rsync://[email protected]/backup --password-file=/etc/rsync.password

3.1客户端配置(web01)

[[email protected] ~]# yum install rsync -y

[[email protected] ~]# mkdir /backup/

[[email protected] ~]# touch /backup/2.txt

[[email protected] ~]# echo "123456" >/etc/rsync.password

[[email protected] ~]# chmod 600 /etc/rsync.password

[[email protected] ~]# rsync -avz /backup/ rsync://[email protected]/backup --password-file=/etc/rsync.password

3.2模拟真实生产环境创建些文件

[[email protected] ~]# mkdir -p /var/html/www

[[email protected] ~]# touch /var/html/www/{1..10}

[[email protected] ~]# mkdir -p /app/logs

[[email protected] ~]# touch /app/logs/{1..g}

3.3创建备份脚本

[[email protected] ~]# mkdir /server/scripts -p

[[email protected] ~]# vim /server/scripts/sh.sh

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

ip=$(ifconfig eth0|awk -F "[ :]+" ‘NR==2{print $4}‘) #获取ip

backpath=/backup/ #备份目录

name=`hostname` #主机名

mkdir -p $backpath/$ip

#判断周一

if [ $(date +%w) -eq 2 ];then

date="$(date +%F -d "-1day")_week1"

else

date="$(date +%F -d "-1day")"

fi

cd / #切换到根目录并回车

tar zcf $backpath/$ip/$name"_"${date}"_sysconfig".tar.gz var/spool/cron/ etc/rc.d/rc.local server/scripts/

tar zcf $backpath/$ip/$name"_"${date}"_data".tar.gz var/html/www/ #注释掉,nfs服务器不需要备份web数据

tar zcf $backpath/$ip/$name"_"${date}"_logs".tar.gz app/logs/ #注释掉,nfs服务器不需要备份web数据

find $backpath -type f -name "*.tar.gz"|xargs md5sum > $backpath/$ip/flag_$ip"_"${date} #给文件打标记

#备份到balackup服务器

rsync -az $backpath rsync://[email protected]/backup --password-file=/etc/rsync.password

#删除7天谴数据

find $backpath -type f -mtime +7|xargs rm -f

[[email protected] ~]# crontab -e

00 00 * * * /bin/sh /server/scripts/sh.sh >/dev/null 2>&1 #添加

3.4创建定时任务,并将脚本文件复制到其他服务器并修改(nfs01)

[[email protected] ~]# mkdir -p /server/scripts/

[[email protected] ~]# vim /server/scripts/sh.sh

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

ip=$(ifconfig eth0|awk -F "[ :]+" ‘NR==2{print $4}‘) #获取ip

backpath=/backup/ #备份目录

name=`hostname` #主机名

mkdir -p $backpath/$ip

#判断周一

if [ $(date +%w) -eq 2 ];then

date="$(date +%F -d "-1day")_week1"

else

date="$(date +%F -d "-1day")"

fi

cd / #切换到根目录并回车

tar zcf $backpath/$ip/$name"_"${date}"_sysconfig".tar.gz var/spool/cron/ etc/rc.d/rc.local server/scripts/

#tar zcf $backpath/$ip/$name"_"${date}"_data".tar.gz var/html/www/ #注释掉,nfs服务器不需要备份web数据

#tar zcf $backpath/$ip/$name"_"${date}"_logs".tar.gz app/logs/ #注释掉,nfs服务器不需要备份web数据

find $backpath -type f -name "*.tar.gz"|xargs md5sum > $backpath/$ip/flag_$ip"_"${date} #给文件打标记

#备份到balackup服务器

rsync -az $backpath rsync://[email protected]/backup --password-file=/etc/rsync.password

#删除7天谴数据

find $backpath -type f -mtime +7|xargs rm -f

[[email protected] ~]# crontab -e

00 00 * * * /bin/sh /server/scripts/sh.sh >/dev/null 2>&1 #添加

设置个就近的时间后查看nfs-01,web-01,能否正常推数据

[[email protected] ~]# ls /backup/

4、mailx使用外部的SMTP来实现blackup服务器邮件报警

mailx是一个小型的邮件发送程序

具体步骤如下:

4.1、安装

[[email protected] ~]# yum install mailx

4.2、编辑配置文件

[[email protected] ~]# vim /etc/mail.rc #添加如下内容

set [email protected]

set smtp=smtp.126.com

set [email protected]

set smtp-auth-password=xxx

set smtp-auth=login

---说明

from:对方收到邮件时显示的发件人

smtp:指定第三方发邮件的smtp服务器地址

set smtp-auth-user:第三方发邮件的用户名

set smtp-auth-password:用户名对应的密码,有些邮箱需要填授权吗

smtp-auth:SMTP的认证方式,默认是login,也可以改成CRAM-MD5或PLAIN方式

4.3、测试

[[email protected] ~]# init 6

[[email protected] ~]# mail -s "hesaucaq" [email protected] < /etc/passwd

[[email protected] ~]# echo "测试邮件" | mail -s "测试" xxxxx@qq.com

转自:http://www.cnblogs.com/imweihao/p/7250500.html

以上已经实现了发邮件功能!!!

4.4、在(backup)编辑脚本实现报警

[[email protected] ~]# mkdir -p /server/scripts/

[[email protected] ~]# cd !$

脚本如下:

#!/bin/bash

export LANG=en

ip1="192.168.1.222"

ip2="192.168.1.233" #机器增加需加更多的ip

logpath=/tmp/flag.log #日志文件地址,后面汇总到这个文件来发送

#判断周一

if [ $(date +%w) -eq 2 ];then

date="$(date +%F -d "-1day")_week1"

else

date="$(date +%F -d "-1day")"

fi

find /backup/$ip1 -name flag_$ip1"_"${date}|xargs md5sum -c &> $logpath

find /backup/$ip2 -name flag_$ip2"_"${date}|xargs md5sum -c &>> $logpath #需更改成ip2和追加

find /backup/$ip1 -type f -name "*.tar.gz" -a ! -name "*week*" -mtime +180|xargs rm -f

find /backup/$ip2 -type f -name "*.tar.gz" -a ! -name "*week*" -mtime +180|xargs rm -f #需要更改成ip2

mail -s "backup`date`" [email protected] < $logpath #汇总到一个文件发送

[[email protected] scripts]# crontab -e

10 00 * * * /bin/sh /server/scripts/mail.sh >/dev/null 2>&1 #之间最好错开,如果数据量大的话可能需要时间

测试:

设置两个时间点,周一和周二的日期看是否正常,有些时候太会收不到邮件,那是因为被网易的垃圾邮件机制屏蔽了,一会再试,或者发到自己邮箱!

---以上已实现多机数据备份及邮件告警如果需要增加机器或者增加备份的数据,在脚本中添加即可

--附:rsync 常见错误及解决方法

问题 @ERROR: chroot failed

@ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]

原因:

服务器端的目录不存在或无权限。

解决办法:

创建目录并修正权限可解决问题。

问题 skipping non-regular file

receiving incremental file list

skipping non-regular file "vendor/bin/doctrine"

skipping non-regular file "vendor/bin/doctrine.php"

sent 1990 bytes received 489209 bytes 327466.00 bytes/sec total size is 182515746 speedup is 371.57

原因:

source源文件有软链接。

解决方法:

修改为 rsync -va,其中 -a == -rlptgoD (no -H,-A,-X) 或者 rsync -rvltOD 也可以。

解决后:

receiving incremental file list

vendor/bin/doctrine -> ../doctrine/orm/bin/doctrine

vendor/bin/doctrine.php -> ../doctrine/orm/bin/doctrine.php

sent 1998 bytes received 489279 bytes 327518.00 bytes/sec total size is 182515746 speedup is 371.51

问题@ERROR: module is read only

sending incremental file list

ERROR: module is read only

rsync error: syntax or usage error (code 1) at main.c(866) [receiver=3.0.6]

rsync: read error: Connection reset by peer (104)

rsync error: error in rsync protocol data stream (code 12) at io.c(759) [sender=3.0.6]

原因:

source源服务器端权限设置read为only只读权限。

解决方法:

read only = false

问题@ERROR: auth failed on module tee

@ERROR: auth failed on module tee rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.6]

原因:

服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。

解决方法:

提供正确的用户名密码解决此问题。

问题 @ERROR: Unknown module ‘tee_nonexists‘

@ERROR: Unknown module ‘tee_nonexists‘ rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.6]

原因:

服务器不存在指定模块。

解决方法:

提供正确的模块名或在服务器端修改成你要的模块以解决问题。

问题 password file must not be other-accessible

password file must not be other-accessible

continuing without password file

Password:

原因:

这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。

解决方法:

chmod 600 rsyncd.pwd

问题 rsync: failed to connect No route to host

rsync: failed to connect to 192.168.1.10: No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=3.0.6]

原因:

对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。

解决方法:

在iptables 中开放该端口,语句如下:

iptables -I INPUT -p tcp –dport 873 -j ACCEPT

rsync默认端口873,其实就是把tcp udp的873端口打开。

问题 rsync error: error starting client-server protocol

rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.6]

原因:

/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。

问题 rsync: chown "" failed: Invalid argument (22)

rsync: chown "" failed: Invalid argument (22)

原因:

权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)

问题 @ERROR: daemon security issue — contact admin

@ERROR: daemon security issue — contact admin rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]

原因:

同步的目录里面有权限不足的软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。

问题 rsync: read error: Connection reset by peer (104)

rsync: read error: Connection reset by peer (104) rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.6]

解决:很大可能是服务器端没有开启 rsync 服务,开启服务。

问题 @ERROR: failed to open lock file

@ERROR: failed to open lock file rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.6]

解决:配置文件 rsync.conf 中添加 lock file = rsyncd.lock 即可解决。

时间: 2024-10-05 12:44:08

全网服务器数据备份方案(模拟生产环境)+邮件告知的相关文章

Linux -- 服务器数据备份恢复策略

一.Linux 备份恢复基础 1.什么是备份 最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据.一次备份可能是简单的 cp命令,将一个文件复制到其他目录下,也可能是使用特定的程序将数据流写进一个特定的设备中的复杂过程.很多情况下是将要备份的数据写入到磁带机中,但有些情况也不是这样的.在Linux环境下,或其他Unix系统,备份可以是将文件拷贝到已存在的文件系统,可替换的文件系统,磁带机,远程文件系统,甚至是远程系统的上的磁带

数据备份方案

经常有朋友发生了数据丢失时找我帮忙,我发现数据备份是最科学的解决方案.于是花时间把我这几年积累的数据备份方案整理出来,希望能帮到大家. 先看看几个典型情景: 我经常用手机拍照,万一我手机丢了,里面的照片的价值比一台新手机还大. 我把我的许多资料存在移动硬盘里了,结果今天硬盘出问题,读不出来,有什么办法可以挽回? 我的许多重要数据都存在我的个人电脑里,结果昨晚电脑被贼偷了. 我刚误修改了一份Excel文件,而且还保存了,我想要回修改前的文件. 以上是常见的几个代表情景,如果真的发生了,往往很难处理

混合云存储组合拳:基于云存储网关与混合云备份的OSS数据备份方案

前言阿里云对象存储(OSS)用户众多.很多用户因为业务或者合规性需求,需要对OSS内的数据做备份,无论是线上备份,还是线下备份.用户可以选择使用OSS的开放API,按照业务需求,做数据的备份,也可以选择OSS已有的服务进行数据备份,比如OSS的跨域复制.但是,前一种方式,存在易用性和备份效率问题:后一种方式,只是将数据存双份或者多份,无法有效规避原始数据出问题后,被复制的那份数据也出问题的风险.本文介绍的基于云存储网关和混合云备份的OSS数据备份方案,不仅能保证OSS数据按策略的多版本备份,而且

生产环境邮件问题总结

生产环境邮件问题总结 1. 背景 接到各技术人员反映,不能收到生产环境发送的邮件. 2. 分析原因及采取措施 针对不能收到邮件的问题,有以下几种原因导致: 2.1系统本身业务繁忙,来不及处理发送邮件任务,邮件队列阻塞,造成收不到邮件,或延迟收到邮件. ①-提高nagios本身机器的性能 ②-减少发邮件的频率,或者接收邮件的人数. ③-将发送邮件的任务,分散到多个主机,较少nagios主机的压力. 2.2发件人频繁发送邮件,或者发送的附件为zip后缀,被邮件服务器认定附件含有病毒或者垃圾,而不予发

小企业数据备份方案

"互联网+"出来后,越来越多的企业投身互联网的发展,很多的小企业受政策刺激,对IT的投入也越来越大.与此同时,数据也是呈直线式的增长.那么如何掌控好这些数据呢?谁能保证不受硬件故障.人为操作错误.软件缺陷.电脑病毒等诸多因素影响呢?尤其是小型互联网企业更甚. 一.中小企业信息系统现状: 1.中小企业的应用环境一般为有一定数量的基于Windows桌面系统/linux系统的个人计算机.数台基于WINDOWS NT/2000或linux操作系统的文件服务器.WEB服务器.数据库服务器和邮件服

企业数据备份方案

我们在选择备份设备时,应该根据企业用户需要备份数据量的大小.对备份速度的要求和对自动化程度的要求等,我们可以选择不同档次的设备.备份设备是多种多样的,主要分为磁带机.自动加载机.磁带库;而磁带库又分为入门级.企业级和超大容量等几个级别. 如果企业希望通过预先制定的备份策略,实现备份过程和备份介质的自动化管理,减少系统管理的工作量,则需要购买能够容纳多盘磁带的设备,即自动加载机或磁带库.自动加载机内一般能够容纳4-20盘磁带.它与带库的主要区别在于不是通过机械手抓取磁带,而是通过一个简单的自动传送

rsync+inotify实现全网自动化数据备份-技术流ken

1.rsync简介 "rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步" 2.rsync的功能和特点 1. 可以实现服务器各种资源的备份(可以夸文件系统) 2. linux-rsync,windows-cwrsync 3. 可以做全量备份,也可以做增量备份 4. 在做备份的时候,可以排除一些特定的文件不做备份 5. 可以结合ssh实现加密传输 6. rsync支持工作在后台的模式(

【bzoj1150】[CTSC2007]数据备份Backup 模拟费用流+链表+堆

题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣.已知办公楼都位于同一条街上.你决定给这些办公楼配对(两个一组).每一对办公楼可以通过在这两个建筑物之间铺设网络电缆使得它们可以互相备份.然而,网络电缆的费用很高.当地电信公司仅能为你提供 K 条网络电缆,这意味着你仅能为 K 对办公楼(或总计2K个办公楼)安排备份.任一个办公楼都属于唯一的配

中小企业数据备份方案

据了解,中小企业网站大多用于品牌展示或兼有部分电子商务功能,所以数据备份显得十分重要.做好数据备份,不仅可以用于网站灾难恢复,还便于企业对网站的管理,毕竟这些数据,对于企业来说是一种无形资产. 托管数据备份 如果企业网站比较复杂,或者企业没有精力和资源去关注备份的事情,那么可以选择托管数据备份. 托管数据备份优缺点并存,最主要的就是企业需要完全信任和依赖外部的数据备份服务供应商,但无论采取何种服务方案,企业需要搞清楚的是: 数据备份服务商的备份计划,包括备份频率.备份完整度; 如果终止合同,取回