黄沙百战穿金甲,不破楼兰终不还。这篇文章主要讲述架构03相关的知识,希望能为你提供帮助。
rsync备份实战备份环境准备
主机名 | WanIP | LanIP | 角色 |
web01 | 10.0.0.7 | 172.16.1.7 | rsync客户端 |
backup | 10.0.0.41 | 172.16.1.41 | rsync服务端 |
- 本地模式(cp)
- 远程模式(scp)
- 守护进程模式
rsync监听端口:873
rsync运行架构:C/S Client/Server
架构类型
C/S Client/Server
B/S Browser/Server
rsync服务端的作用:存储备份数据的
服务端操作
# 1.安装
[root@backup < sub> ]# yum install -y rsync
# 2.配置
[root@backup < /sub> ]# 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]
comment = welcome to oldboyedu backup!
path = /backup
## 端口的范围:1< sub> 65535
## 配置文件详解
[root@backup < /sub> ]# cat /etc/rsyncd.conf
# 服务的用户
uid = rsync
# 服务的用户组
gid = rsync
# 该服务监听的端口
port = 873
# 不以root身份运行,传输数据不使用系统用户
fake super = yes
# 禁锢目录,不允许获取到root权限
use chroot = no
# 最大连接数,最多能有多少个客户端跟服务端的873端口建立连接
max connections = 200
# 超时时间
timeout = 600
# 忽略错误
ignore errors
# 只读 = false,不只读,可读可写
read only = false
# 不允许查看模块信息
list = false
# 匿名用户
auth users = rsync_backup
# 匿名用户的密码文件
secrets file = /etc/rsync.passwd
# 日志文件
log file = /var/log/rsyncd.log
#####################################
# 模块名
[backup]
# 模块的描述信息
comment = This directory for backup nginx !
# 备份的目录
path = /backup
# 3.创建rsync系统用户
[root@backup < sub> ]# useradd rsync -s /sbin/nologin -M
# 4.创建服务端的密码文件
[root@backup < /sub> ]# vim /etc/rsync.passwd
rsync_backup:123
[root@backup < sub> ]# echo rsync_backup:123 > /etc/rsync.passwd
# 5.修改密码文件的权限为 600
[root@backup < /sub> ]# chmod 600 /etc/rsync.passwd
# 6.创建备份目录
[root@backup < sub> ]# mkdir /backup
# 7.修改备份目录的属组和属主
[root@backup < /sub> ]# chown rsync:rsync /backup/
# 8.启动rsync服务并加入开机自启
[root@backup < sub> ]# systemctl start rsyncd
[root@backup < /sub> ]# systemctl enable rsyncd
# 9.检查服务进程
[root@backup < sub> ]#ps -ef|grep [r]sync
root731310 17:49 ?00:00:00 /usr/bin/rsync --daemon --no-detach
# 10.检查服务端口
[root@backup < /sub> ]# netstat -lntup|grep 873
tcp00 0.0.0.0:8730.0.0.0:*LISTEN7313/rsync
tcp600 :::873:::*LISTEN7313/rsync
客户端操作
推:rsync [option..] 原文件 [用户名@]主机IP::模块名
rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
## 报错
## 用户密码认证失败
[root@web01 < sub> ]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
1.用户输入错误
2.密码输入错误
3.密码文件的权限不是600
[root@web01 < /sub> ]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::bak
@ERROR: Unknown module bak
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
1.模块名不认识
[root@web01 < sub> ]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
无法和172.16.1.41rsync服务建立连接
1.防火墙
2.selinux
3.服务没启动
4.服务的端口改了
[root@web01 < /sub> ]# rsync -avz /etc/shadow rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2]
客户端的密码文件权限也必须是600,否则报错
# 0.安装
[root@web01 < sub> ]# yum install -y rsync
# 1.客户端创建密码文件(客户端上的密码文件,只需要写密码,不需要写用户)
[root@web01 < /sub> ]# vim /etc/rsync.pass
123456
# 2.客户端上的密码文件也必须是600权限
[root@web01 < sub> ]# chmod 600 /etc/rsync.pass
# 3.推数据
[root@web01 < /sub> ]# rsync -avz /etc/shadow rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
# 4.使用环境变量免交互输入密码
[root@web01 < sub> ]# export RSYNC_PASSWORD=123
[root@web01 < /sub> ]# rsync -avz /etc/shadow rsync_backup@172.16.1.41::backup
排错过程
## 服务端
# 1.检查配置文件
[root@backup < sub> ]# cat /etc/rsyncd.conf
# 2.检查密码文件的权限
[root@backup < /sub> ]# ll /etc/rsync.passwd
-rw------- 1 root root 20 May 16 17:37 /etc/rsync.passwd
# 3.检查密码文件中的内容
检查用户名是否和配置文件中的用户名一致
# 4.检查模块目录的权限
模块目录的权限,必须是rsync配置文件中指定的uid和gid的权限
## 客户端
# 1.检查命令用户名
命令中的用户名要跟服务端配置文件和密码文件中的用户名一致 rsync_backup
# 2.检查命令模块名
命令中的模块名要跟服务端配置文件中的模块名一致 backup
# 3.如果有密码文件,检查权限
600 root root
# 4.检查密码文件内容
只需要写密码
# 5.检查环境变量中的密码
[root@web01 ~]# echo $RSYNC_PASSWORD
123
密码是否和服务端密码文件保持一致
企业级备份案例环境准备
主机名 | WanIP | LanIP | 角色 |
web01 | 10.0.0.7 | 172.16.1.7 | rsync客户端 |
nfs | 10.0.0.31 | 172.16.1.31 | rsync客户端 |
backup | 10.0.0.41 | 172.16.1.41 | rsync服务端 |
# 1.时间同步
crontab -e
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null
# 2.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 3.关闭selinux
setenforce 0
sed -i s#selinux=enforcing#selinux=disabled#g /etc/sysconfig/selinux
客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下: /client_backup
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至 /client_backup 包名: nfs_172.16.1.31_2022-05-16.tar.gz
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
服务端需求
【架构03】1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
如何校验一个数据的完整性
1.备份打包后,给压缩包做一个MD5加密
/client_backup/nfs_172.16.1.31_2022-05-16.tar.gz
md5sum nfs_172.16.1.31_2022-05-16.tar.gz > jiaoyan.txt
2.将校验文件,和压缩包一并传递到服务端
3.在服务端使用md5sum -c检查校验
## 完整传输
[root@backup tmp]# md5sum -c jiaoyan.txt
1.txt: OK
## 被篡改或不完整
[root@backup tmp]# md5sum -c jiaoyan.txt
1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
脚本实现客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:`/client_backup`
mkdir /client_backup
2.客户端在本地打包备份(/etc/passwd)拷贝至`/client_backup`包名:`nfs_172.16.1.31_2022-05-16.tar.gz`
cd /etc & & tar zcf /client_backup/nfs_172.16.1.31_2022-05-16.tar.gz passwd
3.客户端最后将备份的数据进行推送至备份服务器
rsync -az /client_backup/ rsync_backup@172.16.1.41::backup
4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
find /client_backup -type f ! -mtime -7|xargs rm -f
5.客户端每天凌晨1点定时执行该脚本
crontab -e
00 01 * * * /bin/sh /root/backup.sh > /dev/null
## 编写脚本
[root@web01 ~]# vim /root/backup.sh
#!/bin/bash
bak_dir="/client_backup"
host_name=`hostname`
ip=`/usr/sbin/ifconfig eth1|awk NR==2print $2`
date_time=`date +%F`
export RSYNC_PASSWORD=123
# 1.创建客户端的备份目录
mkdir -p $bak_dir
# 2.进入备份目录,压缩备份文件
cd /etc & & \\
tar zcf $bak_dir/$host_name_$ip_$date_time.tar.gz passwd
# 3.生成校验文件
cd $bak_dir & & \\
md5sum $host_name_推荐阅读
- Linux下文件及文件夹权限(学习笔记版)
- 技术分享 | web自动化测试-文件上传与弹框处理
- 使用Linux桌面壁纸应用variety发现的一些问题
- SQL基础入门
- 自动化运维工具Ansible常用模块
- 阿里云CentOS 8.x系统yum报404的解决方法
- Java实现俄罗斯方块小游戏。(附完整源代码)
- 简述keepalived工作原理
- Fix Failed to download metadata for repo