rsync复制软件的应用与实践

rsync复制软件的应用与实践

1、什么是rsync?

Rsync英文全称为Remote sync hronization,缩写rsync
是开源、高速的、可实现本地以及远程,全量以及增量的数据复制(拷贝)工具。
官方链接资料:http://www.samba.org/ftp/rsync/rsync.html(教学翻译功能)

2、什么是全量和增量?

全量复制:傻傻的每次完整拷贝,如以下命令:

cp -a /etc/ /tmp/

增量复制:只拷贝变化的部分

rsync -avz /etc /tmp/

rsync首次全量,第二次就增量了。
rsync:是一个快速、多功能的文件复制工具。它特别适用于复制大量数据,可以本地复制,也可以到/从远程系统复制。

-a(archive): 归档模式,它等同于 -rlptgoD。它会递归地复制目录内容 (-r),并保持原有的文件权限 (-l)、时间戳 (-p)、组 (-g)、所有者 (-o)、设备文件以及特殊文件 (-D)。
-v(verbose): 输出详细的处理过程。这对于调试或查看命令执行的详细信息非常有用。
-z(compress): 在传输过程中压缩数据,以减少网络传输量。

/etc: 这是源目录的路径,/etc 是 Linux 系统中存储系统配置文件和目录的标准位置。

/tmp/: 这是目标目录的路径,/tmp 是一个用于存放临时文件的目录。

为什么要用rsync?

1)工作中需要定时/实时数据备份。
2)本地服务器目录、不同机器、
不同机房之间的数据备份。都可以用rsync完成。

生产案例:企业yum源和官方源之间数据传输就使用rsync

使用rsync同步Centos yum源

 rsync -av rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/ /var/ftp/centos7/x86_64/repodata/os
rsync -av rsync://mirrors.ustc.edu.cn/centos/7/extras/x86_64/ /var/ftp/centos7/x86_64/repodata/extras/
rsync -av rsync://mirrors.ustc.edu.cn/centos/7/updates/x86_64/ /var/ftp/centos7/x86_64/repodata/updates/

同步epel源

rsync -avz rsync://rsync.mirrors.ustc.edu.cn/repo/centos/ /var/ftp/centos7/x86_64/repodata/epel/

rsync功能特性

  • 支持拷贝普通文件与特殊文件,如链接文件,设备文件等。
  • 支持排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
  • 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变。
  • 可实现增量复制,既只复制发生变化的数据,因此数据传输效率很高。
  • 可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)。
  • 可以通过socket(进程方式)传输文件和数据(服务端和客户端)*。
  • 支持匿名或认证(无需系统用户)进程模式传输,安全的进行数据备份及镜像

增量复制原理

使用quick check算法,只对增量的部分复制,根据大小属性的变化进行复制。
Rsync使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法查找大小或上次修改时间已更改的文件。当快速检查表明不需要更新文件的数据时,其他保留属性的任何更改(根据选项的要求)都会直接在目标文件上进行。

#该算法查找大小或上次修改时间已更改的文件 *****

2.x比对差异后复制,3.x一边比对一边复制。

其他:
https://coolshell.cn/articles/7425.html

rsync三种工作模式介绍

本地(local)

rsync [OPTION...] SRC... [DEST]

rsync命令 参数选项 [源目录或文件] 目的目录或文件

拷贝实践

rsync -avz /etc /opt/ # 第一次同步全部复制 etc下所有文件同步到opt中
touch /etc/test.txt # 在etc下创建一个test.txt文件
rsync -avz /etc /opt/ # 再次同步 它只会复制test.txt到opt目录

查看属性

rsync /etc/hosts

保持属性不变

rsync -vzrtopg /etc/hosts /opt/ #rtopg==a

参数rtopg效果 等同于a
-v(verbose): 提供详细的处理过程输出,用于调试或查看命令执行的详细信息。

-z(compress): 在数据传输过程中压缩数据,这可以加快传输速度并减少网络负载。

