Rsync服务

发布于 29 天前  18 次阅读


作用:
1.本地的备份 类似cp命令 意义不大
2.远程的拷贝 类似scp命令 意义不大 (增量备份)
	如果第一次远程执行文件拷贝动作使用scp和rsync一样
	如果第二次远程执行,有新增加的文件可以使用rsync命令
3.守护进程模式 持续不断地在后台运行,接收客户端发送的重要数据。类似于百度网盘。

scp 每次都是全量拷贝
rsync 每次都是增量拷贝
image-20241202204227347
全量演示:
[root@backup ~]#scp -r oldboy/ 10.0.0.7:/root/
[root@backup ~]#touch oldboy/{10..20}.txt
[root@backup ~]#scp -r oldboy/ 10.0.0.7:/root/
在拷贝查看过程,还是将所有的文件重新拷贝
增量演示:
[root@backup ~]#touch oldboy/{1..3}.txt
[root@backup ~]#rsync -avz oldboy 10.0.0.7:/root/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.7's password: 
sending incremental file list
oldboy/
oldboy/1.txt
oldboy/2.txt
oldboy/3.txt
sent 224 bytes  received 77 bytes  31.68 bytes/sec
total size is 0  speedup is 0.00
[root@backup ~]#touch oldboy/4.txt
[root@backup ~]#rsync -avz oldboy 10.0.0.7:/root/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.7's password: 
sending incremental file list
oldboy/
oldboy/4.txt
sent 175 bytes  received 39 bytes  28.53 bytes/sec
total size is 0  speedup is 0.00
然后再执行远程拷贝,发现只会拷贝4.txt文件

一、Rsync三种工作模式

本地模式: 类似cp 了解
Local: rsync [OPTION...] SRC... [DEST]
[root@backup ~]# rsync -avz backup.txt /opt/
远程模式: 类似scp (在有增量需求拷贝的时候或者有数据同步的要求才使用)
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC...[DEST]
拉取	命令	参数选项	用户@主机:源文件	路径		
拉取:类似从网盘进行下载
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
推送	命令	参数选项	源文件	 用户@主机:路径
rsync -avz 源文件 root@10.0.0.7:路径
推送: 类似将本地的文件上传到网盘

将web01服务器上的/root/oldboy目录拉取到backup的家目录
[root@backup ~]#rsync -avz 10.0.0.7:/root/oldboy /root/

将backup服务器上的oldboy目录推送到web01的家目录
[root@backup ~]#rsync -avz oldboy/ 10.0.0.7:/root/

Authorized users only. All activities may be monitored and reported.
root@10.0.0.7's password: 
sending incremental file list
./
1.txt
2.txt
3.txt
4.txt

sent 265 bytes  received 95 bytes  80.00 bytes/sec
total size is 0  speedup is 0.00

#注意rsync的目录后面加/表示拷贝目录下的文件 不加/表示拷
贝目录及下所有内容
[root@backup ~]# rsync -avz oldboy/ 10.0.0.7:/root/
Authorized users only. All activities may be
monitored and reported.
root@10.0.0.7's password:
sending incremental file list
./ # 不包含oldboy目录本身
1.txt
2.txt
3.txt
4.txt
[root@backup ~]# rsync -avz oldboy 10.0.0.7:/root/
Authorized users only. All activities may be
monitored and reported.
root@10.0.0.7's password:
sending incremental file list
oldboy/ # 包含了目录本身
oldboy/1.txt
oldboy/2.txt
oldboy/3.txt
oldboy/4.txt

#没有说明用户的时候 默认是使用当前登录的用户
[root@backup ~]# rsync -avz oldboy 10.0.0.7:/root/
当前命令未指明推送到10.0.0.7 那个用户 默认是当前backup 登录的root用户

推送时用户不存在 则推送失败 用户权限不足 也会推送失败

配置本地hosts 使用主机名执行rsync
[root@web01 ~]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.41   backup	

二、Rsync的参数选项

