rsync同步远程复制学习
常用服务之rsync(1)
教程每周二、四、六更新
rsync概述
- 什么是rsync
- 全量同步:
- 增量同步:
- 为什么要是用rsync工作中需要定时/实时数据备份。本地服务器目录、不同机器、不同机房之间的数据备份。都可以用rsync完成。
- rsync实现增量同步的原理Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步CentOS5,rsync2.x比对方法,把所有的文件比对一遍,然后进行同步。CentOS6,rysnc3.x比对方法,一边比对差异,一边对差异的部分进行同步。
- rsync软件特性1)支持拷贝普通文件与特殊文件如链接文件,设备等。2)可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。tar zcvf backup_1.tar.gz /opt/data -exclude=jason 说明:在打包/opt/data时就排除了jason命名的目录和文件。3)可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。4)可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar -N)。将备份/home 目录自 2020-11-29 以来修改过的文件
将备份 /home 目录昨天以来修改过的文件tar -N 2020-11-29 -zcvf /backups/inc-backup$(date +%F).tar.gz /home
添加文件到已经打包的文件tar -rf all.tar *.mp4说明:这条命令是将所有.mp4的文件增加到all.tar的包里面去。-r是表示增加文件的意思。5)可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)6)可以通过socket(守护进程方式)传输文件和数据(服务端和客户端)。重点掌握7)支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup$(date +%F).tar.gz /home
- rsync应用场景
- 利用定时任务实现数据备份(crond+rsync)
- 利用实时同步方式实现数据备份(inotify/sersync+rsync)
rsync的基本使用
官方帮助文档(选读):https://www.samba.org/ftp/rsync/rsync.html老规矩,认识了rsync以后,我们来看rsync到底怎么使用。Linux系统默认是没有rsync这个命令的,我们需要安装它,按照如下命令操作(先不要管它是是什么,我们后面肯定会讲到,现在照做就行了):
yum -y install rsync
安装完成后,我们先来体验一下rsync的用法:
[root@rsync ~]# rsync -av /etc/passwd zhuo/passwd-bak
sending incremental file list
passwd
sent 1,452 bytes received 35 bytes 2,974.00 bytes/sec
total size is 1,360 speedup is 0.91
上面我们实现了把/etc/passwd文件备份到了 zhuo/passwd-bak文件。这是本地的文件备份到本地。我们再来看一个备份到远程主机的例子:
[root@rsync ~]# rsync -av /etc/passwd 10.0.0.136:/root/zhuo/passwd-bak
The authenticity of host '10.0.0.136 (10.0.0.136)' can't be established.
ECDSA key fingerprint is SHA256:aoXZq94KpE2Doc1auJGSA9YW2HT2T94jKtI31jYygf0.
ECDSA key fingerprint is MD5:c8:83:bf:57:6e:28:d9:39:2e:f2:3d:07:42:a5:1d:8b.
Are you sure you want to continue connecting (yes/no)? yes #第一次连接,需要手动输入yes
Warning: Permanently added '10.0.0.136' (ECDSA) to the list of known hosts.
root@10.0.0.136's password: # 默认root用户登录,需要输入root密码
sending incremental file list
sent 45 bytes received 12 bytes 8.77 bytes/sec
total size is 1,360 speedup is 23.86
推荐阅读
常用服务之rsync(2)
教程每周二、四、六更新
有了前面一篇文章的例子,我们就已经对rsync有了初步的认识,下面我们来看看详细用法:[root@rsync ~]# rsync
......
Usage: rsync [OPTION]... SRC [SRC]... DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
or rsync [OPTION]... [USER@]HOST:SRC [DEST]
or rsync [OPTION]... [USER@]HOST::SRC [DEST]
or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.
# 特别说明:
# USER@:当做远程同步操作时,需指明系统登录的用户名,如果不显示指定,默认为以 root 身份登录系统并完成同步操作
上面我们可以看到有7中命令模式(按照“Usage”从上到下的顺序介绍):
第一种:本地备份
第二种:把本地数据备份到远程主机
第三、四种:同第二种,只是和第二种登录认证时的验证方式不同。使用方式见“1.3rsync守护进程模式”【使用单个冒号(:),则默认使用 ssh 协议;反之,如果使用两个冒号(::)或rsync://,则使用 rsync 协议,这种方式要求rsync以守护进程的方式运行】
第五种:把远程机器上的数据备份到本地机器上
第六、七中:同第五种,只是和第五种登录认证时的验证方式不同。使用方式见“1.3rsync守护进程模式部署”【使用单个冒号(:),则默认使用 ssh 协议;反之,如果使用两个冒号(::)或rsync://,则使用 rsync 协议,这种方式要求rsync以守护进程的方式运行】
看完了几种使用方式,我们再来看看有哪些选项可以使用:
选项很多,我们只要掌握几个标注 为常用的选项即可。
我们来看几个实例:
# 使用-a选项
[root@nfs ~]# cd scripts/
[root@nfs scripts]# rsync -a /root/scripts root@10.0.0.22:/backup
root@10.0.0.22's password:
# 使用-av选项:此时会显示同步的文件的详细列表以及相关的统计数据
[root@nfs scripts]# rsync -av /root/scripts/ root@10.0.0.22:/backup/
root@10.0.0.22's password:
sending incremental file list # 下面展示同步了哪些文件
./
mirrors.sh
sent 580 bytes received 38 bytes 176.57 bytes/sec # 同步的数据量统计
total size is 465 speedup is 0.75
我们看一下对于软连接的处理:
# 创建一个软连接
[root@nfs scripts]# ls
mirrors.sh
[root@nfs scripts]# ln -s mirrors.sh soft_mirrors.sh
# 不使用和软连接相关的参数
[root@nfs scripts]# rsync -rv /root/scripts/ root@10.0.0.22:/backup/
root@10.0.0.22's password:
sending incremental file list
skipping non-regular file "soft_mirrors.sh" # 默认不备份软连接
mirrors.sh
sent 613 bytes received 83 bytes 278.40 bytes/sec
total size is 475 speedup is 0.68
# 我们再加上和软连接相关的参数:
[root@nfs scripts]# rsync -lrv /root/scripts/ root@10.0.0.22:/backup/
root@10.0.0.22's password:
sending incremental file list
mirrors.sh
soft_mirrors.sh -> mirrors.sh # 软连接也备份了
sent 162 bytes received 44 bytes 82.40 bytes/sec
total size is 475 speedup is 2.31
# 现在我们把上面的soft_mirrors.sh删除,重新创建一个软连接
[root@nfs scripts]# ln -s ../anaconda-ks.cfg soft_anaconda-ks
# 再次同步,请到10.0.0.22服务器上观察同步后的效果(ll查看),软连接没有被同步
[root@nfs scripts]# rsync -rv /root/scripts/ root@10.0.0.22:/backup/
思考题:上面最后一步,如果使用下面的命令,会发生什么现象:
[root@nfs scripts]# rsync -lrv /root/scripts/ root@10.0.0.22:/backup/
# 如果使用下面的命令,又会发生什么现象
[root@nfs scripts]# rsync -Lrv /root/scripts/ root@10.0.0.22:/backup/
强调一个重点:
适合rsyncnull和null/ 区别:
null是目录和目录下的内容,null/只是目录下的内容,不含本身。
推荐阅读
《一站式教程之集群架构》:
一文彻底搞懂IP地址知识(值得收藏的手册)
老司机:子网掩码我不怕,怕的是子网划分!
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
常用服务之rysnc(3)-rsync守护进程
教程每周二、四、六更新
rsync vs scp
两个都可以实现本地和异地备份。
scp无法备份大量数据
rsync可以实现边复制,边统计,边比较。
rsync守护进程模式
这是一种开启rsync服务端,等待客户端连接的方式。
环境介绍:
nfs:10.0.0.21 ,作为客户端rsync:10.0.0.22 , 作为服务端
-
安装rsync(服务端、客户端主机都需要)
yum install -y rsync
-
配置服务端:
编写配置文件/etc/rsyncd.conf
# 先备份
[root@rsync ~]# cp /etc/rsyncd.conf{,.ori}
# 再编辑
[root@rsync ~]# cat /etc/rsyncd.conf # 可以练习用cat命令写入文件
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
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 = 10.0.0.0/24 # 哪些主机可以访问
hosts deny = 0.0.0.0/32 # 哪些主机不可以访问
auth users = rsync_backup # 远程虚拟连接用户
secrets file = /etc/rsync.password
[backup] # 模块名,远程访问使用这个名字
comment = rsync learning(studyclub)
path = /backup/ # 服务端备份数据的保存位置,这个目录的用户和用户组是rsync和rsync【上面的uid和gid决定的】
创建用户和备份目录
# 创建用户
useradd rsync -M -s /sbin/nologin
# 创建备份目录并修改所有者
mkdir /backup -p
chown -R rsync.rsync /backup
启动rsync守护进程并设置为开机启动
[root@rsync ~]# systemctl start rsyncd
[root@rsync ~]# systemctl enable rsyncd
[root@rsync ~]# systemctl status rsyncd
# 检查进程启动情况
[root@rsync ~]# ps aux | grep rsync
root 55073 0.0 0.1 114744 1184 ? Ss 13:53 0:00 /usr/bin/rsync --daemon --no-detach
#检查端口
[root@rsync ~]# netstat -lntup | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 55073/rsync
tcp6 0 0 :::873 :::* LISTEN 55073/rsync
配置认证密码文件:
[root@rsync ~]# echo "rsync_backup:backup123" >/etc/rsync.password
[root@rsync ~]# chmod 600 /etc/rsync.password
至此,服务端配置完成。
配置客户端
创建认证密码文件:
[root@nfs ~]# echo "backup123" >/etc/rsync.password
[root@nfs ~]# chmod 600 /etc/rsync.password
至此,rsync全部配置完成。下一期我们开始使用。
推荐阅读
《一站式教程之集群架构》:
一文彻底搞懂IP地址知识(值得收藏的手册)
老司机:子网掩码我不怕,怕的是子网划分!
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
常用服务之rsync(4)
教程每周二、四、六更新
前面完成了rsync的配置,本文开始rsync的使用
守护进程方式下开始使用rsync
备份/etc/yum.repos.d/目录:[root@nfs ~]# rsync -avz /etc/yum.repos.d/ studyclub@10.0.0.136::backup --password-file=/etc/rsync.password
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
出师不利,第一个命令就报错。这是因为我们在命令中使用的登录用户不符合rsync服务端的设置(auth users = rsync_backup),我们必须使用服务端配置的用户名登录才可以,所以按照下面的命令执行:
[root@nfs ~]# rsync -avz /etc/yum.repos.d/ rsync_backup@10.0.0.136::backup --password-file=/etc/rsync.password
sending incremental file list
rsync: chgrp "." (in backup) failed: Operation not permitted (1)
......
rsync: chgrp ".CentOS-Vault.repo.q4sIHF" (in backup) failed: Operation not permitted (1)
rsync: chgrp ".CentOS-fasttrack.repo.IprI6D" (in backup) failed: Operation not permitted (1)
sent 3,651 bytes received 886 bytes 292.71 bytes/sec
total size is 11,598 speedup is 2.56
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
不好意思,又报错了。这是因为rsyncd不是以root身份运行的,所以有些文件属性未能备份。此时需要在服务端的配置文件中加一个配置项:fake su per = yes。这样就能保证在rsync没有以root身份运行也可以存储文件的全部属性。
再次执行上面的命令,成功:
[root@nfs ~]# rsync -avz /etc/yum.repos.d/ rsync_backup@10.0.0.136::backup --password-file=/etc/rsync.password
sending incremental file list
./
CentOS-Base.repo
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
CentOS-fasttrack.repo
sent 444 bytes received 274 bytes 46.32 bytes/sec
total size is 11,598 speedup is 16.15
所以,以后rsync的配置文件就可以保存下来,工作中可以直接用:
[root@rsync ~]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
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
fake super = yes
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
list = true
[backup]
comment = rsync learning(studyclub)
path = /backup/
[media]
comment = backup for media
path = /data/media_bak
rsync服务端排错思路
- 查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf
- 查看配置文件里host allow和host deny,允许的ip网段是否是客户端所在的网段
- 查看配置文件中path参数里的路径是否存在,权限是否正确。(正常应为配置文件中UID参数对应的属主和组)
- 查看rsync服务是否启动。查看命令为:ps -ef | grep rsync ;端口是否存在ss -lntu | grep 873
- 查看iptables和selinux是否开其允许rsync服务通过,也可以考虑关闭。
- 查看服务端rsync配置的密码文件是否为600权限,密码格式是否正确。【正确格式:用户名:密码】,文件路径和配置文件里的secrets file参数对应。
- 查看rsyncd.conf文件中,用户是否对模块下的目录有可读写的权限。比如前面例子中media模块,rsync用户对/data/media_bak目录是否有可读写的权限。
实例演示
增量同步
# 在前面的基础上,新增一个文件
[root@nfs ~]# dd if=/dev/zero of=/etc/yum.repos.d/jason bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00144228 s, 727 MB/s
# 再次同步
[root@nfs ~]# rsync -avz /etc/yum.repos.d/ rsync_backup@172.16.1.22::backup --password-file=/etc/rsync.password
sending incremental file list
./
jason # 我们可以看到这里仅仅推送了一个文件到服务端
sent 1,330 bytes received 46 bytes 917.33 bytes/sec
total size is 1,065,127 speedup is 774.07
排除某些文件同步
# 新建一个文件
[root@nfs ~]# touch /etc/yum.repos.d/file.txt
# 排除上面新创建的文件进行同步
# 方法1:
[root@nfs ~]# rsync -avz /etc/yum.repos.d/ rsync_backup@172.16.1.22::backup --password-file=/etc/rsync.password --exclude=*.txt
sending incremental file list
./
sent 259 bytes received 27 bytes 572.00 bytes/sec
total size is 1,065,127 speedup is 3,724.22
# 方法2:
[root@nfs ~]# rsync -avz /etc/yum.repos.d/ rsync://rsync_backup@172.16.1.22:/backup --password-file=/etc/rsync.password --exclude=*.txt
sending incremental file list
sent 252 bytes received 20 bytes 544.00 bytes/sec
total size is 1,065,127 speedup is 3,915.91
推荐阅读
《一站式教程之集群架构》:
一文彻底搞懂IP地址知识(值得收藏的手册)
老司机:子网掩码我不怕,怕的是子网划分!
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!