rsync服务:

rsync备份方式:

全备:完全备份

增备:差异备份

rsync备份模式:

1.本地备份:(类似于cp)
rsync [option...] SRC DEST

#传目录下文件文件
[root@nfs ~]# rsync -a test/ /tmp/

#连带目录传输
[root@nfs ~]# rsync -a test /tmp/
2.异地备份(远程备份,类似于scp)
#推 push:    rsync [option...] SRC [USER@]HOST:DEST
#推送目录下文件:
[root@nfs ~]# rsync -avz test/ root@172.16.1.41:/tmp/
#推送目录:
[root@nfs ~]# rsync -avz test root@172.16.1.41:/tmp/

#拉 pull:   rsync [option...] [USER@]HOST:SRC DEST
#拉取目录下文件
[root@nfs ~]# rsync -avz root@172.16.1.41:/tmp/ ./
#连带目录及文件都拉取
[root@nfs ~]# rsync -avz root@172.16.1.41:/tmp ./
注意:带 '/' 与 不带 '/' 的区别

    带 '/' :拉去或推送目录下文件

    不带 '/' :拉取或推送目录及下面的文件
3.守护进程
**服务端:**

1> 下载安装
[root@backup ~]# yum install -y rsync
2> 配置文件
#运行服务的用户id
uid = rsync
#运行服务的用户组id
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




uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = yes
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
######################################
[data]
path = /data
3> 创建系统用户
[root@backup ~]# useradd rsync -s /sbin/nologin -M
4> 创建虚拟用户的密码文件
#指定虚拟用户
auth users = rsync_backup
#指定虚拟用户的密码文件
secrets file = /etc/rsync.passwd

[root@backup ~]# echo 'rsync_backup:123456' > /etc/rsync.passwd

####授权####
[root@backup ~]# chmod 600 /etc/rsync.passwd
5> 创建备份目录
[root@backup ~]# mkdir /backup

#授权
[root@backup ~]# chown -R rsync.rsync /backup/
6> 启动服务
[root@nfs backup]# systemctl start rsyncd

#检验服务启动
[root@nfs backup]# netstat -lntp | grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      7582/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      7582/rsync         
[root@nfs backup]#
**客户端:**

1> 下载安装
[root@backup ~]# yum install -y rsync
2> 配置密码文件
[root@nfs ~]# echo '123456' > /etc/rsync_passwd

####授权####
[root@nfs ~]# chmod 600 /etc/rsync_passwd
**客户端演示推送方法:**

