rsync备份服务

业无高卑志当坚,男儿有求安得闲?这篇文章主要讲述rsync备份服务相关的知识,希望能为你提供帮助。
简介
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具


全量
将一个目录完整备份到另一个目录或服务器上,每次全部备份覆盖上一次的备份。效率低
增量
将一个目录备份到另一个目录或服务器时先通过算法匹对是否有相同数据,再将新增数据备份到另一个目录或服务器上。效率高


作用
进行数据备份、日志的统一保存


使用方法
rsync命令属于1v4命令,即可替代cp、scp、rm、ls命令


比较
1、本地备份数据 cp/rsync
[root@oldboysz-01 ~]# cp /etc/hosts /tmp
[root@oldboysz-01 ~]# ll /tmp/hosts
-rw-r--r-- 1 root root 371 Dec2 14:25 /tmp/hosts
[root@oldboysz-01 ~]# rsync /etc/hosts /tmp/hosts_rsync
[root@oldboysz-01 ~]# ll /tmp/hosts_rsync
-rw-r--r-- 1 root root 371 Dec2 14:30 /tmp/hosts_rsync
2、远程备份数据 scp/rsync -rp
指定目标用户
[root@nfs01 backup]# scp -rp /etc/hosts root@172.16.1.41:/backup
root@172.16.1.41s password:
hosts100%3711.0KB/s00:00
默认目标用户
[root@nfs01 backup]# scp -rp /etc/hosts 172.16.1.41:/backup
root@172.16.1.41s password:
hosts100%371294.9KB/s00:00


-r--- 递归复制传输数据
-p--- 保持文件属性信息不变


[root@nfs01 backup]# rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync
root@172.16.1.41s password:


rsync远程备份目录:
[root@nfs01 ~]# rsync -rp /oldboy 172.16.1.41:/backup--- 备份的目录后面没有 /
root@172.16.1.41s password:
[root@backup ~]# ll /backup
total 0
drwxr-xr-x 2 root root 48 May6 16:22 oldboy
[root@backup ~]# tree /backup/
/backup/
└── oldboy
├── 01.txt
├── 02.txt
└── 03.txt


1 directory, 3 files


[root@nfs01 ~]# rsync -rp /oldboy/ 172.16.1.41:/backup--- 备份的目录后面有 /
root@172.16.1.41s password:
[root@backup ~]# ll /backup
total 0
-rw-r--r-- 1 root root 0 May6 16:24 01.txt
-rw-r--r-- 1 root root 0 May6 16:24 02.txt
-rw-r--r-- 1 root root 0 May6 16:24 03.txt


总结:在使用rsync备份目录时:
备份目录后面有/ -- /oldboy/ :只将目录下面的内容进行备份传输
备份目录后面没有/ -- /oldboy:会将目录本身以及下面的内容进行备份传输
3、替代删除命令(使用rsync参数--delete将某个空目录进行备份实现删除目标目录中数据)
存储服务器上操作
[root@nfs01 backup]# rsync -rp --delete /null/ 172.16.1.41:/backup
root@172.16.1.41s password:
备份服务器上操作
[root@backup backup]# ll
total 0


--delete实现无差异同步数据
4、替代查看文件命令 ls/rsync
[root@backup backup]# ls /etc/hosts
/etc/hosts
[root@backup backup]# rsync /etc/hosts
-rw-r--r--371 2021/11/13 19:56:04 hosts


rsync语法格式
rsync[OPTION...]SRC...[DEST]
本地备份数据:
src: 要备份的数据信息
dest: 备份到什么路径中


远程备份数据:
Access via remote shell:
Pull: 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. 可以实现自动传输备份数据
需要熟悉rsync守护进程名称语法:
Access via rsync daemon:
客户端做拉的操作:恢复数据
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
客户端做推的操作:备份数据
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
src:要推送备份数据信息
[USER@]:指定认证用户信息
HOST:指定远程主机的IP地址或者主机名称
::DEST :备份服务器的模块信息


rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST


rsync守护进程部署方式
rsync守护进程服务端配置:
第一个历程:下载安装软件
rpm -qa|grep rsy检查软件是否安装
yum install -y rsync安装软件


