rsync数据备份

rsync数据备份

1.rsync概述

	rsync(remote synchronizetion)具有本地和远程两台主机之间的数据快速复制同步镜像和远程备份的功能类似于scp命令,但scp每次都是全量拷贝,而rsync可以增量拷贝。
	rsync的监听端口:873,rsync运行架构:C/S(Client/Sever)

2.备份类型

1.全量备份:
	每一次都是将数据全部备份出来
2.增量模式:
	基于上一次的备份,将新增的数据备份出来
3.差异备份:
	基于全量备份,将后面新增的数据备份出来

3.rsync传输模式

1.本地模式:
	单个主机之间的数据传输,类似于cp命令:
	语法:
		rsync [选项] 源文件 目标路径
2.远程模式:
	通过ssh通道在两台主机中传输数据,类似于scp命令
	语法:
		拉:rsync [选项] [用户名@]主机IP:源文件路径 本机目录
		推:rsync [选项] 本机的源文件 [用户名@]主机IP:目标路径
3.守护进程模式:
	把rsync当成服务启动
	语法:
		拉:rsync [选项] [用户名@]主机IP::配置文件中的模块名 本机目录
		推:rsync [选项] 本机源文件 [用户名@]主机IP::配置文件中的模块名

4.使用守护进程的好处

1.守护进程不需要ssh协议,服务启动后自带端口
2.守护进程可以设置匿名用户,不需要使用系统用户

5.rsync选项

-a:归档模式传输,等于-tropgDl
-t(time):保持文件的时间信息
-r:递归拷贝
-o(owner):保持文件的属主信息
-g(group):保持文件的属组信息
-p(perm):保持文件的权限信息
-D(device):保持设备文件的信息
-l(link):保留软链接
-v:显示同步过程
-P:显示进度
-L:保留软链接指向的目标文件
--exclude=PATTERN:排除指定的文件模式
--exclude-form=file:排除指定的文件
--bwlimit=1:限速传输
--partial:断点续传
--delete:数据同步
--password-file=:指定密码文件

6.rsync备份实战

先准备两台主机:

主机名 WanIP LanIP 角色
web01 10.0.0.7 172.16.1.7 rsync客户端
backup 10.0.0.41 172.16.1.41 rsync服务端

6.1服务端操作

1.先安装rsync:yum install -y rsync
2.配置rsync的配置文件:vim /etc/rsyncd.conf,加入下段内容
	# 服务的用户
    uid = rsync
    # 服务的用户组
    gid = rsync
    # 该服务的监听端口
    port = 873
    # 不以root身份运行,传输数据不使用系统用户
    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 oldboyedu backup! 
    # 备份存放的目录
    path = /backup
3.创建配置文件中的系统用户:
	useradd rsync -s /sbin/nologin -M
4.创建服务端的密码文件:
	1.vim /etc/rsync.passwd
		rsync_backup:123
	2.echo 'rsync_backup:123'>/etc/rsync.passwd
5.修改密码文件的权限为600:
	chmod 600 /etc/rsync.passwd
6.创建备份目录:
	mkdir /backup
7.修改目录的属主和属组:
	chown rsync:rsync /backup/
8.启动rsync服务并加入开机自启:
	systemctl start rsyncd
	systemctl enable rsyncd
9.检查服务进程和服务端口:
	ps -ef|grep [r]sync
	netstat -lnutp|grep 873

6.2客户端操作

1.安装rsync:yum install -y rsync
2.客户端创建密码文件(客户端的密码文件只需要写密码):
	1.vim /etc/rsync.passwd
		123
	2.echo '123'>/etc/rsync.passwd
3.修改客户端的密码文件的权限:
	chmod 600 /etc/rsync.passwd
4.推数据检测服务端是否能够接受到数据:
	 rsync -avz /tmp rsync_backup@172.16.1.41::backup --password- file=/etc/rsync.passwd
