一、全网备份
1.1 项目环境准备
主机名 | 外网IP | 内网IP | 服务器 |
---|---|---|---|
backup | 10.0.0.203 | 172.16.1.203 | rsync服务器 |
nfs-1 | 10.0.0.204 | 172.16.1.204 | nfs服务器 |
web-1 | 10.0.0.205 | 172.16.1.205 | web服务器 |
1.2 项目需求
公司中的web集群和nfs服务器都需要进行备份,防止宕机和磁盘损坏,如果一旦服务器和磁盘损坏,后果不堪设想,
- 规范统一,所有服务器的备份目录必须都为/backup
- 需要备份的系统配置文件
a. 定时任务服务的配置文件(/var/spool/cron/root)
b. 开机自启动配置文件(/etc/rc.local)
c. 日常脚本目录(/server/scripts)
d. 防火墙iptables配置文件(/etc/sysconfig/iptables-config)
e. web的站点目录和日志目录(/var/www/html/ /app/log/)- web服务器保留打包后7天后的备份数据
- 备份服务器上,保留每周日的所有数据副本,其他要保留180天的数据
- 备份的数据服务器按IP地址为目录保存,备份的文件使用时间名字保存
- 确保备份的数据完整性,在备份服务器上对备份的数据每天检查,并将备份成功及失败的结果发到邮箱
1.3 项目步骤
1.3.1 创建项目所需的目录
mkdir -p /backup //所有服务器
mkdir /server/scripts //nfs服务和web服务器
1.3.2 客户端需要压缩的数据信息
压缩nfs和web服务
//nfs服务器
$ tar -zcvPhf /backup/data_backup.tar.gz_$(date +%F-week%w) /var/spool/cron/root /etc/rc.local /server/scripts
//web服务器
$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /var/www/html $ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /app/log/ $ tar -zcvPhf /backup/file_backup.tar.gz_$(date +%F-week%w) /etc/sysconfig/iptables-config /server/scripts
PS:建议web的站点目录和log目录分开打包,因为不管是哪个目录数据都会很大,打包的时候会很慢,一个一个打包可以提升打包的速率。
//tar查看并解压确定
$ tar tf /backup/data_backup.tar.gz_2020-12-22-weeek2 $ tar tf /backup/web_backup.tar.gz_2020-12-22-weeek2 $ tar xf /backup/data_backup.tar.gz_2020-12-22-weeek2 $ tar xf /backup/web_backup.tar.gz_2020-12-22-weeek2
1.3.3 web服务器创建7天前的数据并删除
创建7天前数据
//创建日期自己设定
$ date -s "20200430" $ cd /backup $ ll total 144 -rw-r--r-- 1 root root 12435 Dec 2 16:55 web_backup.tar.gz_2020-12-02 -rw-r--r-- 1 root root 12435 Dec 2 16:55 web_backup.tar.gz_2020-12-03 .....略..... -rw-r--r-- 1 root root 12435 Dec 2 16:55 web_backup.tar.gz_2020-12-09 -rw-r--r-- 1 root root 12435 Dec 2 16:55 web_backup.tar.gz_2020-12-10
找出七天前的数据,并删除
$ find /backup -type f -mtime +7 |xargs rm -f
rsync的配置文件
cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
#list = false
hosts allow = 172.16.1/24
hosts deny = 0.0.0.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by other"
path = /backup
使用rsync传输到备份服务端
$ rsync -avz /backup/ rsync_backup@172.16.1.203::backup --password-file=/etc/rsync_password
1.3.4 备份服务端删除180天的数据,并保留每周日的数据
设置服务器时间为180天后,在服务端找出180天前的数据并删除,并保留每周日的数据
$ date -s "202105010"
$ find /backup -type f -mtime +180 ! -name "*week7"|xargs rm -f
$ ll /backup/
-rw-r--r-- 1 rsync rsync 12435 Mar 5 2021 web_backup.tar.gz_2021-03-08-week7
1.3.5 备份服务端以IP地址目录保存数据,并验证数据完整性
创建IP地址目录(web和nfs创建),这里创建web来演示
$ mkdir -p /backup/172.16.1.205
$ cd /backup/
$ ll
drwxr-xr-x 2 root root 6 Oct 20 00:07 172.16.1.205
分开打包web服务的文件(nfs服务雷同)
$ cd /backup/172.16.1.205
$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /var/www/html
$ tar -zcvPhf /backup/log_backup.tar.gz_$(date +%F-week%w) /app/log
通过md5sum命令进行校验
//将校验码导入到指纹文件finger.txt(绝对路径)
$ md5sum /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 >finger.txt $ md5sum /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 >>finger.txt
//查看校验码文件
$ cat finger.txt 4c570d961fd6c7790e0a2f3f576a8681 /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 4c570d961fd6c7790e0a2f3f576a8681 /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5
//将压缩包和指纹文件发送到备份服务器
$ rsync -avz /backup/172.16.1.205 rsync_backup@172.16.1.203::backup --password-file=/etc/rsync_password
注意:172.16.1.205后面不要加斜杠,否则只有文件传输过去,目录没有传输
//进入目录对比指纹文件的校验码(服务端)
$ md5sum -c /backup/172.16.1.205/finger.txt //绝对路径 /backup/172.16.1.205/web_backup.tar.gz_2021-03-05-week5: OK /backup/172.16.1.205/web_backup.tar.gz_2021-03-05-week5: OK $ md5sum -c finger.txt //相对路径 >/backup/172.16.1.205/web_backup.tar.gz_2021-03-05-week5: OK /backup/172.16.1.205/web_backup.tar.gz_2021-03-05-week5: OK
1.3.6 实现发送邮件
邮件发送流程
开启163邮件代理
编辑邮箱配置文件,添加配置
$ tail -2 /etc/mail.rc set from=163邮箱账户 smtp=smtp.163.com set smtp-auth-user=163邮箱账户 smtp-auth-password=上述截图的授权码 smtp-auth=login
发送邮件
$ echo "邮件发送测试" |mail -s "mail check" qq邮箱账户 $ mail -s "邮箱测试" qq邮箱账户 < 文件
测试
$ find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check.txt $ echo "邮件发送测试" |mail -s "邮箱测试" qq邮箱账户 </tmp/check.txt
PS:使用find命令找到指纹文件,通过xargs将给md5sum处理,'&'代表也将错误信息一起写入到文件
收到的邮件
1.4 编写全网备份脚本
1.4.1 客户端脚本(nfs服务器备份脚本)
[root@nfs /server/scripts]# cat bak.sh
#!/bin/bash
//设置目录和IP地址的变量
Bak_dir="/backup"
Ip_info=$(hostname -i)
# create dir //创建相应的目录
mkdir -p $Bak_dir/$Ip_info
# tar system file //打包系统的文件
tar -cPhf /$Bak_dir/$Ip_info/data_backup.tar.gz_$(date +F%-weeek%w) /var/spool/cron/root /etc/rc.local /server/scripts
# del 7 ago data info //删除7天的数据
find /$Bak_dir/$Ip_info -type f -mtime +7|xargs rm -f 2>/dev/null
# create finger file //创建指纹文件
find /$Bak_dir/$Ip_info -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Bak_dir/$Ip_info/finger.txt
# rsync backup push data info //rsync推送数据到服务端
rsync -az /$Bak_dir/$Ip_info rsync_backup@172.16.1.203::backup --password-file=/etc/rsync.password
1.4.2 客户端脚本(web服务器备份脚本)
[root@nginx scritps]# cat web_bak.sh
#!/bin/bash
Bak_dir="/backup"
Ip_info=$(hostname -i)
# create dir
mkdir -p $Bak_dir/$Ip_info
# tar system file
cd /
#!/bin/bash
Bak_dir="/backup"
Ip_info=$(hostname -i)
# create dir
mkdir -p $Bak_dir/$Ip_info
# tar system file
tar -cPhf /$Bak_dir/$Ip_info/web_backup.tar.gz_$(date +%F-week%w) /usr/share/nginx/html
tar -cPhf /$Bak_dir/$Ip_info/log_backup.tar.gz_$(date +%F-week%w) /var/log/nginx
# del 7 ago data info
find /$Bak_dir/$Ip_info -type f -mtime +7|xargs rm -f 2>/dev/null
# create finger file
find /$Bak_dir/$Ip_info -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Bak_dir/$Ip_info/finger.txt
# rsync backup push data info
rsync -az /$Bak_dir/$Ip_info rsync_backup@172.16.1.203::backup --password-file=/etc/rsync.password
1.4.3 备份服务器端脚本
[root@rsync /server/scripts]# cat server.sh
#!/bin/bash
//保留每个星期天的数据,将180天以前的数据删除
# The server hold back each week 7 data info and hold back 6 months data info
find /backup -type f -mtime +180 ! -name "*week7" 2>/dev/null
# check finger info //校验指纹信息
find /backup -type f -name "finger*"|xargs md5sum -c &>/tmp/check.txt
# send mail in for myself qq-mail //发送邮件到自己邮箱
mail -s "check backup info for $(date +%F)" QQ邮箱账号 </tmp/check.txt
1.5 实现定时全网数据备份(定制任务)
1.5.1 客户端定时任务
//nfs服务器
$ crontab -e # backup data 0 0 * * * /bin/sh /server/scripts/bak.sh
//web服务器
$ crontab -e # backup data 0 0 * * * /bin/sh /server/scripts/web_bak.sh
1.5.2 服务端
$ crontab -e
# check backup data
0 5 * * * /bin/sh /server/scripts/server.sh
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。