第二个历程:编写配置文件
man rsyncd.conf 查看配置文件官方文档
vim /etc/rsyncd.conf
##created by HQ at 2017
###rsyncd.conf start##


uid = rsync--- 指定管理备份目录的用户
gid = rsync--- 指定管理备份目录的用户组
port = 873--- 定义rsync备份服务的网络端口号(默认873)
#fake super = yes--- 将rsync虚拟用户伪装成为一个超级管理员用户
use chroot = no--- 和安全相关的配置
max connections = 200 --- 最大连接数 同时只能有200个客户端连接到备份服务器
timeout = 300--- 超时时间(单位:秒)
pid file = /var/run/rsyncd.pid--- 记录进程号码信息(1.让程序快速停止进程[kill `cat /var/run/rsyncd.pid `] 2.判断一个服务是否正在运行)
lock file = /var/run.rsync.lock--- 锁文件(程序自动生成 控制连接限制)
log file = /var/log/rsyncd.log--- rsync服务的日志文件(用于排错分析问题)
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 --- 指定认证用户password文件 用户名称:password信息
[backup]--- 模块信息
comment = "backup dir by oldboy"
path = /backup--- 模块中配置参数(指定备份目录)




第三个历程:创建rsync服务的虚拟用户
useradd rsync -M -s /sbin/nologin


第四个历程:创建备份服务认证password文件并修改权限
echo "rsync_backup:sjbroot"> /etc/rsync.password
chmod 600 /etc/rsync.password--- 修改权限为仅属主用户可读写600


第五个历程:创建备份目录并修改属主属组信息
mkdir /backup
chown rsync.rsync /backup/


第六个历程:启动备份服务
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd


rsync守护进程客户端配置:
第一个历程:创建一个password文件
echo "sjbroot"> /etc/rsync.password
chmod 600 /etc/rsync.password


第二个历程:进行免交互传输数据测试
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password


rsync命令参数详细说明
-v,--verbose显示详细的传输信息
-a,--archive命令的归档参数 包含:rtopgDl
-r,--recursive递归参数
-t,--times保持文件属性信息时间信息不变(修改时间)
-o,--owner保持文件属主信息不变
-g,--group保持文件属组信息不变
PS:如何让-o和-g参数生效,需要将配置文件uid和gid改为root,需要将fake super参数进行注释
-p,--perms保持文件权限信息不变
-D,保持设备文件信息不变
-l,--links保持链接文件属性不变


-L,保持链接文件数据信息不变
-P,显示数据传输的进度信息
--exclude=PATTERN排除指定数据不被传输
--exclude-from=file 排除指定数据不被传输(批量排除)
--bwlimit=RATE显示传输的速率 100Mb/8=12.5MB


--delete无差异同步参数(慎用)
-z压缩数据


守护进程来创建备份目录
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.0.0.7/ --password-file=/etc/rsync.password
PS:客户端无法在服务端创建多级目录


守护进程的列表功能配置
[root@nfs01 /]# rsync rsync_backup@172.16.1.41::
backup"backup dir by oldboy"
dba"backup dir by oldboy"
dev"backup dir by oldboy"


守护进程的访问控制配置
守护进程白名单和黑名单功能
三种情况:
1. 只有白名单,黑名单注释:只有白名单上的网段或IP可传输,其余阻止
2. 只有黑名单,白名单注释:只有黑名单上的网段或IP阻止传输,其余允许
3. 白名单黑名单都有:传输时匹配黑白名单网段或IP进行允许或阻止,其余网段允许
4. 又在白名单又在黑名单:一个网段或IP均在黑白名单上时,白名单优先于黑名单
PS:建议只使用一种名单


全网备份项目实战
环境准备
备份服务器rsync、存储服务器nfs、web服务器web01


项目需求
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)。
web01 nfs01


3)Web服务器站点目录假定为(/var/html/www)。
4)Web服务器A访问日志路径假定为(/app/logs)
web01


5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
web01 nfs01


6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本。
六个月以内 周一 ~ 周日
六个月以前 周一 ~ 周日周一保留 周二 ~ 周日 删除
backup
部署好rsync守护进程服务


7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
web01 nfs01


8)需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中(发邮件技巧见VIP群资料)。
backup


备份客户端要完成的工作
1. mkdir -p /backup/10.0.0.31