5.也可以使用环境变量免交互输入密码:
	export RSYNC_PASSWORD=123
	rsync -avz /tmp rsync_backup@172.16.1.41::backup

6.3客户端推数据报错情况

推: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 ~]# 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 ~]# 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 ~]# 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.防火墙和selinux开启
2.服务没有启动 
3.服务的端口更改

6.4排错过程

服务端
1.检测配置文件是否错误:
	cat /etc/rsyncd.conf
2.检查密码文件的权限是否更改:
	ll /etc/rsync.passwd
3.检查密码文件中的用户名是否和配置文件中的一致
4.检查模块目录的属主和属组是否是配置文件中uid和gid指定的一样
客户端
1.检查命令用户名是否跟服务端的配置文件的用户名一致:rsync_backup
2.检查命令中的模块名是否跟服务端配置文件的模块名一致:backup
3.如果有密码文件,则检查权限是否为600
4.检查密码文件中的内容
5.检查环境变量中的密码是否和服务端里的密码文件保持一致

7.企业级备份案例

7.1.环境准备

主机名 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服务端

7.2.先决条件

1.时间同步
crontab -e
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com >/dev/null
2.关闭防火墙和selinux:
	systemctl stop firewalld:临时关闭
	systemctl disable firewalld:永久关闭
	setenforce 0:临时关闭
	sed -i 's#selinux=enforcing#selinux=disabled#g' /etc/sysconfig/selinux:永久关闭

7.3.客户端需求

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

7.4.服务端需求

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

7.5.脚本实现客户端需求

# /bin/bash
bak="/client_backup"
host_name=`hostname`
IP=`ifconfig eth1 |awk 'NR==2{print $2}'`
date_time=`date +%F`
export RSYNC_PASSWORD=123
# 1.创建客户端的备份目录
mkdir -p $bak
# 2.进入备份目录,压缩备份文件
cd /etc && tar -zcf 
$bak/${host_name}_${IP}_${date_time}.tar.gz passwd
# 3.生成校验文件
cd $bak && \
md5sum ${host_name}_${IP}_${date_time}.tar.gz > ${host_name}_${IP}_${date_time}.md5
# 4.推送数据到rsync服务端
rsync -avz $bak/ rsync_backup@172.16.1.41::backup
# 5.保留七天的文件
find $bak -type f ! -mtime -7|xargs rm -f

7.6脚本实现服务端的需求

1.服务端部署rsync,用于接收客户端推送的数据: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
2.配置邮件
	2.1:安装发邮件服务:yum install -y mailx
	2.2:修改配置文件:vim/etc/mail.rc
		set bsdcompat
        set from=发送邮件的邮箱
        set smtp=smtps://smtp.qq.com:465
        set smtp-auth-user=发送邮件的邮箱
        set smtp-auth-password=授权码
        set smtp-auth=login
        set ssl-verify=ignore
        set nss-config-dir=/etc/pki/nssdb/
4.编写脚本:
	bak="/backup"
    host_name=`hostname`
    date_time=`date +%F`
    # 进入到接收文件目录并校验文件的结果发送到管理员的邮箱中
    cd ${bak} && \
    md5sum -c *${date_time}.md5|mail -s "${date_time}_数据备份校验" 管理员邮箱
    服务端只保留180天的备份数据
    find $bak -type f ! -mtime -180 |xargs rm -f

7.8 将脚本放入到定时任务中

# 客户端定时任务:
    crontab -e
    #Usage:date_backup By:jl Date:2022/5/16
    00 01 * * * /bin/sh /root/backup.sh > /dev/null
# 服务端定时任务:
	crontab -e
	#Usage:date_backup By:jl Date:2022/5/16
	01 01 * * * /bin/bash /root/check_md5.sh > /dev/null
## 先设置一分钟来检测定时任务是否设置成功,如果发送了邮箱并且是想要的结果就可以设置成凌晨一点备份数据
posted on   jilei  阅读(585)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示