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