阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

服务器数据备份解决方案

163次阅读
没有评论

共计 6447 个字符,预计需要花费 17 分钟才能阅读完成。

第 1 章 项目准备工作

1.1 基本备份要求

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

服务器说明

外网IP

内网IP

主机名

Nginx web服务器

10.0.0.8/24

172.16.1.8/24

web01

NFS存储服务器

10.0.0.31/24

172.16.1.31/24

nfs01

rsync备份服务器

10.0.0.41/24

172.16.1.41/24

backup

需求:每天晚上 0 点整在 web 服务器上打包备份系统配置文件,网站程序目录及访问日志通过 rsync 命令推送备份服务器 backup 上备份保留。
 
具体要求如下:
1)web 服务器和备份服务器的备份目录都必须为 /backup
2)要备份的系统配置文件包括但不限余:
  a. 定时任务服务的配置文件(/var/spool/cron/root)
  b. 开机自启动的配置文件(/etc/rc.local)
  c. 日常脚本的目录(/server/scripts)
  d. 防火墙 iptables 的配置文件(/etc/sysconfig/iptables)
3)web 服务器站点目录为(/var/html/www)
4)Web 服务器 A 访问日志的路径为(/app/logs)
5)Web 服务器保留打包后的 7 天的备份数据即可(本地留存不能多于 7 天,因为太多硬盘会满)
6)备份服务器上,保留最近 7 天的备份数据,同时保留 6 个月内每周一的所有数据。
7)备份服务器上要安装备份数据服务器的内网 IP 为目录保存备份,备份的文件安装时间名字保存。
8)需要确保备份的数据尽量完整争取,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员的邮箱中。
 
1.2 简单逻辑图

服务器数据备份解决方案

1.3 解题思路
1)搭建 backup 服务器。
  a. 搭建 rsync 服务
2)搭建 web 服务器。
  1. 验证 rsync 服务能否推送成功。
  2. 开发脚本,实现打包,备份,推送,校验,删除。
  3. 配置定时任务定时推送,每天 0 点定时推送。
3)搭建 backup 服务器。
1. 实现校验,删除,报警。
2. 配置定时任务每天 6 点定时执行。
4)搭建 nfs 服务器。
  1. 验证 rsync 服务能否推送成功。
  2. 开发脚本,实现打包,备份,推送,校验,删除。
  3. 配置定时任务定时推送,每天 0 点定时推送。
 
第 2 章 项目实施
2.1 搭建 backup 服务器。
2.1.1 rsync 的默认配置文件是 /etc/rsyncd.conf,配置文件默认是空的,需要自己编辑

[root@backup ~]# cat /etc/rsyncd.conf
#rsync_config_____________________________start
#created by linuxidc 15:01 2007-6-5
##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/rsyncd.lock     
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password       
[backup]     
path = /backup     
[nfsbackup]
path = /nfsbackup
[luo]
path = /luo
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = tang
secrets file = /etc/tang
#rsync_config________________________end

2.1.2 添加用户 rsync
[root@backup ~]# useradd rsync -s /sbin/nologin -M
[root@backup ~]# cat /etc/passwd|grep rsync
rsync:x:501:501::/home/rsync:/sbin/nologin

为什么用虚拟用户?
应答:文件和进程都要满足属主的要求,文件和进程的存在一定是需要用户的,也是为了安全问题。
2.1.3 根目录下添加 backup 目录
[root@backup ~]# mkdir -p /backup/
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 3 rsync rsync 20480 1 月  18 09:51 /backup/

2.1.4 创建 rsync 的密码配置文件,默认也是空的
[root@backup ~]# cat /etc/rsync.password 
rsync_backup:linuxidc
[root@backup ~]# chmod 600  /etc/rsync.password 
[root@backup ~]# ls -l /etc/rsync.password 
-rw——-. 1 root root 20 11 月 29 01:14 /etc/rsync.password

2.1.5 开启服务并开机自启动
[root@backup ~]# tail -1 /etc/rc.local 
/usr/bin/rsync –daemon

2.1.6 服务器端测试
[root@backup ~]# ps -ef|grep rsync|grep -v grep
root      23049      1  0 Jan15 ?        00:00:00 rsync –daemon
root@backup ~]# lsof -i:rsync
COMMAND  PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAME
rsync  23049 root    3u  IPv4  56971      0t0  TCP *:rsync (LISTEN)
rsync  23049 root    5u  IPv6  56972      0t0  TCP *:rsync (LISTEN)
[root@backup ~]# netstat -lntup|grep rsync
tcp        0      0 0.0.0.0:873                0.0.0.0:*                  LISTEN      23049/rsync       
tcp        0      0 :::873                      :::*                        LISTEN      23049/rsync       
[root@backup ~]# telnet 172.16.1.41 873
Trying 172.16.1.41…
Connected to 172.16.1.41.
Escape character is ‘^]’.
@RSYNCD: 30.0
说明服务器端配置没有问题

2.2 验证 rsync 服务能否推送成功。
2.2.1 客户端配置
[root@web01 ~]# cat /etc/rsync.password 
linuxidc
[root@web01 ~]# ls -ld /etc/rsync.password 
-rw——- 1 root root 7 1 月  18 16:01 /etc/rsync.password

