一、rsync介绍

日志内容递归查找方法:
[root@nfs01 ~]# grep xiang -r /backup
/backup/10.0.0.7_bak/1.txt:xiang
[root@nfs01 ~]# grep shi -r /backup
/backup/10.0.0.8_bak/1.txt:shi
[root@nfs01 ~]# grep chuan -r /backup
/backup/10.0.0.9_bak/1.txt:chuan

1.1 什么是rsync服务

Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具

1.2 rsync软件使用方法

rsync命令语法格式
本地备份数据:
Local: rsync [OPTION.. .] SRC. .[DEST]
src:要备份的数据信息
dest:备份到什么路径中
远程备份数据:
Pu11: rsync [OPTION. . .] [USER@] HOST:SRC. . . [DEST]
[USER@ ] —-以什么用户身份拉取数据(默认以当前用户)
hosts —-指定远程主机IP地址或者主机名称
SRC —-要拉取的数据信息
dest —-保存到本地的路径信息
Push: rsync [OPTION. . .] SRC. . . [USER@] HOST : DEST
SRC —-本地要进行远程传输备份的数据
[USER@ ] —-以什么用户身份推送数据(默认以当前用户)
hosts —-指定远程主机IP地址或者主机名称
dest —-保存到远程的路径信息
守护进程方式备份数据备份服务
01.可以进行一些配置管理
02.可以进行安全策略管理
03.可以实现自动传输备份数据
客户端做拉的操作:恢复数据
Pull: rsync [OPTION…] [USER@] HOST: :SRC. . . [DEST]
rsync [OPTION…] rsync://[USER@ ] HOST [ :PORT1 /SRC…[DEST]
客户端做推的操作:备份数据
Push: rsync [OPTION…] SRC…[USER@ ] HOST: :DEST
src:要推送备份数据信息
[USER@]:指定认证用户信息
HOST:指定远程主机的IP地址或者主机名称
::DEST:备份服务器的模块信息
rsync [OPTION…] SRC… rsync:// [ USER@ ] HOST [ :PORT] /DEST

常见其他用法:1v4
1、本地备份数据 cp
[root@nfs01 ~]# cp /etc/fstab /backup/fstab.back
[root@nfs01 ~]# rsync /etc/fstab /backup/fstab_rsync
[root@nfs01 ~]# ls /backup/
10.0.0.7_bak 10.0.0.8_bak 10.0.0.9_bak fstab.back fstab_rsync
2、远程备份数据 scp
[root@nfs01 ~]# scp -rp /etc/fstab root@172.16.1.41:/backup/fstab_scp
[root@nfs01 ~]# rsync -rp /etc/fstab root@172.16.1.41:/backup/fstab_rsync
-r 递归拷贝
-p 保持文件的信息不变
[root@backup ~]# ls /backup/
fstab_rsync fstab_scp
总结:在使用rsync备份目录时:
备份目录后面有/ — /oldboy/:只将目录下面的内容进行备份传输
备份目录后面没有/ — /oldboy︰会将目录本身以及下面的内容进行传输备份
3、代替删除命令 rm
[root@backup ~]# rsync -rp —delete /null/ 172.16.1.31:/backup
—delete 实现无差异同步数据
面试题:有一个存储数据信息的目录,目录中数据存储了50G的数据,如何将目录中的数据快速删除,就使用上面的—delete参数就可以实现快速删除
删除大文件用法:
rsync —delete-before -a -H -v —progress —stats empty_dir delete_dir
4、代替查看文件命令
[root@backup ~]# ls /backup/
fstab_rsync fstab_scp
[root@backup ~]# rsync /backup/
drwxr-xr-x 42 2020/10/21 17:29:54 .
-rw-r—r— 465 2020/10/21 17:29:54 fstab_rsync
-rw-r—r— 465 2020/08/17 01:07:55 fstab_scp

1.3 rsync守护进程模式搭建

1.3.1 服务端

