目录
一、备份基本概述
1.备份的定义
2.备份的原因
3.备份分类
(1)完全备份
(2)增量备份
4.实现备份工具
二、Rsync——远程同步
1.Rsync基本介绍
2.Rsync同步模式
(1)推
(2)拉
三、Rsync应用场景
1.大量服务器备份场景
2.异地备份场景
3.Rsync传输模式
(1)使用三种主要的数据传输方式
(2)本地传输
(3)远程传输
(4)守护进程
4.常用选项
四、Rsync场景实例
1.服务端安装
2.服务端配置
3.Rsync服务端初始化
4.客户端初始化
(1)适合终端执行
(2)适合脚本执行
5.数据推送与拉取场景
(1)客户端推送backup目录下所有内容至Rsync服务端
(2)客户端拉取 Rsync服务端 backup 模块数据至本地客户端的/backup目录
6.数据无差异同步场景
(1)拉取远端数据:远端与本地保持一致,远端没有本地有会被删除,造成客户端数据丢失
(2)推送数据至远端:本地与远端保持一致,本地没有远端会被删除,造成服务器端数据丢失
7.推送数据限速场景
五、Rsync备份案例
1.备份需求
(1)客户端需求
(2)服务端需求
2.备份内容
(1)开机自启动配置文件 设备挂载配置文件 本地内网配置文件 (系统配置文件)/etc/rc.local /etc/fstab /etc/hosts
(2)cron定时任务 firewalld防火墙
(3)系统日志文件
(4)应用程序服务配置文件nginx、PHP、mysql、redis
3.客户端脚本
(1)定义变量
(2)创建备份目录
(3)备份对应的文件
(4)携带md5验证信息
(5)推送本地数据至备份服务器
(6)本地保留最近7天的数据
(7)定时任务,让备份每天凌晨1点执行
4.服务端脚本
(1)服务端配置邮件功能
(2)服务端校验、以及邮件通知脚本
(3)定义全局的变量
(4)定义局部变量
(5)查看flag文件,并对该文件进行校验,然后将校验的结果保存至result_时间
(6)将校验的结果发送邮件给管理员
(7)删除超过7天的校验结果文件,删除超过180天的备份数
(8)服务端编写定时任务脚本
一、备份基本概述
1.备份的定义
备份就是把文件在复制一份存放起来(就是增加一个副本)
2.备份的原因
数据很重要,减少数据的几率,便于快速恢复,一般对于用户录入数据这些重要数据可以选择录入,对于一般的软件、配置文件来讲可以不做备份
3.备份分类
(1)完全备份
全备、效率低下、占用空间、浪费带宽
(2)增量备份
增备,效率高,节省空间,节省带宽
4.实现备份工具
本地:cp
远程:scp、rsync
二、Rsync——远程同步
1.Rsync基本介绍
它可以实现不同主机之间的同步,同时支持增量和全量同步备份
Rsync监听端口:873
Rsync运行模式:C/S
2.Rsync同步模式
(1)推
所有主机推送本地数据至Rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)
(2)拉
Rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大
三、Rsync应用场景
1.大量服务器备份场景
2.异地备份场景
3.Rsync传输模式
(1)使用三种主要的数据传输方式
本地方式
远程方式:A→B
守护进程:将Rsync作为服务端使用
(2)本地传输
单个主机本地之间的数据传输(类似于cp命令)
语法:
rsync 选项 本地源文件 本地目标文件
(3)远程传输
通过ssh通道传输数据,类似scp命令
语法:
pull拉取:rsync 选项 目标主机系统用户 目标IP或域名 本地源文件 下载到的位置
push推送:rsync 选项 本地源文件 目标主机系统用户 目标主机IP地址或域名 目标对应位置
存在缺陷:使用系统用户导致不安全,使用普通用户导致权限不足
(4)守护进程
守护进程传输方式:rsync自身非常重要的功能(不是用户系统用户,更加安全)
语法:
pull拉取:rsync 选项 远程主机用户(虚拟用户) 远程主机地址 远程主机模块(不是目录) 将远程主机数据备份至本地的位置
push推送:rsync 选项 远程主机模块(不是目录) 远程主机用户(虚拟机用户) 远程主机地址 将远程主机模块备份至本地的位置
4.常用选项
-a | |
-v | |
-z | |
-r | |
-t | |
-o | |
-p | |
-g | |
-l | |
-p | |
-D | |
-L | |
-e | |
-- | 指定排除不需要传输的文件模式 |
文件名所在的目录文件 | |
限速传输 | |
断电续传 | |
四、Rsync场景实例
服务端:10.0.0.31——外网 172.16.1.31——内网 主机名:backup
客户端:10.0.0.32——外网 172.16.1.31——内网 主机名:nfs
1.服务端安装
yum -y install rsync
2.服务端配置
cat /etc/rsync.conf
uid = rsync #运行进程用户
gid = rsync #运行进程的用户组
port = 873 #监听端口
fake super = yes #不需要rsync已root身份运行
use chroot = no #禁锢推送的数据至某个目录,不允许跳出该目录
max connections = 200 #最大连接数
timeout = 600 #超时时间
ignore errors #忽略错误信息
read only = false #对备份数据可读写
list = false #不允许查看模块信息
auth users = rsync_backup #定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd #定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log
#################################
[backup]
path = /backup #定义模块信息
comment = commit #模块注释信息
path = /backup #定义接收备份数据目录
3.Rsync服务端初始化
(1)创建rsync账户,不允许登录不创建家目录(用于运行rsync服务的用户身份)
(2)创建备份目录(尽可能磁盘空间足够大),授权rsync用户为属主
(3)创建虚拟用户密码文件,授权为600安全权限(用于客户端连接时使用的用户)
(4)启动rsync服务,并将rsync加入开机启动
(5)检查服务运行是否正常
[root@backup ~]useradd -M -s /sbin/nologin rsync
[root@backup ~]mkdir /backup
[root@backup ~]chown -R rsync.rsync /backup/
[root@backup ~]echo "rsync_backup:123" > /etc/rsync.passwd
[root@backup ~]chmod 600 /etc/rsync.passwd
[root@backup ~]systemctl start rsyncd
[root@backup ~]systemctl enable rsyncd
[root@backup ~]netstat -lntp
4.客户端初始化
Rsync客户端仅需要配置虚拟用户密码,并授权为600安全权限
(1)适合终端执行
将虚拟用户密码配置到一个文件中
[root@nfs ~] yum install rsync -y
[root@nfs ~] echo "oldxu" > /etc/rsync.pass
[root@nfs ~] chmod 600 /etc/rsync.pass
(2)适合脚本执行
将虚拟用户密码设定为环境变量
[root@nfs ~] yum install rsync -y
[root@nfs ~] export RSYNC_PAsSWORD=oldxu
5.数据推送与拉取场景
(1)客户端推送backup目录下所有内容至Rsync服务端
[root@nfs ~] export RSYNC_PAssWORD=oldxu
[root@nfs ~] rsync -avz /backup/rsync_backup@172.16.1.31::backup/
(2)客户端拉取 Rsync服务端 backup 模块数据至本地客户端的/backup目录
[root@nfs ~] export RSYNC_PASSWORD=oldxu
[root@nfs ~] rsync -avz rsync_backup@172.16.1.31::backup /backup/
6.数据无差异同步场景
Rsync实现本地数据与远程数据无差异同步
(1)拉取远端数据:远端与本地保持一致,远端没有本地有会被删除,造成客户端数据丢失
[root@nfs ~] export RSYNC_PASSWORD=oldxu
[root@nfs ~] rsync -avz --delete rsync_backup@172.16.1.31::backup/ /data/
(2)推送数据至远端:本地与远端保持一致,本地没有远端会被删除,造成服务器端数据丢失
[root@nfs ~] export RSYNC_PAsSWORD=oldxu
[root@nfs ~] rsync -avz --delete /data/rsync_backup@172.16.1.31::backup/
7.推送数据限速场景
故障案例:某DBA使用rsync拉取备份数据时,由于文件过大导致内部交换机带宽被沾满,导致用户的请求无法响应;
[root@nfs ~] export RSYNC_PASSWORD=oldxu
#单位MB
[root@nfs ~] rsync -avz --bwlimit=1 rsync_backup@172.16.1.31::backup/ /data/
五、Rsync备份案例
角色 | 内网IP(LAN) | ||
WEB | eth1:172.16.1.7 | ||
NFS | eth1:172.16.1.32 | ||
Rsync | eth1:172.16.1.31 |
1.备份需求
(1)客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2020-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2020-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
5.客户端每天凌晨1点定时执行该脚本
(2)服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除注意:所有服务器的备份目录必须都为/backup
2.备份内容
(1)开机自启动配置文件 设备挂载配置文件 本地内网配置文件 (系统配置文件)/etc/rc.local /etc/fstab /etc/hosts
(2)cron定时任务 firewalld防火墙
脚本目录 (重要目录)
/var/spool/cron/ /etc/firewalld/server/scripts
(3)系统日志文件
/var/log///系统安全日志、sudo日志、内核日志、rsyslog日志
(4)应用程序服务配置文件nginx、PHP、mysql、redis
3.客户端脚本
[root@nfs scripts] cat/scripts/client_rsync_backup.sh
#!/usr/bin/bash
(1)定义变量
PATH=/usr/1oca1/sbin:/usr/1ocal/bin:/usr/sb
in:/usr/bin:/root/bin
Host=$ (hostname)
Addr=$(ifconfig eth1|awk 'NR==2{print $2}')
Date=$(date +%F)
Dest=${Host}_${Addr}_${Date}
Path=/backup
(2)创建备份目录
[ -d $Path/$Dest ] Il mkdir -p $Path/$Dest
(3)备份对应的文件
cd /&& [ -f $Path/$Dest/system.tar.gz ] ll tar czf $Path/$Dest/system.tar.gz etc/fstabetc/rsyncd.conf && \[ -f $Path/$Dest/log.tar.gz ] Il tar czf $Path/$Dest/log.tar.gz var/log/messagesvar/log/secure &&\
(4)携带md5验证信息
[ -f $Path/$Dest/flag ] Il md5sum$Path/$Dest/*.tar.gz > $Path/$Dest/flag_$Date
(5)推送本地数据至备份服务器
export
RSYNC_PASSWORD=bgX
rsync -avz $Path/
rsync_backup@172.16.1.31::backup
(6)本地保留最近7天的数据
find $Path/ -type d -mtime +7lxargs rm -rf
(7)定时任务,让备份每天凌晨1点执行
[root@nfs ~] crontab -l 00 01 * * * /bin/bash/scripts/backup_rsync.sh & > /dev/null
4.服务端脚本
(1)服务端配置邮件功能
[root@backup ~] yum install mailx -y
[root@backup ~] vim /etc/mail.rc
set from=1235467890@qq.com
set smtp=smtps://smtp.qq.com:111
set smtp-auth-user=1234567890@qq.com
set smtp-auth-password=#客户端授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
(2)服务端校验、以及邮件通知脚本
[root@backup ~] mkdir /scripts -p
[root@backup ~] vim/scripts/check_backup.sh
#!/usr/bin/bash
(3)定义全局的变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
(4)定义局部变量
Path=/backup Date=$(date +%F)
(5)查看flag文件,并对该文件进行校验,然后将校验的结果保存至result_时间
find $Path/-type f -name "flag_$Date"|xargs md5sum -c > $Path/result_${Date}
(6)将校验的结果发送邮件给管理员
mail -s "Rsync Backup $Date" 123@qq.com < $Path/result_${Date}
(7)删除超过7天的校验结果文件,删除超过180天的备份数
据文件
find $Path/ -type f -name "result*" -mtime +7|xargs rm -f
find $Path/ -type d -mtime +180|xargs rm -rf
(8)服务端编写定时任务脚本
[root@backup backup] crontab -l 00 05 * * * /bin/bash/scripts/check_backup.sh &> /dev/null