Rsync全网备份项目
https://edu.51cto.com/course/3497.html
1、基本备份要求
已经3台服务器主机名分别为web01、nfs01、backup主机信息如下表
服务器说明内网 IP(NAT) 主机名称
web服务器 172.16.1.7/24 web01
NFS存储服务器 172.16.1.31/24 nfs01
rsync备份服务器 172.16.1.41/24 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)
d. 防火墙iptables的配置文件(/etc/sysconfig/iptables)
e. 自己思考下还有什么需要备份呢?
3)web服务器站点目录假定为(/var/html/www)
4)wev服务器A访问日志路径假定为(/app/logs)
5)web服务器保留打包后7天的备份数据(本地不能多于7天)
6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本
7)备份服务器上要按备份数据服务器内网IP为目录保存备份,备份的文件按照时间名称保存
8)需要确保备份信息的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发送给系统管理员邮箱中
2、本项目的整个备份逻辑结构如下图
第一步:环境准备
rsync服务端环境准备:
1)下载安装rsync
[root@backup ~]# yum -yinstall rsync
2)编写配置文件/etc/rsyncd.conf
[root@backup ~]# vi/etc/rsyncd.conf
##create by HQ at 2020
###rsyncd.conf start###
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.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup/
read_only = false
[dev]
comment = "dev dir by oldboy"
path = /backup/dev
3)创建虚拟用户rsync
[root@backup ~]# useraddrsync -M -s /sbin/nologin
4)创建服务密码认证文件,并赋予600权限
[root@backup ~]# echo"rsync_backup:oldboy123" >/etc/rsync.password
[root@backup ~]# chmod600 /etc/rsync.password
5)创建备份目录backup,并修改属主、属组信息为rsync
[root@backup ~]# mkdir/backup
[root@backup ~]# chownrsync.rsync /backup/
6)启动rsyncd服务
[root@backup ~]#systemctl start rsyncd
Rsync客户端环境准备
web01:
[root@web01 ~]# echo"oldboy123" >/etc/rsync.password
[root@web01 ~]# chmod600 /etc/rsync.password
nfs01:
[root@nfs01 ~]# echo"oldboy123" >/etc/rsync.password
[root@nfs01 ~]# chmod600 /etc/rsync.password
测试rsync备份
rsync
-avz /etc/hosts rsync_backup@172.16.1.41::backup/$(hostname -i)/
--password-file=/etc/rsync.password
Rsync全网备份
1)所有服务器的备份目录必须都为backup
[root@backup ~]# mkdir/backup/
2)要备份的系统配置文件包括但不限于:
a. 定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)
b. 开机自启的配置文件(/etc/rc.local)(适合web和nfs服务器)
c. 日常脚本的目录(/server/scripts)
d. 防火墙iptables的配置文件(/etc/sysconfig/iptables)
e. 自己思考下还有什么需要备份呢?
[root@web01 /]#cd /
[root@web01 /]#mkdir -p/backup/$(hostname -i)
[root@web01
/]#tar -zchf /backup/$(hostname -i)/data_server-$(date +%F_week%w -d
-"1day").tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts
./etc/sysconfig/iptables
3)web服务器站点目录假定为(/var/html/www)
[root@web01 /]# tar-zchf /backup/$(hostname -i)/data_log-$(date +%F_week%w -d -"1day").tar.gz./app/logs
4)wev服务器A访问日志路径假定为(/app/logs)
[root@web01 /]#tar -zchf/backup/$(hostname -i)/data_log-$(date +%F_week%w -d -"1day").tar.gz./app/logs
5)web服务器保留打包后7天的备份数据(本地不能多于7天)
[root@web01 /]# find/backup/ -type f -mtime +7 | xargs rm
[root@web01 /]# rsync-avz /backup/ rsync_backup@172.16.1.41::backup--password-file=/etc/rsync.password
6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本
find /backup/ -type f-mtime +180 ! -name "*week1*" | xargs rm
7)备份服务器上要按备份数据服务器内网IP为目录保存备份,备份的文件按照时间名称保存
8)需要确保备份信息的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发送给系统管理员邮箱中
第一步:生成指纹认证文件
[root@web01
/]# find /backup/ -type f -mtime -1 ! -name "finger.txt" | xargs
md5sum >/backup/$(hostname -i)/finger.txt
第二步:验证数据完整性
[root@backup
~]# find /backup/ -type f -name "finger.txt" | xargs md5sum -c
OK表示数据完整 failed表示不完整
第三步:将验证结果发送到邮箱
1)配置/etc/mail.rc文件
[root@backup ~]# vim/etc/mail.rc
#告警邮件发送配置
setfrom=915979992@qq.com smtp=smtp.qq.com
set
smtp-auth-user=915979992@qq.com smtp-auth-password=eevftpwzyzaibbea
smtp-auth=login
2)测试邮件能否正常发送
[root@backup ~]# mail -s"test mail" 276715936@qq.com
3)将验证结果写入/tmp/check.txt文件
[root@backup ~]# find/backup/ -type f -name "finger.txt"|xargs md5sum -c>/tmp/check.txt
4)将验证结果发送到运维邮箱
[root@backup ~]# mail -s"check data info for $(date +%F -d -"1day")"276715936@qq.com
编写脚本,实现自动备份(定时任务)
客户端脚本:
[root@web01 ~]# vim/server/scripts/backup.sh
#!/bin/bash
#########################################
# rsync全网备份客户端脚本 #
#########################################
Backup_dir="/backup"
IP_info=$(hostname -i)
#create backup dir
mkdir -p$Backup_dir/$IP_info
#tar data dir
cd /
tar -zchf$Backup_dir/$IP_info/server-data-$(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/server-log-$(date +%F_week%w -d-"1day").tar.gz ./app/logs
tar -zchf$Backup_dir/$IP_info/server-www-$(date +%F_week%w -d-"1day").tar.gz ./var/html/www
#del 7 day ago data
find $Backup_dir/ -typef -mtime +7 | xargs rm &>/dev/null
#create finger file
find $Backup_dir/ -typef -mtime -1 ! -name "finger.txt" | xargs md5sum>$Backup_dir/$IP_info/finger.txt
#backup push data info
rsync -avz $Backup_dir/rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
定时任务:
[root@web01 ~]# crontab-e
#rsync backup
0 0 * * * /bin/bash/server/scripts/backup.sh &>/dev/nul
服务端脚本:
#!/bin/bash
#########################################
# rsync全网备份服务端脚本 #
#########################################
#del 180 day data,backupevery week1
find /backup/ -type f-mtime +180 ! -name "*week1*" | xargs rm &>/dev/null
#check backup data andtouch check file
find /backup/ -type f-mtime -1 -name "finger.txt" | xargs md5sum -c >/tmp/check.txt
#send check mail
-s "check backup data-$(date +%F_week%w -d -"1day")"
276715936@qq.com </tmp/check.txt
定时任务:
#rsync backup
1 0 * * * /bin/bash/server/scripts/backup_server.sh &>/dev/null
调整服务器进行验证
定时任务开始前数据
[root@backup /]# date -s20210202
切换时间,定时任务执行后数据
备份结果邮箱发送
+===============================+
# rsync服务异常问题汇总 #
+===============================+
1. rsync服务端开启的iptables防火墙
【客户端错误】
ERROR: NO route to host
【异常解决】
关闭防火墙
service iptables stop
systemctl stop firewalld
2. rsync客户端执行rsync命令错误
【客户端错误】
ERROR: The remote pathmust start with a module name not a /
这个是rsync模块语法书写错误
【异常解决】
注意正确书写模块信息,不能书写成路径信息
rsync命令语法错误,::/backup是错误的,应该是::backup
3. rsync服务认证错误
【客户端错误】
@ERROR: auth failed onmodule backup
【异常解决】
1. 密码真的输入错误,用户名真的错误
2. secrets file =
/etc/rsync.password指定密码文件和实际密码文件名称不一致
3. /etc/rsync.password文件的权限不是600
4. rsync_backup:123456 密码配置文件后面注意不要有空格
5.rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
4. rsync服务位置模块错误
【客户端错误】
[root@nfs01 ~]# rsync -avz /etc/hostsrsync_backup@172.16.1.41::bckup
@ERROR: Unknown module'bckup'
这个主要是模块信息书写错误
【异常解决】
检查配置文件/etc/rsyncd.conf配置文件模块名称书写或rsync语法书写时错误
5. rsync服务权限阻止错误
【客户端错误】
[root@nfs01 ~]# rsync-avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: chgrp".hosts.FFRXhm" (in backup) failed: Operation not permitted (1)
【异常解决】
1. 将备份目录的属主、属组修改为rsync
2. 将备份目录的权限修改为755
3. 在/etc/rsyncd.conf文件中添加fake super = yes
6. rsync服务备份目录异常
【客户端错误】
[root@nfs01 ~]# rsync-avz /etc/hosts rsync_backup@172.16.1.41::backup
@ERROR: chdir failed
rsync error: errorstarting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
【异常解决】
1. 备份目录没有建立,建立备份目录
2. 建立的备份存储目录和配置文件/etc/rsyncd.conf里定义的不一致
7. rsync服务无效用户信息
【客户端错误】
[root@nfs01 ~]# rsync-avz /etc/hosts rsync_backup@172.16.1.41::backup
@ERROR: invalid uidrsync
【异常解决】
rsync虚拟用户没有创建或者被删除
8. 客户端已经配置了密码文件,但免密登录方式依旧需要输入密码
【客户端错误】
password file must notbe other-accessible
【异常解决】
rsync客户端的密钥文件/etc/rsync.password权限不是600
9. rsync客户端连接慢问题
【异常解决】
查看日志进行分析,编写rsync服务端hosts解析文件
10. --password-file书写错误
【客户端错误】
rsync: could not openpassword file /etc/password: No such file or directory (2)
【异常解决】
正确书写方式:--password-file=/etc/rsync.password,要与服务端配置文件里的书写一致