-r(recursive): 递归地复制文件。对于单个文件来说,这个选项没有效果,因为 /etc/hosts 本身就是一个文件。

-t(times): 保留文件的时间戳。

-o(owner): 保留文件的所有者信息。

-p(perms): 保留文件的权限。

-g(groups): 保留文件的组信息。

/opt/ 是目标目录的路径,/opt 通常用于存放可选或第三方的软件包。

删除文件内容(只需把源文件为空内容文件即可)

rsync -avz /null.txt /etc/host # 把host文件内容清空 null.txt文件内容是空的

删除目录下所有文件

–delete: 删除目标目录中源目录不存在的文件,确保目标目录与源目录保持完全一致。

mkdir /null #生成空目录
sync -r --delete /null/ /opt/  # 清空了opt下所有文件

强调一个重点:适合rsync
null和null/区别,null是目录和目录下的内容,
null/只是目录下的内容,不含本身。

远程Shell模式

借助类似ssh隧道传输数据,适合不同的机器之间复制。异地拷贝,相当于scp,区别scp是远程全量拷贝)

pull,拉:从远端拉取到本地。

语法:

rsync	    [OPTION...]	[USER@]HOST:SRC...	             [DEST]
rsync命令	参数选项	[认证用户]@[主机地址]:[源路径]	 本地路径

push,推:从本地推到远端。

语法:
rsync	    [OPTION...]   SRC... 	 [USER@]HOST:[DEST]        
rsync命令	参数选项	本地路径 [认证用户]@[主机地址]:[目标路径]

push实践

没用隧道:
rsync -avz /etc/hosts root@172.16.1.31:/opt/ #加密传输,限制root。
rsync -avz /etc/hosts oldboy@172.16.1.31:/tmp/ #加密传输,限制root。
使用隧道:
rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.31:/opt/
rsync -avz /etc -e "ssh -p 22" oldboy@172.16.1.31:/tmp/

-e 指定通道 ssh ssh服务连接客户端 -p 22指定22端口。

拉的命令:

没用隧道:
rsync -avz  root@172.16.1.31:/opt/ /tmp #加密传输,限制root。
rsync -avz  oldboy@172.16.1.31:/tmp/  /tmp #加密传输,限制root。
使用隧道;
rsync -avz -e "ssh -p 22" root@172.16.1.31:/opt/ /tmp
rsync -avz -e "ssh -p 22" oldboy@172.16.1.31:/tmp/ /tmp

-e 指定通道 ssh ssh服务连接客户端 -p 22指定22端口。

远程Shell模式企业场景和实践:

1)配合SSH+免秘钥连接登录(单向从私钥到公钥),进行备份文件传输工作。 两台机器连接不需要密码了,rsync拷贝的时候自然随意拷贝了。

实践:nfs01作为主机操作
1.生成秘钥对

	ssh-keygen  #一路回车

2.把公钥拷贝到41服务器

	ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.41
 1)放到私钥的~/.ssh/下。
 2)公钥被改名为authorized_keys 
 3)authorized_keys 权限为600,~/.ssh/权限700

这样就可以实现免密码登录
实现了免密码数据传输。企业中利用定时任务等实现定时推送,或者使用实时复制工具sersync实现,数据的实时复制。

rsync守护进程模式

服务端配置

配置配置文件【/etc/rsyncd.conf】

rsync 守护进程的配置配置

cp /etc/rsyncd.conf{,.ori}
cat>/etc/rsyncd.conf<<EOF
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 600 
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to oldboyedu backup!
path = /backup/
EOF

cp /etc/rsyncd.conf{,.ori}:这个命令将现有的 rsyncd.conf 文件复制到一个名为 rsyncd.conf.ori 的备份文件中。大括号 {} 是一个 shell 参数扩展,用于创建备份文件名。

cat>/etc/rsyncd.conf<<EOF:这个命令开始一个 cat 命令,它将从一个 here document(以 EOF 标记结束的文本块)读取输入,并将其重定向到 /etc/rsyncd.conf 文件。