2.2.2 客户端推送
[root@web01 backup]# rsync -avz /backup/  rsync_backup@172.16.1.41::backup/ –password-file=/etc/rsync.password   
sending incremental file list
./
1
10
2
3
4
5
6
7
8
9
说明客户端推送成功

2.2.3 Web 服务器实现打包,备份,推送,删除。
2.2.3.1 命令行备份
[root@web01 backup]# mkdir /var/html/www -p
[root@web01 scripts]# mkdir /app/logs -p
[root@web01 /]# tar zcvfh /backup/sys_config_$(date +%F).tar.gz  ./var/spool/cron/root  ./server/scripts/ ./etc/rc.local 
./var/spool/cron/root
./server/scripts/
./server/scripts/bak.sh
./etc/rc.local
[root@web01 /]# tar zcvfh /backup/webdata_config_$(date +%F).tar.gz ./var/html/www/
./var/html/www/
./var/html/www/4
./var/html/www/7
./var/html/www/5
./var/html/www/6
./var/html/www/2
./var/html/www/8
./var/html/www/3
./var/html/www/10
./var/html/www/1
./var/html/www/9
[root@web01 /]# tar zcvfh /backup/access_log_config_$(date +%F).tar.gz ./app/logs/ 
./app/logs/
./app/logs/f
./app/logs/c
./app/logs/a
./app/logs/d
./app/logs/e
./app/logs/b
./app/logs/g

2.2.3.2 推送:
[root@web01 backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup/ –password-file=/etc/rsync.password

2.2.3.3 删除:
[root@web01 backup]# find /backup/ -type f -mtime +7|xargs rm -rf

2.2.3.4 全部放到脚本里:
cat  /server/scripts/bak.sh
#!/bin/sh
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
IP=$(ifconfig eth1|awk -F “[ :]+” ‘NR==2{print $4}’)
Bak_Path=/backup
mkdir $Bak_Path/$IP -p
if [$(date +%w) -eq 2  ];then
date=”$(date +%F -d “-1day”)_week1″
else
date=”$(date +%F -d “-1day”)”
fi
cd / &&\
tar zcfh $Bak_Path/$IP/sys_config_${date}.tar.gz ./var/spool/cron ./etc/rc.local ./server/sc
ripts  &&\
tar zcf $Bak_Path/$IP/webdata_${date}.tar.gz var/html/www/  &&\
tar zcf $Bak_Path/$IP/access_log_${date}.tar.gz app/logs/  &&\
find $Bak_Path -type f -name “*.tar.gz”|xargs md5sum >$Bak_Path/$IP/flag_${date} &&\
rsync -az $Bak_Path/ rsync_backup@172.16.1.41::backup/ –password-file=/etc/rsync.password
&&\
###delete data before 7days ago by chen at 20170118
find $Bak_Path -type f  -mtime +7|xargs rm -f
~

2.2.3.5 每天 00 点定时任务推送
[root@web01 backup]# crontab -l
00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1  完成客户端的定时任务推送工作

第 3 章 backup 服务器实现校验,删除,报警
首先我们测试下如果实现服务器报警
[root@backup ~]# tail -1 /etc/mail.rc 
set from=njlc_jsbcmq@linuxidc.com smtp=smtp.163.com smtp-auth-user=njlc_jsbcmq  smtp-auth-password=hgg7454196ls smtp-auth=login
[root@backup ~]#  echo “31qqi zuzi bang”|mail -s “nihao” linuxidc@linuxidc.com
就可以收到邮件了
 
[root@backup scripts]# cat checkbak.sh 
#!/bin/bash
export
if [$(date +%w) -eq 2 ];then
date=”$(date +%F -d “-1day”)_week1″
else
date=”$(date +%F -d “-1day”)”
fi
find /backup/ -name “flag_${date}*”|xargs md5sum -c  &>>/tmp/mail_$(date +%F).log
find /backup/ -type f -name “*.tar.gz”  -a ! -name “*week1*”  -mtime +1|xargs rm -f 
mail -s  “backup ~date~”  linuxidc@linuxidc.com </tmp/mail_$(date +%F).log
\cp /tmp/mail_$(date +%F).log  /tmp/mail_$(date +%F).log.ori
>/tmp/mail_$(date +%F).log
做定时任务,每天上午 6 点发送邮箱
[root@backup scripts]# crontab -l
* * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 
* * * * * /bin/bash  /server/scripts/checkbak.sh >/dev/null 2>&1 
项目完成

RSync 实现文件备份同步详解   http://www.linuxidc.com/Linux/2014-09/106967.htm

利用 inotifywait 监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm

利用 inotify+rsync 实现 Linux 文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm

inotify-tools+rsync 实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm

rsync 同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm

CentOS 6.5 下 Rsync 远程同步 http://www.linuxidc.com/Linux/2014-05/101084.htm

Linux 文件夹对比并提取的差分文件技巧 -rsync 的妙用 http://www.linuxidc.com/Linux/2016-02/128307.htm

Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139887.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6447字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中