[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有没有都一样。