接下来的几行是 rsyncd.conf 文件的内容,它们设置了 rsync 守护进程的配置选项:

uid = rsync:设置运行 rsync 服务的用户的 ID。
gid = rsync:设置运行 rsync 服务的组的 ID。
use chroot = no:禁止使用 chroot 监狱,这可以避免一些潜在的权限问题。
max connections = 200:允许的最大连接数。
timeout = 600:连接超时时间。
pid file = /var/run/rsyncd.pid:rsync 守护进程的 PID 文件存放位置。
lock file = /var/run/rsync.lock:锁定文件的位置,用于防止多个实例同时运行。
log file = /var/log/rsyncd.log:日志文件的位置。
ignore errors:忽略 IO 错误并继续运行。
read only = false:允许写入同步。
list = false:禁止列出共享文件。
hosts allow = 172.16.1.0/24:允许的 IP 地址范围。
hosts deny = 0.0.0.0/32:明确拒绝的 IP 地址范围。
auth users = rsync_backup:定义了授权用户列表。
secrets file = /etc/rsync.password:指定了包含密码的文件。
[backup]:定义了一个名为 backup 的 rsync 模块。

comment = welcome to oldboyedu backup!:为模块提供描述性注释。
path = /backup/:指定了同步数据的本地路径。
EOF:标记 here document 的结束

备份的地点 /backup

创建备份目录

mkdir /backup -p

创建一个rsync用户

useradd -s /sbin/nologin -M rsync

授权rsync管理backup目录

更改 /backup 目录的所有权为rsync

chown -R rsync.rsync /backup

创建密码文件并设置权限

创建密码文件
文件名随意起,但是要和rsyncd.conf secrets file = /etc/rsync.password一致
格式:用户:密码
rsync_backup:oldboy123

echo "rsync_backup:oldboy123" >/etc/rsync.password 

设置权限

chmod 600 /etc/rsync.password 

启动rsync服务和检查

systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd

检查进程是否启动成功

 ps -ef|grep sync|grep -v grep #检查进程
 netstat -lntup|grep rsync #查看端口 端口为873

客户端配置

(2)在客户端服务器操作(任何一台机器),nfs01

配置认证密码文件并授权

echo "oldboy123" >/etc/rsync.password #只有密码,没有用户,密码和服务的配置相同。
chmod 600 /etc/rsync.password

守护进程模式,客户端rsync的命令语法

pull,拉:从远端拉取到本地。
语法1(常用):
rsync	    [OPTION...]	[USER@]HOST::SRC...	                 [DEST]
rsync命令	参数选项	[虚拟用户]@[主机地址]::[模块名]	     本地路径

语法2:
rsync	    [OPTION...]	rsync://[USER@]HOST::SRC...	              [DEST]
rsync命令	参数选项	rsync://[虚拟用户]@[主机地址]/[模块名]	 本地路径


push,推:从本地推到远端。
语法1(常用):                 
rsync	    [OPTION...]	  [DEST]        [USER@]HOST::SRC...	                 
rsync命令	参数选项	  本地路径      [虚拟用户]@[主机地址]::[模块名]	     

语法2:                    
rsync	    [OPTION...]	   [DEST]		rsync://[USER@]HOST::SRC...	             
rsync命令	参数选项	  本地路径		rsync://[虚拟用户]@[主机地址]/[模块名]	 

拉取实践

方法1

mkdir /data
rsync -avz rsync_backup@172.16.1.41::backup /data --password-file=/etc/rsync.password

方法2

rsync -avz rsync://rsync_backup@172.16.1.41/backup /data --password-file=/etc/rsync.password

推送实践

mkdir /data
rsync -avz  /data  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

方法2

rsync -avz  /data  rsync://rsync_backup@172.16.1.41/backup --password-file=/etc/rsync.password
  • 62
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值