Rsync介绍与搭建

  • 1.概述
  • 1.1 常用备份
  • 1.2 常见组合:
  • 1.3 官网
  • 2.Rsync应用
  • 2.1程序的安装
  • 2.2数据传输模式
  • 3.Rsync命令介绍
  • 3.1 本地方式
  • 3.2 远程方式
  • 3.3 守护进程
  • 4.Rsync服务端和客户端配置及验证
  • 4.1安装软件包
  • 4.2 修改配置文件/etc/rsync.conf
  • 4.3 查找配置文件方式
  • 4.4 修改配置文件
  • 4.4 创建服务端信息
  • 4.5 启动查看服务
  • 4.6 客户端验证
  • 4.6.1 客户端推送故障现象
  • 4.6.2客户端下载故障现象
  • 4.7 简单脚本:
  • 实例配置
  • 客户端需求
  • 分析思路:
  • 1、需要备份谁
  • 2、备份的要求
  • 简单脚本


1.概述

remote sync	远程同步

1.1 常用备份

完全备份:对所有数据全备份
增量备份:只备份上次增加的部分
差异备份:备份上次完全备份后发生的变化

1.2 常见组合:

完全+增量:一次完全+多次增量
完全+差异:一次完全+一次差异

1.3 官网

https://rsync.samba.org/
samba服务器:文件共享
端口号
TCP 873
运行模式
C/S:客户端,服务端
B/S:浏览器,服务端

2.Rsync应用

2.1程序的安装

yum -y install rsnc

2.2数据传输模式

数据同步方式
	推:push,上传 upload
		客户端的数据上传到rsync服务器
	拉:pull,下载download
		rsycn服务器主动下载客户端的数据

3.Rsync命令介绍

-a	#归档模式传输,等于-tropgDl
		-r	#递归传输目录及子目录,即目录下得所有目录都同样传输。
		-t	#保持文件时间信息	
		-o	#保特文件属主信息
		-p	#保持文件权限
		-g	#保持文件属组信息
		-D	#保持设备文件信息
		-l	#保留软连接
-v	#详细模式输出,打印速率,文件数量等
-z	#传输时进行压宿以提高效率
-P	#显示同步的过程及传输时的进度等信息
-L	#保留软连接指向的目标文件
-e	#使用的信道协议,指定替代rsh的she11程序
--exclude=PATTERN	#指定排除不需要传输的文件模式
--exclude-from=file	#文件名所在的目录文件
--bwlimit=100	#限速传榆
--partial	#断点续传
--delete	#让目标目录和原目录数据保持一致

3.1 本地方式

类似cp命令
文件同步
		[root@backup ~]# rsync -avz /etc/passwd  /data/
		sending incremental file list
		passwd
目录同步1:
		[root@backup ~]# rsync -avz /data/ /opt/
		sending incremental file list
		./
		fstab
		passwd
目录同步2:
		[root@backup ~]# rsync -avz /data /opt/
		sending incremental file list
		data/
		data/fstab
		data/passwd
总结:
	如果要同步的是目录里面的内容需要添加‘/’
	如同要同步的书目录本身以及内容,则命令只需要写目录名不加‘、’
	完全同步:加--delete ,源和目标内容完全一致
	清空远端的文件
		[root@backup ~]# rsync -avz /null/ /opt/ --delete   #慎用

3.2 远程方式

使用ssh 协议  类似scp
	SCP
		[root@backup ~]# scp -r /null/ root@172.16.10.21:/tmp/
	rsync
		[root@backup ~]# rsync -r /data root@172.16.10.21:/tmp/
	问题:
		1:用户权限问题
		2:用户身份暴漏
		3:文件路径暴露

3.3 守护进程

