第一节.备份基础知识
1.什么是备份?
备份就是把重要的文件在复制一份存放起来! (给源文件增加一个 副本)
2.为什么要做备份?
数据重要!
防止出现故障(软件故障 人为故障80% 被黑了), 保证快速恢复整个系统的运转.
3.能不能不做备份?
可以, 对于不重要的数据,可不用备份.
4.备份通常使用什么工具?
本地备份 cp
远程备份 scp rsync
第二节.什么rsync
rsync简称远程同步,可以实现不同主机之间的同步. 同时支持增量和全量的备份.
不同主机 windows->linux linux->linux macos-linux macos-windows
第三节.rsync如何实现的备份
全量: 完全备份, 效率低.
增量: 差异备份, 效率高.
第四节.rsync使用场景
rsync数据传输模式: push推 pull拉
推: 客户端将需要备份的文件发送到服务端
拉: 客户端从服务端下载需要的文件
rsync数据传输模式-->问题
推: 如果机器过多,容易造成推送数据缓慢
拉: 如果客户端过多,会造成服务端压力过大.
比如: 现在20台机器,怎么有效的缓解推送和拉取的问题:
多服务器使用场景
异地备份
第五节.rsync传输模式
本地传输 cp
远程传输 scp
守护进程 程序放在后台运行--->进程
命令 选项 源文件 目标位置
Local: rsync [OPTION...] SRC... [DEST]
1.本地传输案例:
注意: 不支持推送和拉取,单纯的复制
[root@nfs ~]# rsync -avz ./oldboy /opt/
2.远程传输案例:
文件
上传 Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
[root@nfs ~]# rsync -avz test.txt root@172.16.1.41:/opt
推送本地的文件至172.16.1.41服务器的/opt目录,使用41的root用户完成此操作
下载 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
[root@nfs ~]# rsync -avz root@172.16.1.41:/opt/test.txt ./
下载41服务器上的/opt/test.txt文件至本地当前目录,使用41的root用户完成此操作
目录
上传: 推送/etc/所有文件
[root@nfs ~]# rsync -avz /etc/ root@172.16.1.41:/opt
[root@nfs ~]# rsync -avz /etc root@172.16.1.41:/opt
题:
nfs推送的/etc 目录,到backup服务器上面,名字叫(etc-nfs-172.16.1.31-2019-5-21)
web推送的/etc 目录,到backup服务器上面,名字叫(etc-web-172.16.1.7)
[root@nfs ~]# rsync -avz /etc/ root@172.16.1.41:/opt/etc_$(hostname)_$(date +%F)
下载:
远程同步弊端:
1.需要使用系统的用户
root, 权限太高
oldboy,权限不足
3.守护进程模式案例:
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
安装
[root@backup ~]# yum install rsync -y
配置
[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
[root@backup ~]# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
1.需要一个rsync进程运行时使用的普通用户--->rsync
useradd rsync -M -s /sbin/nologin
2.服务端需要定义一个客户端连接 虚拟用户名和密码
echo "rsync_backup:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
3.准备模块定义好的目录,客户端的数据都存放在该目录下
mkdir /backup
chown -R rsync.rsync /backup/
4.启动rsync,并加入开机自启
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
5.检查rsync的进程\端口
ps aux | grep rsync
netstat -lntp|grep 873
6.客户端测试
#backup属于服务端--->百度网盘
#nfs属于客户端--->pc电脑
推送数据:
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST #远程连接方式:路径
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST #守护进程方式::模块名称
rsync -avz ./test.txt rsync_backup@172.16.1.41::backup
将客户端的test.txt推送到41服务器的backup模块下,使用rsync_backup虚拟用户认证
下载数据:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
将41服务器的backup模块所有内容下载到本地的/opt目录
rsync -avz rsync_backup@172.16.1.41::backup /opt
将41服务器的backup模块指定内容下载到本地的/opt目录
rsync -avz rsync_backup@172.16.1.41::backup/test.txt /opt
扩展: 列出我的rsync服务总共有多少个模块,并且列出注释 list = true | false
[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::
backup welcome to oldboyedu backup!
第六节.无差异同步
1.客户端---push---服务端. 以客户端为准.
rsync -avz /root/ rsync_backup@172.16.1.41::backup #正常手法
rsync -avz --delte /root/ rsync_backup@172.16.1.41::backup #非正常手法
2.客户端---pull---服务端. 以服务端为准.
rsync -avz rsync_backup@172.16.1.41::backup ./ #正常手法
rsync -avz --delete rsync_backup@172.16.1.41::backup ./ #非正常手法
第七节.rsync其他参数使用
1.对同步进行限速100MB * 8 = 800兆 --bwlimit MB * 8 = 实际带宽100
dd if=/dev/zero of=./size.disk bs=1M count=500
[root@nfs ~]# rsync -avzP --bwlimit 1 ./size.disk rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
size.disk
177,537,024 33% 1.01MB/s 0:05:36
2.排除不同的文件
--exclude=file
rsync -avz /root/ --exclude=size.disk rsync_backup@172.16.1.41::backup
--exclude-from file
touch file{1..10}
# cat ex.txt
file4
file5
file6
rsync -avz /root/ --exclude-from ex.txt rsync_backup@172.16.1.41::backup
3.客户端输入密码验证:
方式一: --password-file 准备一个客户端的密码文件 /etc/rsync.pass
echo "123456" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
rsync -avz /root/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
方拾二:
export RSYNC_PASSWORD=123456
rsync -avz /root/ rsync_backup@172.16.1.41::backup
第八节.rsync相关参数:
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--partial #断点续传
--delete #让目标目录和源目录数据保持一致
使用方
--password-file
第九节.rsync错误
[root@nfs ~]# rsync -avz ./test.txt rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
1.密码真的错误
2.服务端的权限错误--->600权限
[root@nfs ~]# rsync -avz ./test.txt rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
test.txt
rsync: mkstemp ".test.txt.WSY34H" (in backup) failed: Permission denied (13)
sent 120 bytes received 124 bytes 69.71 bytes/sec
total size is 29 speedup is 0.12
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
第十节.企业实战案例
已知3台服务器主机名分别为web01、backup 、nfs主机信息见下表:
角色 | 主机名 | 外网IP(NAT) | 内网IP(LAN) |
---|---|---|---|
客户端 | web01 | eth0:10.0.0.7 | eth1:172.16.1.7 |
客户端 | nfs01 | eth0:10.0.0.31 | eth1:172.16.1.31 |
服务端 | backup | eth0:10.0.0.41 | eth1:172.16.1.41 |
客户端需求
1.客户端将本地需要备份的文件打包并拷贝至/backup/nfs_172.16.1.31_2018-09-02
2.客户端将备份后的数据推送至备份服务器
3.客户端本地保留最近7天的数据, 避免浪费磁盘空间
4.客户端每天凌晨1点定时执行该脚本
服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
注意:所有服务器的备份目录必须都为/backup
-------------------------------客户端--------------------------------------
散货-->打包-->装车--->运输
1.备份什么?
/etc/hosts /etc/fstab /var/spool/cron .....
tar czf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2 {print $2}')_$(date +%F)/sys.tar.gz /etc/hosts /etc/fstab /var/spool/cron
2.备份到哪?
/backup/nfs_172.16.1.31_2018-09-02
mkdir /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2 {print $2}')_$(date +%F)
3.推送数据?
nfs_172.16.1.31_2018-09-02 ----> 172.16.1.41 backup服务器
export RSYNC_PASSWORD=123456
rsync -avz /backup/nfs_172.16.1.31_2019-05-10 rsync_backup@172.16.1.41::backup
-------------------------------客户端脚本--------------------------------------
#模拟30天的文件
for i in {1..30};do date -s "2019/05/$i";sh /server/scripts/client_push_data.sh ;done
[root@nfs ~]# cat /server/scripts/client_push_data.sh
Path=/backup
Host=$(hostname)
Addr=$(ifconfig eth1|awk 'NR==2 {print $2}')
Date=$(date +%F)
Dest=$Path/${Host}_${Addr}_${Date}
#1.创建一个本地存储的目录
mkdir -p $Dest
#2.将需要备份的文件打包到$Dest目录中
cd / && \
[ -f $Dest/sys.tar.gz ] || tar czf $Dest/sys.tar.gz etc/hosts etc/fstab var/spool/cron
#3.将备份的文件夹推送到backup服务器
export RSYNC_PASSWORD=123456
rsync -avz $Dest rsync_backup@172.16.1.41::backup
#4.保留最近7天的数据
find /backup/ -type d -mtime +7|xargs rm -rf
-------------------------------服务端端脚本------------------------------------
服务端定时任务:
*/2 * * * * sh /server/scripts/check_client_data.sh &>/dev/null
脚本:
[root@backup backup]# cat /server/scripts/check_client_data.sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Path=/backup
Date=$(date +%F)
#1.校验每天客户端推送过来的数据
md5sum -c $Path/*_$Date/flag_$Date > $Path/result_$Date
#2.将校验的结果通知给管理人员
mail -s "Rsync Backup $Date" "572891887@qq.com" < $Path/result_$Date
#3.保留最近180天的数据
find /backup/ -type d -mtime +180|xargs rm -rf
网友评论