1> 拉 pull:
[root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /backup
2> 推 push:
#推目录下文件
[root@nfs backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup
#连带目录推送
[root@nfs backup]# rsync -avz /backup rsync_backup@172.16.1.41::backup
3> 推送拉取数据使用密码文件
[root@nfs backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync_passwd
4> 推送拉取数据使用环境变量
[root@nfs backup]# export RSYNC_PASSWORD=123456
[root@nfs backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup

[root@nfs ~]# cat ~/.bashrc 
export RSYNC_PASSWORD=123456
#保持文件属性
fake super = yes
传输文件属性没变

#保持文件属性
fake super = no
传输文件属性变化
#不能跳出传送指定目录
use chroot = true
#是否可以查看模块列表
list = false
[root@nfs backup]# rsync -avzL rsync_backup@172.16.1.41::

#是否可以查看模块列表
list = true
[root@nfs backup]# rsync -avzL rsync_backup@172.16.1.41::
backup             welcome to oldboyedu backup!
[root@nfs backup]# rsync -avzL rsync_backup@172.16.1.41::
backup             welcome to oldboyedu backup!
data               welcome to linux7 backup!
传输报错排查:
1> 查看服务端配置文件模块名

2> 查看服务端密码文件格式    rsync_backup:123456

3> 服务端密码文件权限是否为 600

4> 服务是否启动

5> 客户端密码文件格式是否为  123456

6> 客户端密码文件权限是否为 600

7> 客户端推的时候,服务端备份目录权限是否为 rsync.rsync

8> 防火墙,selinux是否关闭

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=xxx         #使用密码文件
1> 限速传输
--bwlimit=100
#平均速率为1M
[root@nfs backup]# rsync -avzP --bwlimit 1 /backup/ rsync_backup@172.16.1.41::backup
[root@nfs backup]# rsync -avzP --bwlimit=1 /backup/ rsync_backup@172.16.1.41::backup
sending incremental file list
./
test.txt
    135,266,304  25%    1.01MB/s    0:06:17
2> 让目标目录和源目录数据保持一致(无差异同步)
--delete
#保持传输数据与源文件相同
[root@nfs backup]# rsync -avzP --bwlimit=1024 /backup/ rsync_backup@172.16.1.41::backup --delete
sending incremental file list
deleting dir{1.10}/
deleting dir2/
deleting dir10/
deleting dir1/
./

sent 183 bytes  received 76 bytes  518.00 bytes/sec
total size is 0  speedup is 0.00
[root@nfs backup]# 

#拉取时:
[root@nfs backup]# rsync -avzP rsync_backup@172.16.1.41::backup /backup --delete
receiving incremental file list
deleting dir2/
deleting dir1/
deleting 123/
./

sent 34 bytes  received 183 bytes  144.67 bytes/sec
total size is 0  speedup is 0.00
[root@nfs backup]#
3> 指定排除不需要传输的文件模式
--exclude=PATTERN           #指定排除不需要传输的文件模式  
#--exclude=dir3可以不用绝对路径,可用{}同时排除多个文件
[root@nfs backup]# rsync -avzP --exclude=dir3 /backup/ rsync_backup@172.16.1.41::backup
[root@nfs backup]# rsync -avzP --exclude={dir3,dir4} /backup/ rsync_backup@172.16.1.41::backup

--exclude-from=file         #文件名所在的目录文件
#--exclude-from=1.txt   需要指定绝对路径

[root@nfs ~]# rsync -avzP --exclude-from=1.txt /backup/ rsync_backup@172.16.1.41::backup
rsync: failed to open exclude file 1.txt: No such file or directory (2)
rsync error: error in file IO (code 11) at exclude.c(1178) [client=3.1.2]

[root@nfs backup]# rsync -avzP --exclude-from=1.txt /backup/ rsync_backup@172.16.1.41::backup

客户端需求

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02 2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02 3.客户端最后将备份的数据进行推送至备份服务器 4.客户端每天凌晨1点定时执行该脚本 5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间


服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据 2.服务端需要每天校验客户端推送过来的数据是否完整 3.服务端需要每天校验的结果通知给管理员 4.服务端仅保留6个月的备份数据,其余的全部删除

Rsync备份案例

客户端需求:

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02

#!/bin/bash
#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}
#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC

2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02

#!/bin/bash

#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}

#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC

#在本地打包备份
cd / && \
tar zcf $SRC/conf.tar.gz etc/rc.local etc/fstab etc/hosts

3.创建校验文件

#!/bin/bash

#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}

#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC

#在本地打包备份
tar zcf $SRC/conf.tar.gz /etc/rc.local /etc/fstab /etc/hosts &>/dev/null

#添加认证文件
md5sum $SRC/conf.tar.gz  > $SRC/flag_$DATE

4.客户端最后将备份的数据进行推送至备份服务器

#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}

#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC

#在本地打包备份
tar zcf $SRC/conf.tar.gz /etc/rc.local /etc/fstab /etc/hosts &>/dev/null

#推送至备份服务器
export RSYNC_PASSWORD=123456
rsync -az /backup/ rsync_backup@172.16.1.41::backup

5.客户端每天凌晨1点定时执行该脚本

[root@nfs scripts]# crontab -e
#定时推送备份文件
* * * * * /bin/bash /scripts/client-push.sh

6.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

#修改时间
[root@nfs scripts]# for i in `seq -w 30`;do date -s "201911$i";sh client-push.sh;done

#删除七天前文件

#!/bin/bash

#定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#定义变量
DIR=/backup
H=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${H}_${IP}_${DATE}

#创建备份目录格式为:主机名_ip_时间
mkdir -p $SRC

#在本地打包备份
tar zcf $SRC/conf.tar.gz /etc/rc.local /etc/fstab /etc/hosts &>/dev/null

#推送至备份服务器
export RSYNC_PASSWORD=123456
rsync -az /backup/ rsync_backup@172.16.1.41::backup

#删除七天前的文件
find /backup/ -type d -mtime +7 | xargs rm -rf

服务端需求:

1.服务端部署rsync,用于接收客户端推送过来的备份数据

2.服务端需要每天校验客户端推送过来的数据是否完整

#!/bin/bash

#定义变量
DIR=/backup
DATE=$(date +%F)

#验证文件完整性
md5sum -c $DIR/*_$DATE/flag_$DATE

3.服务端需要每天校验的结果通知给管理员

#安装邮件服务
[root@backup ~]# yum install -y mailx

#配置邮件服务
[root@backup ~]# vim /etc/mail.rc
#写在最下面,只修改QQ号和授权码
set from=123@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=123@qq.com
set smtp-auth-password=gclbfastnbgcbabg
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

#测试发送邮件
mail -s "备份结果" 1240206455@qq.com < $DIR/*_$DATE/check.txt

----------------------------------------------------------------------------

[root@backup ~]# vim /scripts/server-backup.sh 
#!/bin/bash

#定义变量
DIR=/backup
DATE=$(date +%F)

#验证文件完整性
md5sum -c $DIR/*_$DATE/flag_$DATE > $DIR/*_$DATE/check.txt

#发邮件给管理员
mail -s "备份结果" 1240206455@qq.com < $DIR/*_$DATE/check.txt

4.服务端仅保留6个月的备份数据,其余的全部删除

#删除七天前的文件
[root@backup ~]# vim /scripts/server-backup.sh 
#!/bin/bash

#定义变量
DIR=/backup
DATE=$(date +%F)

#验证文件完整性
md5sum -c $DIR/*_$DATE/flag_$DATE > $DIR/*_$DATE/check.txt

#发邮件给管理员
mail -s "备份结果" 1240206455@qq.com < $DIR/*_$DATE/check.txt

find /backup/ -type d -mtime +180 | xargs rm -rf
Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:35

results matching ""

    No results matching ""