pull: 拉取
	rsync [OPTION]... [USER@]HOST::SRC [DEST]
	[root@backup ~]# rsync -avz rsync_backup@172.16.10.21::backup/ /tmp/ --password-file=/etc/rsync.password
		rsync		命令
		[OPTION]...	-avz			选项
		[USER@		rsync_backup	虚拟用户
		HOST::		172.16.10.21::	远程主机地址
		SRC			backup			远程主机模块
		[DEST]		/tmp/			远程备份路径
	push 推送
	[root@backup ~]#rsync -avz /mnt/ rsync_backup@172.16.10.21::backup/ --passwork-file=/etc/rsync.password

4.Rsync服务端和客户端配置及验证

4.1安装软件包

yum -y install rsync

4.2 修改配置文件/etc/rsync.conf

4.3 查找配置文件方式

A:

rpm -qc rsync 
/etc/rsyncd.conf
/etc/sysconfig/rsyncd

B:

rpm -ql rsync 
/etc/rsyncd.conf

C:

rpm -ql rsync | grep etc
/etc/rsyncd.conf
/etc/sysconfig/rsyncd

4.4 修改配置文件

模板:

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.password 
log file = /var/log/rsyncd.log
[backup]
comment = ....
path = /backup

注释:

#全局模块
uid = rsync 
gid = rsync
port = 873
fake super = yes 					无需让rsync以root身份运行,允许存储文件的完整属性(3.1以后)
use chroot = no 					关闭假根功能
max connections = 200 				最大连接数量
rimeout = 600 						服务连接最大时间
ignore errors 						忽略错误信息
read only = false 					对备份数据可读写
list = false 						不允许查看模板
auth user = rsync_backup 			定义虚拟用户作为连接认证用户
secrets file = /etc/rsync.password 	定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log      日志路径
##局部模块
[backup]							定义模块信息
comment = 	数据已同步				模块注释信息
path = /backup 						定义接收备份数据目录

4.4 创建服务端信息

创建用户

[root@backup ~]# useradd -M -s /sbin/nologin rsync

创建目录

[root@backup ~]# mkdir [-p] /backup  				创建目录
[root@backup ~]# chmod -R rsync.rsync /backup		权限

创建虚拟用户文件
创建文件

echo "rsync_backup:123" >/etc/rsync.password		123表示密码
#echo “auth user:密码” > secrets file
chmod 600 /etc/rsync.password

4.5 启动查看服务

启动服务

systemclt start rsyuncd
systemclt enable rsyuncd

服务启动检查

systemctl status rsync     #显示active

检查端口及方式

[root@backup ~]#lsof -i :873
	rsync   3345 root    3u  IPv4  45259      0t0  TCP *:rsync (LISTEN)
	rsync   3345 root    5u  IPv6  45260      0t0  TCP *:rsync (LISTEN)
	[root@backup ~]#netstat -antp |grep rsync 
	[root@backup ~]#ss -antp |grep rsync
	[root@backup ~]#netstat -lntp |grep rsync

4.6 客户端验证

1、安装rsync软件包
2、验证
	推送
		客户端推送客户端数据到rsync服务端
		rsync -avz /etc/ rsync_backup@172.16.10.31::backup
	拉下载	
		客户端从服务端将backup模块下的资源下载到本地
		rsync -avz rsync_backup@172.16.10.31::backup/ /tmp/
4.6.1 客户端推送故障现象
客户端推送到服务端需要考虑密码文件权限是否修改为600
密码文件权限
		[root@nfs ~]# rsync -avz /etc/ rsync_backup@172.16.10.31::backup 
		sending incremental file list
		rsync: failed to set times on "." (in backup): Operation not permitted (1)
		原因:虚拟用户密码权限为问题
		chmod 600 /etc/rsync.password	 
		注意:chmod不要写成chown
		快速删除服务端备份数据    ##慎用
		mkdir  /null
		[root@nfs ~]# rsync -avz /null/ rsync_backup@172.16.10.31::backup --delete
4.6.2客户端下载故障现象
客户端下载文件时需要考虑服务端文件权限,主要是读
需要下载的文件没有权限
	[root@nfs ~]# rsync -avz rsync_backup@172.16.10.31::backup/ /tmp/
	receiving incremental file list
	rsync: failed to read xattr user.rsync.%stat for "messages" (in backup): Permission denied (13)
	rsync: failed to read xattr user.rsync.%stat for "secure" (in backup): Permission denied (13)
	rsync: send_files failed to open "messages" (in backup): Permission denied (13)
	rsync: send_files failed to open "secure" (in backup): Permission denied (13)

免密处理

方法1:在客户端创建密码文件,并给600权限
		[root@nfs ~]# echo "123" >/etc/rsync.password
		[root@nfs ~]# chmod 600 /etc/rsync.password
		[root@nfs ~]# rsync -avz rsync_backup@172.16.10.31::backup/ /tmp/ --password-file=/etc/rsync.password
	方法2:定义变量
		[root@nfs ~]# export RSYNC_PASSWORD=123
		[root@nfs ~]# rsync -avz rsync_backup@172.16.10.31::backup/ /tmp/

数据无差异同步

拉取远端数据:与本地一致,远端没有本地有会删除,造成客户端数据删除
	[root@nfs ~]# rsync -avz --delete rsync_backup@172.16.10.31::backup/ /data/	--password-file=/etc/rsync.password
	推送数据:本地与远端保持一致,本地没有远端会被姗迟,造成服务器丢失
	[root@nfs ~]# rsync -avz --delete /data/ rsync_backup@172.16.10.31::backup/ --password-file=/etc/rsync.password

4.7 简单脚本:

服务端

#!/bin/bash

#1、安装包
yum install -y rsync
#yum install -y rsync  &> /dev/null   表示不看过程

#2、创建用户
useradd -M -s /sbin/nologin rsync

#3、创建备份目录,并修改所属
mkdir /backup
chown -R rsync.rsync /backup

#4、修改配置文件

cat >/etc/rsyncd.conf<<EOF
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.password
log file = /var/log/rsyncd.log
[backup]
comment = ....
path = /backup
EOF


#5、创建认证文件
echo "rsync_backup:123" >/etc/rsync.password
chmod 600 /etc/rsync.password

#6、启动服务
systemctl start rsyncd
systemctl enable rsyncd

#7、服务检查,检查端口
#systemctl status rsync
#显示active
#lsof -i :873

客户端:

#!/bin/bash
	#1.安装rsyncbao
	yum -y install rsync
	#2.添加密码文件或修改变量
	#如果设置不同的密码使用密码文件
	--password-file= 
	#如果密码相同,使用变量会方便
	export RSYNC_PASSWORD=

实例配置

rsyncd 安装 rsync搭建_服务器

客户端需求

1、每天凌晨1点服务器本地打包备份(系统配置文件、日志文件、应用配置文件、数据等其他文件)
2、备份的数据存放至以主机名+IP+当前时间内名称的目录中,例如:/backup/nfs_172.16.10.21_2023-01-03
3、通过rsync推送本地已经打包的备份文件到backup服务器
4、本地已打包的数据合理保留日期,避免磁盘浪费

分析思路:

1、需要备份谁
系统配置文件
/etc/fstab  /etc/hosts	/var/spool/cron/root(计划任务)
日志文件:
/var/log/messages	/var/log/secure	/var/log/cron
服务配置文件:
/etc/rsync.conf
2、备份的要求
/backup/nfs_172.16.10.21_2023-01-03


获取以下信息
主机名:hostname
IP地址:ifconfig eth1 | awk 'NR==2{print $2}'   或者 hostname -I |awk '{print $2}'
时间:date +%F

目录名组合:
[root@nfs ~]#/backup/ $(hostname)_$(ifconfig eth1 | awk 'NR==2{print $2}')_$(date +%F)

简单脚本

#!/bin/bash
#1.定义变量
Host=$(hostname)
Ip=$(ifconfig eth1 | awk 'NR==2{print $2}')
Date=$(date +%F)
BackupDir=/backup
Dest=${BackupDir}/${Host}_${Ip}_${Date}
#2、创建目录
mkdir -p $Dest
#3、收集需要备份的文件
#sysconf backup
cp -p /etc/fstab  /etc/hosts /var/spool/cron/root $Dest
#logs backup 
cp -p /var/log/messages /var/log/secure /var/log/cron $Dest
#serverconf backup 
cp -p /etc/rsyncd.conf $Dest

#4、推到服务端
Rsync_User=rsync_backup
Rsync_IP=172.16.10.31
Rsync_Module=backup
export RSYNC_PASSWORD=123
rsync -avz $Dest $Rsync_User@$Rsync_IP::$Rsync_Module