1、安装:yum install -y rsync
2、配置程序配置文件:vim /etc/rsyncd.conf

  1. uid = rsync
  2. gid = rsync
  3. port = 873
  4. fake super = yes
  5. use chroot = no
  6. max connections = 200
  7. timeout = 300
  8. pid file = /var/run/rsyncd.pid
  9. lock file =/var/run/rsync.lock
  10. log file =/var/log/rsyncd.log
  11. ignore errors
  12. read only = false
  13. list = false
  14. hosts allow= 172.16.1.0/24
  15. hosts deny = 0.0.0.0/32
  16. auth users =rsync_backup
  17. secrets file = /etc/rsync.password
  18. [backup]
  19. comment = "backup dir by oldboy"
  20. path = /backup
  21. uid = rysnc ---指定管理备份目录的用户
  22. gid = rsync ---指定管理备份目录的用户组
  23. port = 873 ---定义rsync备份服务的网络端口号
  24. fake super = yes ---将rsync
  25. use chroot = no --- 和安全相关的配置
  26. max connections = 200 ---最大连接数
  27. timeout = 300 ---超时时间(单位秒)
  28. pid file = /var/run/rsyncd.pid ---记录进程号码信息,1、让程序快速停止进程2、判断一个服务是否正在运行
  29. lock file =/var/run/rsync.lock ---锁文件
  30. log file =/var/log/rsyncd.log ---rsync服务的日志文件,用于排错分析问题
  31. ignore errors ---忽略传输中的简单错误
  32. read only = false ---指定备份目录是可读可写
  33. list = false ---使客户端可以查看模块true可以查看
  34. hosts allow= 172.16.1.0/24 ---允许传输备份数据的主机(白名单)
  35. hosts deny = 0.0.0.0/32 ---禁止传输备份数据的主机(黑名单)
  36. auth users =rsync_backup ---指定认证用户
  37. secrets file = /etc/rsync.password ---指定认证用户密码文件,用户名称:密码信息
  38. [backup] ---模块信息
  39. comment = "backup dir by oldboy" ---
  40. path = /backup ---模块中配置参数,指定备份目录

3、创建程序的用户和组
[root@backup ~]# useradd rsync -M -s /sbin/nologin
4、创建备份认证用户密码文件并修改权限
echo “rsync_backup:abc123..” >/etc/rsync.password
chmod 600 /etc/rsync.password
5、创建备份目录并修改权限
mkdir /backup
chown rsync.rsync /backup/
6、启动服务
systemctl restart rsyncd
systemctl enable rsyncd
7、测试
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
sent 237 bytes received 43 bytes 80.00 bytes/sec
total size is 351 speedup is 1.25

1.3.2 客户端:rsync守护进程客户端配置

1、创建一个密码文件
echo “abc123..” >/etc/rsync.password
chmod 600 /etc/rsync.password #必须要做此操作,否则会报错
2、进行免交互传输数据测试
rsync -avz /etc/hosts rsync_bakcup@172.16.1.41::backup —password-file=/etc/rsync.password

1.4 rsync备份传输数据原理

Rsync 是基于rsync算法校验源(SRC)与目标(DEST)之间的差异实现数据同步的。也就是说,当使用rsync工具同步数据时候,只复制源(SRC)发生改变的文件,到目标(DEST),这类似于增量备份。所以rsync同步数据的速度是很快的。但是rsync的传输性能有点差,在海量小文件需要同步时,表现很差劲。因为rsync是基于文件同步的(不是块级别的),在传输之前还要进行校验。
Rsync的工作模式有多中,使用rsync的服务模式来构建:主/从服务器的数据同步。此时rsync工作为守护进程监听在:TCP/873, 能接收客户端的数据同步请求。
Rsync备份服务及项目实战 - 图1

1.5 rsync命令常用参数