2. cd /
tar -zchf /backup/10.0.0.31/system_backup_$(date +%F_week%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables


3. find /backup -type f -mtime +7|xargs rm


4. find /backup/ -type f -mtime -1 ! -name "finger*"|xargs md5sum > /backup/10.0.0.31/finger.txt


5. rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password


web客户端要完成的工作
1. mkdir -p /backup/10.0.0.7


2. cd /
tar -zchf /backup/10.0.0.31/system_backup_$(date +%F_week%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables


3. tar -zchf /backup/10.0.0.31/www_backup_$(date +%F_week%w).tar.gz ./var/html/www


4. tar -zchf /backup/10.0.0.31/logs_backup_$(date +%F_week%w).tar.gz ./app/logs


5. find /backup -type f -mtime +7|xargs rm


6. find /backup/ -type f -mtime -1 ! -name "finger*"|xargs md5sum > /backup/10.0.0.7/finger.txt


7. rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password


补充:
01. tar命令用法
-h, --dereferencefollow symlinks; archive and dump the files they point to
将链接文件所指向的原文件进行保存备份


【rsync备份服务】 备份服务端要完成的工作
mkdir -p /backup


find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"|xargs rm 2> /dev/null


find /backup/ -type f -name "finger.txt"|xargs md5sum -c & > /tmp/check.txt


mail -s "邮件测试" 1480451772@qq.com < /tmp/check.txt


补充说明:
01. 保留周一数据的方法
第一种:在数据名称信息上加上周的信息
find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"
第二种:在服务端进行检查,将每周一传输的数据进行单独保存
02. 如何验证数据完整性
利用md5算法进行验证数据完整性
#md5sum -c 指纹文件命令执行原理
# 第一个历程: 打开一个指纹文件,将信息记录到缓存中
# 第二个历程: 根据指纹文件的路径信息,生成md5数值信息
# 第三个历程: 将新生成md5数值和原有指纹文件中的数值进行比较
# 第四个历程: 如果相同显示结果为ok,如果不同显示failed
03. 如何实现发送邮件
a. 配置163企业邮箱
b.
vim /etc/mail.rc
set from=*********@163.com smtp=smtp.163.com
set smtp-auth-user=*********@163.com smtp-auth-password=PCPPORIZWQIQJAYS smtp-auth=login
邮箱用户名称邮箱授权password(不是登录password)
systemctl restart postfix.service
c. 发送邮件测试
echo "邮件发送测试"|mail -s "邮件测试" 1480451772@qq.com
说明:echo后面接上要发送的邮件信息,mail -s后面接上邮件标题,最后表示要将邮件发送给谁
mail -s "邮件测试" 330882721@qq.com < /etc/hosts


编写全网备份脚本
客户端脚本:
nfs01服务器备份脚本:
#!/bin/bash
Backup_dir="/backup"
IP_info=$(hostname -I|awk {print $1})


#create backup dir
mkdir -p $Backup_dir/$IP_info


#tar backup data
cd /
tar -zchf $Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -1day).tar.gz ./var/spool/cron/root
./etc/rc.local ./server/scripts ./etc/sysconfig/iptables


#del 7 day 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/fin
ger.txt


#backup push data info
rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password


web01服务器备份脚本:
#!/bin/bash
Backup_dir="/backup"
IP_info=$(hostname -I|awk {print $1})


#create backup dir
mkdir -p $Backup_dir/$IP_info


#tar backup data
cd /
tar -zchf $Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -1day).tar.gz ./var/spool/cron/root
./etc/rc.local ./server/scripts ./etc/sysconfig/iptables
tar -zchf /backup/$IP_info/www_backup_$(date +%F_week%w -d -1day).tar.gz ./var/html/www
tar -zchf /backup/$IP_info/logs_backup_$(date +%F_week%w -d -1day).tar.gz ./app/logs


#del 7 day 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/fin
ger.txt


#backup push data info
rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password




服务端脚本:
#!/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 "验证信息 $(date +%F)" 1480451772@qq.com < /tmp/check.txt


PS:测试检验脚本方法: sh -x 脚本信息


实现自动完成全网数据备份(定时任务)
客户端定时任务:
crontab -e
#backup data
0 0 * * * /bin/sh /server/scripts/backup.sh & > /dev/null


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



    推荐阅读