[sync实战]-利用rsync守护进程方式进行全网备份[脚本+定时任务].

第一章 项目需求

1.1 需求概述

每天晚上12点整在web和nfs服务器上打包备份网站程序目录和系统关键配置文件并通过rsync命令推送到备份服务器上备份保留
备份思路:可以是先在本地按日期打包,然后再利用rsync推到备份服务器上。

1.2 具体要求

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.自己思考下还有什么需要备份呢?

web01 nfs01

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

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

web01

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

web01,nfs01

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

backup

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

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

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

第二章 全网备份基础环境搭建

2.1 环境模拟

 	            内网              主机名
rsync客户端	192.168.81.162	 	nfs01
rsync客户端	192.168.81.163	 	web01
rsync服务端	192.168.81.165	 	backup

2.2 rsync服务端配置(守护进程方式)

第一步:下载安装软件:
[root@backup ~]# yum install -y rsync

第二步:编辑配置文件:# /etc/rsyncd.conf 是 rsync 默认配置文件的固定写法

[root@backup ~]# vim /etc/rsyncd.conf

uid = rsync     # 指定管理备份目录的用户 
gid = rsync     # 指定管理备份目录的用户组
port = 873      # 定义rsync备份服务的网络端口号
fake super = yes   #将rsync虚拟用户伪装成为一个超级管理员用户 
use chroot = no    #和安全相关的配置
max connections = 200   #最大连接数 同时只能有200个客户端连接到备份服务器
timeout = 300    #超时时间(单位秒)
pid file = /var/run/rsyncd.pid #记录进程号码信息 1.让程序快速停止进程 2. 判断一个服务是否正在运行
lock file = /var/run/rsync.lock #锁文件
log file = /var/log/rsyncd.log  #rsync服务的日志文件 用于排错分析问题
ignore errors #忽略传输中的简单错误
read only = false #指定备份目录是可读可写
list = false #使客户端可以查看服务端的模块信息
hosts allow = 192.168.81.0/24 #允许传输备份数据的主机(白名单)
hosts deny = 0.0.0.0/32 #禁止传输备份数据的主机(黑名单)
auth users = rsync_backup #指定认证用户 
secrets file = /etc/rsync.password #指定认证用户密码文件 用户名称:密码信息
[backup] #[basckup]是一个模块名称,模块之上为全局配置信息;【可以创建多个模块,定义多个备份目录】
comment = "www dir by michaelni" 
path = /backup #模块中配置参数 指定备份目录
第三步:创建rsync服务虚拟用户rsync(管理备份存储目录)
[root@backup ~]# useradd rsync -M -s /sbin/nologin

第四步:创建备份目录并修改属主属组
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup

第五步:创建认证文件并修改文件权限为600
[root@backup ~]# echo "rsync_backup:backup@123"  >>/etc/rsync.password   
# rsync_backup:123456 ---> 认证用户:密码  ; /etc/rsync.password ---> 认证文件
[root@backup ~]# chmod 600 /etc/rsync.password # 把认证文件的权限改成 600

第六步:启动rsync守护进程服务
[root@backup ~]# systemctl start rsyncd         # 启动rsync服务
[root@backup ~]# systemctl enable rsyncd    # 设置开机自启

2.3 客户端端配置

nfs01和web01操作:

# 下载安装启动rsync,参照上一步

# 第一步:创建认证密码文件(只有密码信息即可)
# echo "backup@123" >/etc/rsync.password
# chmod 600 /etc/rsync.password
# 第二步:进行免交互传输测试  --password-file=密码文件
# rsync -avz /etc/hostname rsync_backup@192.168.81.165::backup --password-file=/etc/rsync.password

第三章 脚本编写

3.1 编写备份客户端脚本

nfs01上的脚本编写:

[root@nfs01 ~]# vim /server/scripts/backup_sys.sh
#全网备份脚本

#!/bin/bash

Backup_dir="/backup"
IP_info=$(hostname -i)  
## hostname -i查看内网网址,此处也可以使用awk进行过滤,也可以写成IP_info=`hostname -i`


# creat backup dir
mkdir -p $Backup_dir/$IP_info

# tar backup data
cd /
tar zchf $Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -"1day").tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables

#del 7 day ago data
find $Backup_dir -type f -name +7|xargs rm 2>/dev/null  
##有可能会出现不存在七天之前的文件,此时删除会报错,所以将报错重定向为空

