架构--Rsync
程序员文章站
2022-05-31 19:56:30
...
一. 备份 Rsync
1.下载:服务端与客户端都下载 rsync
2.配置:
vim /etc/rsync.conf
uid = rsync # 运行进程的用户
gid = rsync # 运行进程的用户组
port = 873 # 监听端口
fake super = yes # 不需要rsync已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 # 定义rsync服务用户连接认证密码文件路径
[backup] # 定义模块信息
path = /backup # 定义接收备份数据目录
3.创建傀儡用户 --- 用户执行程序
useradd rsync -M -s /sbin/nologin
4.创建虚拟用户以及虚拟用户的密码 vim /etc/rsync.passwd
格式: Username:Password
[[email protected] ~]# vim /etc/rsync.passwd
rsync_backup:1
[[email protected] ~]# chmod 600 /etc/rsync.passwd
5.创建一个接收备份数据目录
[[email protected] ~]# mkdir /backup
[[email protected] ~]# chown -R rsync.rsync /backup/
3.启动
[[email protected] ~]# systemctl start rsyncd
[[email protected] ~]# systemctl enable rsyncd
4.检查
[[email protected] ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 22463/rsync
5.#将本地的某个文件,推送到服务端backup目录,使用的是虚拟的用户名和密码
Push:
[[email protected] ~]# rsync -avz 31.txt [email protected]::backup
Pull:
[[email protected] ~]# rsync -avz [email protected]::backup ./
参数
--bwlimit限速 (默认单位为兆 --> 兆 换算为带宽 * 8 = )
[[email protected] ~]# rsync -avzP --bwlimit=10 size_1G [email protected]::backup
--delete 强制同步
1.在推送时添加--delete, 强制让服务端与客户端保持一致
2.在拉取时添加--delete, 强制让客户端与服务端保持一致
--exclude --exclude-from 排除
1.重要的不希望别人看见
2.文件太大,无法移动
排除单个文件或多个文件
# rsync -avz --exclude=origin/all.txt ./origin [email protected]::backup
# rsync -avz --exclude=origin/3.txt --exclude=origin/all.txt ./origin [email protected]::backup
排除多个文件 ( 准备一个文件, 将要排除的内容写入文件中, 最后指定排除的文件即可)=
[[email protected] ~]# cat pc.txt
origin/5.txt
origin/8.txt
origin/9.txt
[[email protected] ~]# rsync -avz --exclude-from=pc.txt ./origin [email protected]::backup
5.免交互
1.选项 --password-file=
2.设定环境变量
第一种方式:
[[email protected] ~]# echo "1" > /etc/rsync.pass
[[email protected] ~]# chmod 600 /etc/rsync.pass
[[email protected] ~]# rsync -avz --exclude-from=pc.txt ./origin [email protected]::backup --password-file=/etc/rsync.pass
第二种方式:
[[email protected] ~]# export RSYNC_PASSWORD=1
[[email protected] ~]# rsync -avz --exclude-from=pc.txt ./origin [email protected]::backup
例题
客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
5.客户端每天凌晨1点定时执行该脚本
服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员 (邮件)
4.服务端仅保留6个月的备份数据,其余的全部删除 flag
客户端
$() : 小括号里面加的是命令
${}:花括号里面加的是变量
#!/bin/bash
Path=/backup
Host=$(hostname)
Addr=$(ipconfig | awk '/inet /{ print $2 }')
Date=$(date +%F)
Dest=${Path}/${Host}_${Addr}_${Date}
#1.创建备份的目录
[ -d $Dest ]mkdir -p $Dest
#2.打包备份文件 拷贝至 cd / && \
[ -f $Dest/sys.tar.gz ] || tar czf $Dest/sys.tar.gz etc/passwd etc/fstab etc/hosts && \
[ -f $Dest/other.tar.gz ] || tar czf $Dest/other.tar.gz var/spool/cron scripts
#3.添加标记
[ -f $Dest/flag_${Date} ] || md5sum $Dest/*.tar.gz > $Dest/flag_${Date}
#4.推送至备份服务器
rsync -avz $Path/ [email protected]::backup
#5.删除七天以前数据
find $Path -type f -mtime "-7" | xargs rm -rf
服务端
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Path=/backup
Date=$(date +%F)
#1.推送来的flag进行校验
md5sum -c $Path/*/flag_${Date} > $Path/result_${Date}
#2.通知管理人员
mail -s "备份校验结果${Date}" "[email protected]" < $Path/result_${Date}
下载 mailx 配置 vim /etc/mail.rc
set [email protected]
set smtp=smtps://smtp.qq.com:465
set [email protected]
set smtp-auth-password=随机码(从qq邮箱获得)
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
其中出现的问题
1.防火墙
selinux
firewalld No route to host (113)
2.密码文件不是复制,而是手写
3.模块找不到, 粘贴时使用的vim