-a 				#归档模式传输, 等于-tropgDl
-v 				#详细模式输出, 打印速率, 文件数量等
-z 				#传输时进行压缩以提高效率
-r 				#递归传输目录及子目录,即目录下得所有目录
都同样传输。
-t 				#保持文件时间信息
-o 				#保持文件属主信息
-p 				#保持文件权限
-g 				#保持文件属组信息
-l 				#保留软连接
-P 				#显示同步的过程及传输时的进度等信息
-D 				#保持设备文件信息
-L 				#保留软连接指向的目标文件
-e 				#使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN 				#指定排除不需要传输的文件模式
--exclude-from=file 			#文件名所在的目录文件
--bwlimit=100 				 #限速传输
--partial 					#断点续传
--delete 					#让目标目录和源目录数据保持一致
--password-file=xxx 		 #使用密码文件
#使用--exclude 排除文件传输
[root@web01 ~]#rsync -avz oldboy/ backup:/root --exclude=123.txt
Authorized users only. All activities may be monitored and reported.
root@backup's password: 
sending incremental file list
./
hosts
passwd

# 排除多个文件
[root@web01 ~]#touch oldboy/{1..5}.txt
[root@web01 ~]#rsync -avz oldboy/ backup:/root --exclude={1..3}.txt

Authorized users only. All activities may be monitored and reported.
root@backup's password: 
sending incremental file list
./
4.txt
5.txt

#排除包含在文件中的文件
[root@web01 ~]#rsync -avz oldboy/ backup:/root/ --exclude-from=/opt/ex.txt 

Authorized users only. All activities may be monitored and reported.
root@backup's password: 
sending incremental file list
./
123.txt
4.txt
5.txt
hosts
passwd
[root@web01 ~]#cat /opt/ex.txt 
1.txt
2.txt
3.txt

#--bwlimit 限制带宽传输速度 1=1M/s
[root@web01 ~]#rsync -avzP oldboy/1g.txt backup:/root/ --bwlimit=1 

Authorized users only. All activities may be monitored and reported.
root@backup's password: 
sending incremental file list
1g.txt
     92,995,584   8%    1.01MB/s    0:15:26

#--delete 可以让两端服务器的内容保持一致
[root@web01 ~]#ll oldboy/
total 8
-rw-r--r-- 1 root root    0 Dec  3 14:59 123.txt
-rw-r--r-- 1 root root    0 Dec  3 15:11 1.txt
-rw-r--r-- 1 root root    0 Dec  3 15:11 2.txt
-rw-r--r-- 1 root root    0 Dec  3 15:11 3.txt
-rw-r--r-- 1 root root    0 Dec  3 15:11 4.txt
-rw-r--r-- 1 root root    0 Dec  3 15:11 5.txt
-rw-r--r-- 1 root root  178 Dec  3 14:45 hosts
-rw-r--r-- 1 root root 1845 Dec  3 14:45 passwd

[root@backup ~]#ll oldboy/
total 8
-rw-r--r-- 1 root root    0 Dec  3 14:59 123.txt
-rw-r--r-- 1 root root    0 Dec  3 15:11 4.txt
-rw-r--r-- 1 root root    0 Dec  3 15:11 5.txt
-rw-r--r-- 1 root root  178 Dec  3 14:45 hosts
-rw-r--r-- 1 root root 1845 Dec  3 14:45 passwd

#以backup服务器为准
[root@web01 ~]#rsync -avz backup:/root/oldboy/  oldboy/ --delete

Authorized users only. All activities may be monitored and reported.
root@backup's password: 
receiving incremental file list
deleting 3.txt
deleting 2.txt
deleting 1.txt
./


#以web01服务器为准
[root@web01 ~]#rsync -avz oldboy/ backup:/root/oldboy/ --delete 

Authorized users only. All activities may be monitored and reported.
root@backup's password: 
sending incremental file list
created directory /root/oldboy
./
123.txt
4.txt
5.txt
hosts
passwd

企业中使用方法

image-20241203153940649

三、 Rsync守护进程

主机角色外网IP(WAN)内网IP(LAN)主机名称
Rsync服务端10.0.0.41172.16.1.41backup
Rsync客户端10.0.0.7172.16.1.7web01

服务端

1.服务端安装rsync服务
[root@backup ~]#yum -y install rsync
2.服务端配置rsync
[root@backup ~]#rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd

[root@backup ~]#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
3.根据配置文件创建必要的数据信息
1.#创建rsync用户
[root@backup ~]#id rsync 
id: ‘rsync’: no such user
[root@backup ~]#useradd -M -s /sbin/nologin rsync
[root@backup ~]#id rsync 
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)

2.准备密码文件
[root@backup ~]#cat /etc/rsync.passwd
rsync_backup:123456
授权密码文件为600权限
[root@backup ~]#chmod 600 /etc/rsync.passwd 
[root@backup ~]#ll /etc/rsync.passwd 
-rw------- 1 root root 20 Dec  3 16:07 /etc/rsync.passwd

3.创建数据目录
[root@backup ~]#mkdir /backup
#rsync是以启动进程的用户身份往/backup目录中写入
[root@backup ~]#chown rsync.rsync /backup
[root@backup ~]#ll -d /backup/
drwxr-xr-x 2 rsync rsync 6 Dec  3 16:11 /backup/

4.服务端启动rsync服务
[root@backup ~]#systemctl start rsyncd
[root@backup ~]#systemctl enable rsyncd

#查看是否成功启动
[root@backup ~]#netstat -lnupt 
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      3110/rsync          
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      967/sshd: /usr/sbin 
tcp6       0      0 :::873                  :::*                    LISTEN      3110/rsync          
tcp6       0      0 :::22                   :::*                    LISTEN      967/sshd: /usr/sbin 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           631/chronyd         
udp6       0      0 ::1:323                 :::*  

客户端

客户端
需要使用守护进程模式的语法格式推送文件Push:rsync [OPTION...]SRC...[USER@]HOST::DEST
推送:rsync -avz /etc/passwd   rsync_backup@10.0.0.41::模块的名称
将web01的passwd推送到服务端的/backup目录
[root@web01 ~]#rsync -avz /etc/passwd rsync_backup@10.0.0.41::backup
Password: 
sending incremental file list
passwd
客户端参数选项: 密码文件——password-file=
创建密码文件
[root@web01 ~]#echo 123456 > /etc/pa.txt 
[root@web01 ~]#chmod 600 /etc/pa.txt 
[root@web01 ~]#rsync -avz /etc/hosts  rsync_backup@10.0.0.41::backup  --password-file=/etc/pa.txt 
sending incremental file list
hosts
rsync客户端的密码内置变量 临时生效 退出失效
[root@web01 ~]# export RSYNC_PASSWORD=123456
将目录拷贝到backup服务端
[root@web01 ~]#rsync -avz oldboy rsync_backup@backup::backup 

在web01上下载hosts文件到当前的目录
[root@web01 ~]#rsync -avz rsync_backup@backup::backup/hosts .
receiving incremental file list
hosts
[root@web01 ~]#ll
total 4
-rw-r--r-- 1 root root 178 Dec  3 14:41 hosts
drwxr-xr-x 2 root root  45 Dec  3 16:49 oldboy
需求: 上传到backup服务器的目录需要多个增加模块的名称即可
[root@backup ~]#vim /etc/rsyncd.conf 
#####################################
[backup]
path = /backup
[oo]
path = /data

创建/data 目录 并修改属主属组为
[root@backup ~]#chown rsync.rsync /data
[root@web01 ~]#rsync -avz  hosts rsync_backup@backup::oo 
sending incremental file list
hosts

案例

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/web01_172.16.1.7_2018-09-02 date +%F
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/web01_172.16.1.7_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器守护进程
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
#!/bin/bash
backup_dir=/backup/$(hostname)_$(hostname -I |awk '{print $2}')_$(date +%F)

mkdir -p $backup_dir

tar -zcf $backup_dir/backup_$(date +%F).tar.gz  /etc/passwd /etc/service /etc/hosts

export RSYNC_PASSWORD=123456

rsync -avz $backup_dir/ rsync_backup@backup::backup #--password-file=/opt/passwd 

find /backup/ -mtime +7 |xargs rm -rf

00 01 * * * root sh /server/scripts/bakcup.sh &> /dev/null
小棱
最后更新于 2024-12-24