-v —verbose 显示详细的传输信息
-a —archive 命令的归档参数 包含:rtopgDl
-r —recursive 递归参数
-t —times 保持文件属性信息时间信息不变(修改时间)
-o —owner 保持文件的属主信息不变
-g —group 保持文件的属组信息不变
注意:如何让-o和-g参数生效,需要将配置文件的uid和gid改为root,需要将fake super参数进行注释
-p —perms 保持文件权限不变
-D 保持设备文件信息不变
-l —links 保持链接文件属性不变
-L 保持链接文件数据信息不变
-P 显示数据传输的进度信息
—exclude=PATTERN 排除指定数据不被传输
—exclude-from=file 排除指定数据不被传输(批量排除)
—bwlimt=RATE 显示传输的速率
—delete 无差异同步数据(我有的你也有,我没有的你也不能有)慎用

1.6 企业应用rsync技巧

1、守护进程多模块功能配置,将数据存储到不同的备份目录当中
[backup]
comment = “backup dir by oldboy”
path = /backup
[dbadata]
comment = “dbadate dir by oldboy”
path = /dbadata
[devdate]
comment = “devdata dir by oldboy”
path = /devdata
2、文件排除功能
排除掉test目录下a目录下的1.txt和b目录下的2.txt
rsync -avz /test —exclude=a/1.txt —exclude=b/2.txt rsync_backup@172.16.1.41::backup —password-file=/etc/rsync.password
3、批量排除,将排除的文件写进一个文件里面,然后通过exlcude-file=FILE指定
排除掉test目录下include.txt文件中排除的文件
rsync -avz /test —exclude-file=/test/include.txt rsync_backup@172.16.1.41::backup —password-file=/etc/rsync.password
4、创建备份目录,将文件备份到backup目录下172.16.1.41的子目录中
rsync -avz /test —exclude-file=/test/include.txt rsync_backup@172.16.1.41::backup/172.16.1.41/ —password-file=/etc/rsync.password
5、守护进程的访问控制
修改/etc/rsyncd.conf 配置文件中allow hosts和deny hosts参数即可,建议只使用一种名单
6、守护进程的列表功能配置
[root@nfs01 ~]# rsync rsync_backup@172.16.1.41::
backup “backup dir by oldboy”
dbadata “dbadate dir by oldboy”
devdate “devdata dir by oldboy”

二、全网备份项目(企业实战)

2.1 环境准备

服务器 外网地址 内网地址 主机名
nginx web服务器 10.0.0.7/24 172.16.1.7/24 web01
NFS存储服务器 10.0.0.31/24 172.16.1.31/24 nfs01
rsync 备份服务器 10.0.0.41/24 172.16.1.41/24 backup

2.2 项目需求

1、所有服务器的备份目录必须都为/backup
web01 nfs01 backup
2、要备份的系统配置文件包括哪些
a、定时任务服务的配置文件/var/spool/cron/root 适合web和nfs服务器
b、开机自启动的配置文件/etc/rc.local 适合web和nfs服务器
c、日常脚本的目录/server/scripts
d、防火墙iptables的配置文件/etc/sysconfig/iptables
e、其他
在web01 nfs01执行
3、web服务器站点目录假定为/var/www/html
4、web服务器访问日志路径假定为/app/logs
5、web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
web01 nfs01
6、备份服务器上,保留每周一的所有数据副本,其他要保留6个月的数据副本
7、备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间保存
8、需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份成功以及失败的结果信 息发给系统管理员邮件

2.3 功能分解

2.3.1 在客户端需要完成的工作

1、mkdir /backup/10.0.0.31
2、tar -zcvhf /backup/10.0.0.31/systembackup$(date +%Fweek%w -d -1day).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables
补充:tar命令用法
-h 将链接文件所指向的原文件进行保存备份
3、tar -zcvhf /backup/10.0.0.31/www_backup
$(date +%Fweek%w -d -1day).tar.gz /var/www/html 在web上执行
4、tar -zcvhf /backup/10.0.0.31/www_logs_backup
$(date +%F_week%w -d -1day).tar.gz /app/logs 在web上执行
5、find /backup -type f -mtime +7|xargs rm
6、find /backup/ -type f -mtime -1 ! -name “finger“|xargs md5sum >/backup/10.0.0.31/finger.txt
rsync -avz /backup/ rsync_backup@172.16.1.41::backup—password-file=/etc/rsync.password

