一. Rsync
1.备份
-
备份方式
- 完全备份:全备,效率低下,占用空间
- 增量备份:增备,效率高,节省空间
-
备份工具
- 本地备份:cp
- 远程备份:scp、rsync
2. rsync命令
- 推送 rsync OPTION SRC [user@]HOST:DEST
- 拉取 rsync OPTION [user@]HOST:SRC DEST
- OPTION
- -a 归档模式(相当于tropgDl的集合)
- -v 详细显示输出
- -z 传输时压缩增高效率
- -r 递归传输目录及子目录
- -t 保持文件时间属性
- -o 保持文件属主信息
- -p 保持文件权限
- -l 保持软链接
- -P 显示同步过程及传输的进度信息
- -D 保持设备文件信息
- -L 保留软链接指向的目录文件
- -e 使用的信道协议,指定代替rsh的shell
- –delete 让源与目标,在推送或拉取时,客户端与服务端保持一致。(有风险)
- –dwlimit 限速
- –exclude-from=file 文件名所在的目录文件
- –exclude=PATTERN 指定排除不需要传出的文件模式
- OPTION
例如:
###
推送:[root@nfs ~]# rsync -avz ./1.txt root@172.16.1.41:/tmp
###
拉取:[root@nfs ~]# rsync -avz root@172.16.1.41:/tmp/yum.log ./
###
限速推送:rsync -avzP --bwlimit=10 /etc rsync_backup@172.16.1.41::backup ##生产常用,极少占用用户资源
PS1:在推送或拉取目录时,要注意’/‘问题,不加‘/’,是整个目录,加‘/’,是目录下的所有文件或目录。
3.守护进程
(不适用真实的用户,可以自行创建一个用户,去运行这个服务)
1.下载rsync
yum install -y rsync
2.修改配置文件
(对文件的要求高,每行后不能有table,不能有注释#)
[root@backup /tmp]# vim /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]
path = /backup
-
- 对/etc/rsyncd.conf文件详解
[root@backup /tmp]# cat /etc/rsyncd.conf
uid = rsync #raync是使用rsync用户身份运行
gid = rsync
port = 873 #此服务的端口号
fake super = yes #不用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 #存储密码的路径
log file = /var/log/rsyncd.log #此服务的日志
#####################################
[backup] #模块的名称
comment = welcome to backup server # 描述的意思
path = /backup #模块名称对应的哭啼目录
3.根据文件进行初始化操作
- 创建假用户(运行rsync进程需要的身份)
useradd rsync -r -s /sbin/nologin -M
- 创建密码文件
[root@backup /tmp]# vim /etc/rsync.passwd
rsync_backup:1 #要与配置文件种定义的保持一致
chmod 600 /etc/rsync.passwd #要给密码文件授权600,否则报错。
- 创建模块目录
mkdir /backup
chown -R rsync.rsync /backup #无步操作报错。
4.启动
[root@backup /tmp]# systemctl start rsyncd
[root@backup /tmp]# systemctl enable rsyncd
[root@backup /tmp]# netstat -lntup |grep 'rsync'
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 17348/rsync
tcp6 0 0 :::873 :::* LISTEN 17348/rsync
5.测试
客户端使用推送或拉取的方式
#拉取
[root@nfs ~]# rsync -avzP rsync_backup@172.16.1.41::backup ./
receiving incremental file list
./
.ssh/
sent 31 bytes received 228 bytes 518.00 bytes/sec
total size is 6,892 speedup is 26.61
#推送
[root@nfs ~]# rsync -avz ./yum.log rsync_backup@172.16.1.41::backup
sending incremental file list
yum.log
sent 89 bytes received 43 bytes 88.00 bytes/sec
total size is 0 speedup is 0.00
- 客户端非交互式传输数据至服务端
1.定义环境变量
export RSYNC_PASSWORD=1
#然后执行命令不需要密码
2.命令后加入参数 --password-file=/etc/rsync.passwd
ech首先创建密码文件:echo 'rsync_backup:1' /etc/rsync.passwd
[root@nfs ~]# chmod 600 /etc/rsync.pass #授权600
rsync -avz ./yum.log rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
二.rsync用户与rsync_backup假用户有什么关系
- 并没有什么关系。
- 连接rsync服务端的用户不可以是系统用户,只能是定义的连接用户(在配置文件中定义的假用户,不存在在系统中)
- rsync用户(存在在系统中的用户)用来启动进程,rsync_backup(不存在在系统中的用户,自定义的用户)用于连接服务端的用户。
三.案例
公司有一套集群架构,为了架构的数据安全性,请定时将web01和nfs主机中重要文件备份。请务必保证
备份文件的正确性。并且,在备份服务器中只保留最近7天的备份数据 (服务端不能拉去客户端的数据,服务端不可动)
答:
- 客户端
- 提前准备存放备份的目录
- 在本地打包备份
- 最后将备份的数据进行推送到备份服务器
- 客户端服务器本地保留最近7天的数据,避免浪费空间
- 每天凌晨1点执行该脚本
[root@nfs ~]# vim /server/scripts/client_push_data.sh
# 定义变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Path=/backup
Host=$(hostname)
Addr=$(ifconfig eth1 | awk 'NR==2 {print $2}')
Date=$(date +%F)
Dest=${Host}_${Addr}_${Date}
# 1.创建目录
mkdir -p $Path/$Dest
# 2.文件打包,存储至对应的目录
cd / && \
tar czf $Path/$Dest/sys.tar.gz etc/hosts etc/fstab && \
tar czf $Path/$Dest/other.tar.gz server/scripts var/spool/cron
# 3.添加一个标记 md5
md5sum $Path/$Dest/sys.tar.gz $Path/$Dest/other.tar.gz > $Path/$Dest/flag_$Date
# 4.推送到指定的仓库
export RSYNC_PASSWORD=1
rsync -avz $Path/$Dest rsync_backup@172.16.1.41::backup
#5.保留最近7天数据
find $Path/ -type d -mtime +7 | xargs rm -rf
[root@nfs ~]# crontab -e
#备份系统配置文件、应用配置文件到远端backup主机
00 1 * * * /bin/sh /server/scripts/client_push_data.sh &>/dev/null
- 服务端
- 服务端部署rsync,用于接受客户端推送过来的备份数据
- 服务端需要每天校验推送过来的数据是否完整
- 服务端需要将每天校验的结果发送给管理员
- 服务端仅保留6个月的备份数据,其余删除
[root@backup ~]# vim /server/scripts/server_data.sh
# 定义变量
Path=/backup
Date=$(date +%F)
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# 1.服务端校验
md5sum -c $(find $Path/ -type f -name "flag_${Date}") > $Path/result.txt
# 2.将文件的结果通过邮箱的发送进行发送给管理人员
# 2.1 将服务器配置邮箱
# 2.2 通过mail命令发送邮件给管理员
mail -s "Rsync Backup $Date" 552408925@qq.com < $Path/result.txt
#3.保留最近6个月
find $Path/ -type d -mtime +180 | xargs rm -rf
[root@backup ~]# crontab -e
#将/back下面的远端备份数据的校验结果发送给管理员
00 00 * * * /bin/sh /server/scripts/server_data.sh &>/dev/null
四.配置邮件报警服务
- 1.安装邮件服务:
[root@web01 ~]# yum install -y mailx
- 2.修改配置文件
[root@backup ~]# vim /etc/mail.rc #(将下面的内容追加到文件中)
set from=145459@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=145459qq.com
set smtp-auth-password=#客户端授权码
set smtp-auth=login
- 3.测试:
[root@backup ~]# mail -s '主题' 123qq.com(收件人) </etc/hosts