#creat finger file
find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >$Backup_dir/$IP_info/finger.txt
##查找一天内的文件排除指纹文件(不对指纹文件进行校验)生成MD5校验值并重定向到校验值文件中

#backup push data info
rsync -az $Backup_dir/ rsync_backup@192.168.81.165::backup --password-file=/etc/rsync.password

web01上操作:

[root@web01 ~]# vim /server/scripts/backup_web.sh
#全网web备份脚本

#!/bin/bash

Backup_dir="/backup"
IP_info=$(hostname -i)  
##hostname -i 查看内网网址,此处也可以使用awk进行过滤,也可以写成IP_info=`hostname -i`
# creat backup dir
mkdir -p $Backup_dir/$IP_info

# tar backup data
cd /
tar zchf $Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -"1day").tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
tar zchf $Backup_dir/$IP_info/www_backup_$(date +%F_week%w -d -"1day").tar.gz ./var/html/www
tar zchf /$Backup_dir/$IP_info/www_log_backup_$(date +%F_week%w -d -"1day").tar.gz ./app/logs
#del 7 day ago data
find $Backup_dir -type f -name +7|xargs rm 2>/dev/null 
##有可能会出现不存在七天之前的文件,此时删除会报错,所以将报错重定向为空

#creat finger file
find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >$Backup_dir/$IP_info/finger.txt
##查找一天内的文件排除指纹文件(不对指纹文件进行校验)生成MD5校验值并重定向到校验值文件中

#backup push data info
rsync -az $Backup_dir/ rsync_backup@192.168.81.165::backup --password-file=/etc/rsync.password

3.2 编写服务端脚本

[root@backup~]# vim /server/scripts/backup_server.sh

#!bin/bash

# del 180 day ago data
find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"|xargs rm 2>/dev/null

# check backup data ,md5sum -c根据已生成的md5值,对文件进行校验,MD5文件与待验证的文件在同一个目录中 
find /backup/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/check.txt  

# send check mail 
mail -s "check backup info for $(date +%F -d -"1day") data" 906288036@qq.com </tmp/check.txt 

第四章 实现自动全网数据备份

4.1 客户端定时任务

客户端上操作

crontab -e
# backup data
0 0 * * * /bin/bash /server/scripts/backup.sh &>/dev/null

4.2 服务端定时任务

crontab -e
#check backup data
0 5 * * * /bin/bash /server/scripts/backup_server.sh &>/dev/null 
##服务端的定时任务时间会比客户端稍晚一些,为的是客户端有充足的时间将待备份文件传输完

第五章 附录

5.1 邮件发送实现

第一步 配置163企业邮箱

第二步 编写linux服务邮件相关配置文件

[root@backup~]# yum install mailx

[root@backup~]# vim /etc/mail.rc
在最后一行新增如下内容:
set from=nishi1281@163.com 
set smtp=smtp.163.com 
set smtp-auth-user=nishi1281@163.com 
set smtp-auth-password=123456  //授权码
set smtp-auth=login

重启服务加载文件:

[root@backup~]# systemctl restart postfix.service
第三步 发送邮件测试

[root@backup~]# echo "邮件发送测试"|mail -s "邮件测试" 906288036@qq.com
[root@backup~]# mail -s "邮件测试" 906288036@qq.com </etc/hosts

5.2 md5sum用法介绍

md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。

实例

生成一个文件insert.sql的md5值:

[root@localhost ~]# md5sum insert.sql
bcda6cb5c704664f989703ac5a88f112  insert.sql
检查文件testfile是否被修改过:

首先生成md5文件:

md5sum testfile > testfile.md5
检查:

md5sum testfile -c testfile.md5
如果文件没有变化,输出应该如下:

forsort: OK
此时,md5sum命令返回0。

如果文件发生了变化,输出应该如下:

forsort: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
此时,md5sum命令返回非0。

这里,检查用的文件名随意。如果不想有任何输出,则md5sum testfile --status -c testfile.md5,这时候通过返回值来检测结果。

检测的时候如果检测文件非法则输出信息的选项:

md5sum -w -c testfile.md5
输出之后,文件异常输出类似如下:

md5sum: testfile.md5: 1: improperly formatted MD5 checksum line
md5sum: testfile.md5: no properly formatted MD5 checksum lines found
这里,testfile.md5只有一行信息,但是我认为地给它多加了一个字符,导致非法。如果md5文件正常那么-w有没有都一样。
posted @ 2019-04-26 16:09  michaelni  阅读(250)  评论(0编辑  收藏  举报