2.3.2 在备份服务端需要完成的工作

mkdir /backup
find /backup/ -type f -mtime +180 ! -name “*week1.tar.gz”
find /backup/ -type -f name “finger.txt”|xargs md5sum -c >/tmp/check.txt
mail -s “邮件测试” 505597482@qq.com

2.4 保留周一数据的方法

a、在数据名称信息上加上周的信息
find /backup -type f -mtime +180 ! -name “*week1.tar.gz”
b、在服务端进行检查,将每周一传输的数据进行单独保存

2.5 如何验证数据完整性

利用md5算法进行验证数据完整性
#md5sum -c 指纹文件命令执行原理
第一步、打开一个指纹文件,将信息记录到缓存中
第二步、根据指纹文件的路径信息,生成md5数值信息
第三步、将新生成的md5数值和原有指纹文件中的数值进行比较
第四步、如果相同显示结果为ok,如果不同显示为failed

2.6 如何实现linux主机发送邮件

a、配置163企业邮箱
image.png
b、编写linux服务邮件相关配置文件
vim /etc/mail.rc
set from=shichuan_xiang@163.com smtp=smtp.163.com
set smtp-auth-user=shichuan_xiang@163.com smtp-auth-password=TWLLDSRFCUVDBEHL smtp-auth=login
c、发送邮件测试
echo “邮件发送测试” | mail -s “邮件测试” 505597482@qq.com
mail -s “邮件测试” 505597482@qq.com

2.7 编写项目完整脚本

2.7.1 客户端脚本

nfs服务器
[root@nfs01 scripts]# cat backup.sh
#/bin/bash
Backupdir=”/backup”
IP_info=$(hostname -i)
#create backup dir
mkdir -p $Backup_dir/$IP_info
#tar backup data -P去除绝对路径提示
tar -zchPf $Backup_dir/$IP_info/system_backup
$(date +%Fweek%w -d -1day).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables
#del 7 days ago data
find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null
#create finger file
find $Backup_dir/ -type f -mtime -1 ! -name “finger“|xargs md5sum >$Backup_dir/$IP_info/finger.txt
#push data to backup_server
rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup —password-file=/etc/rsync.password
web服务器
[root@web01 scripts]# cat backup.sh
#/bin/bash
Backup_dir=”/backup”
IP_info=$(hostname -i)
#create backup dir
mkdir -p $Backup_dir/$IP_info
#tar backup data
tar -zchPf $Backup_dir/$IP_info/system_backup
$(date +%Fweek%w -d -1day).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables
tar -zchPf $Backup_dir/$IP_info/www_backup
$(date +%Fweek%w -d -1day).tar.gz /var/www/html
tar -zchPf $Backup_dir/$IP_info/www_logs_backup
$(date +%F_week%w -d -1day).tar.gz /app/logs
#del 7 days ago data
find $Backup_dir/ -type f -mtime +7|xargs rm 2>/dev/null
#create finger file
find $Backup_dir/ -type f -mtime -1 ! -name “finger“|xargs md5sum >$Backup_dir/$IP_info/finger.txt
#push data to backup_server
rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup —password-file=/etc/rsync.password

2.7.2 服务端脚本

[root@backup scripts]# cat 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
find /backup/ -type f -name “finger.txt” | xargs md5sum -c >/tmp/check.txt
# send check mail
mail -s “check backup info for $(date +%F)” 505597482@qq.com You have new mail in /var/spool/mail/root
测试检验脚本方法:sh -x 脚本

2.7.3 实现自动完成全网数据备份(定时任务)

客户端定时任务
crontab -e
#backup data
0 0 /bin/sh /server/scripts/backup.sh &>/dev/null
服务端定时任务
#check backup data
0 5
/bin/sh /server/scripts/backup_server.sh &>/dev/null