rsync复制软件应用于实践

rsync复制软件应用与实践

2020/3/6 学习日记 当前操作系统版本:Red Hat Enterprise Linux release 8.0 (Ootpa)

一、 Rsync理论知识学习

1.1 什么是rsync?
  • rsync(Remote synchronization)
  • 是一个开源、高速的,数据复制(拷贝)工具。
1.2 rsync的作用
  • 工作中需要定时/实时数据备份。本地服务器目录、不同机器、不同机房之间的数据备份。都是用rsync完成。
1.3 rsync功能特性
  • 支持拷贝普通文件与特殊文件,如链接文件,设备文件等。
  • 支持排除指定文件或目录的权限、时间、软硬件链接、属主、组等所有属性均不改变。
  • 可实现增量复制,即只复制发生变化的数据,因此数据传输效率很高。
  • 可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)。
  • 可通过socket(进程方式)传输文件和数据(服务端和客户端)。
  • 支持匿名或认证(无需系统用户)进程模式传输,安全的进行数据备份及镜像。
1.4 全量复制和增量复制的区别
  • 全量复制:复制一个文件到一个目录里,就算这个目录里已经存在了这个文件也会复制进来。
  • 就相当于多次使用cp -a /etc /opt
  • rsync的增量复制:在备份复制数据时rsync通过其独特的“quick check”算法,它仅复制大小或者最后修改时间发生变化的文件或者目录,当然也可根据权限,属主等属性的变化复制,但需要指定相应的参数,甚至可以实现只复制一个文件里有变化的内容部分,所以可以实现快速的备份复制数据,即采用增量复制方法对数据信息进行复制,与传统cp,scp拷贝工具的全量拷贝复制截然不同,增量复制数据,在效率上远远高于全量复制。

在rhel/CentOS5系统上,rsync

软件版本默认2.x,同步增量复制数据原理是把所有的文件比对一遍,然后再进行数据同步。在rhel/CentOS6、7、8系统上,rsync软件版本默认为3.x,增量复制数据原理是一边比对差异,一遍对差异的数据进行复制。从增量复制数据的效率上而言。rsync 3.x版本比rsync 2.x更有优势一些。

rsync底层代码原理,可以参考https://coolshell.cn/articles/7425.html


二、 rsync应用

2.1 查询版本
[root@nicy ~]# rsync --version
rsync  version 3.1.3  protocol version 31
2.2 rsync三种工作模式
Local:  rsync [OPTION...] SRC... [DEST]
 
Access via remote shell:
  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
 
Access via rsync daemon:
  Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
        rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
        rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
2.2.1 本地模式(local)

rsync就是一个命令:

1)把数据从一个地方拷贝到另一个地方(仅在一台机器增量),相当于cp。

[root@nicy ~]# rsync /etc/hosts /opt/
[root@nicy ~]# rsync -zrtopg /etc/hosts /opt/ #保持属性

2)通过参数实现清空的功能。

[root@nicy ~]# > /null.txt #创建一个空文件
[root@nicy ~]# rsync -r --delete /null.txt /opt/hosts #使/opt/hosts与/null.txt内容保持一致(清空目录同理)

3)查看属性信息功能,相当于ls -l。

[root@nicy ~]# rsync /opt
drwxr-xr-x             32 2020/03/07 06:31:22 opt
[root@nicy ~]# rsync /opt/
drwxr-xr-x             32 2020/03/07 06:31:22 .
-rw-r--r--              0 2020/03/07 06:31:22 hosts
2.2.2 远程shell模式(Access via remote shell)

借助类似ssh隧道传输数据,适合不同的机器之间复制。

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

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

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

rsync[OPTION…][DEST][USER@]HOST:SRC…
rsync命令参数选项本机路径[认证用户]@主机地址:目标路径…
2.2.3 守护进程模式 (Access via rsync daemon)

首先要搭建rsync服务端(要有守护进程),然后才能在客户端实现推拉数据。

企业运维的重要模式。

(1)rsync服务端配置:

编辑rsync的配置文件

[root@nicy ~]# cat >/etc/rsyncd.conf <<EOF
uid = rsync 
#管理备份用户的用户
gid = rsync
#管理备份用户的用户组
use chroot = no
#安全功能,数据是否锁定到备份目录
fake super = yes
#不使用root用户也能存储文件的完整属性
max connections = 200
#并发连接,同时多少客户端访问
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
#拒绝哪些主机不可以访问,和host allow二选一
auth users = rsync_backup
#远程虚拟连接用户
secrets file = /etc/rsync.password
#存放密码的文件:格式:用户名:密码 权限 必须600
timeout = 600
#超时时间
[backup]
#[模块名]远程访问使用模块名访问
       path = /backup/
       #服务器用户备份的目录,用户和组,rsync.rsync
       comment = welcome to joinlabs backup!
       #注释说明
EOF

[root@nicy ~]# useradd rsync
[root@nicy ~]# 
[root@nicy ~]# 
[root@nicy ~]# mkdir /backup
[root@nicy ~]# chown -R rsync.rsync /backup

启动检查

rsync --daemon (6及以前)
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd

添加rsync到防火墙

[root@nicy ~]# firewall-cmd --add-service=rsyncd --permanent 
success
[root@nicy ~]# firewall-cmd --reload
success

sebool值设置

[root@nicy ~]# getsebool -a |grep rsync
postgresql_can_rsync --> off
rsync_anon_write --> off
rsync_client --> off
rsync_export_all_ro --> off
rsync_full_access --> off

[root@nicy ~]# setsebool  rsync_client on

[root@nicy ~]# getsebool -a |grep rsync
postgresql_can_rsync --> off
rsync_anon_write --> off
rsync_client --> off
rsync_export_all_ro --> off
rsync_full_access --> on

检查

#检查进程
[root@nicy ~]# ps -ef |grep sync
root      21310      1  0 01:02 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root      21379  19823  0 01:02 pts/0    00:00:00 grep --color=auto sync
[root@nicy ~]# ps -ef |grep sync|grep -v grep
root      21310      1  0 01:02 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
#检查端口
[root@nicy ~]# netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      21310/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      21310/rsync         
[root@nicy ~]# lsof -i :873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   21310 root    3u  IPv4 157098      0t0  TCP *:rsync (LISTEN)
rsync   21310 root    5u  IPv6 157099      0t0  TCP *:rsync (LISTEN)
面试题:如何查看某个端口对应哪一个服务?

配置密码文件

[root@nicy ~]# echo "rsync_backup:joinlabs" > /etc/rsync.password
#"用户:密码" 虚拟用户不需要创建
[root@nicy ~]# chmod 600 /etc/rsync
rsyncd.conf     rsync.password  
[root@nicy ~]# chmod 600 /etc/rsync.password
[root@nicy ~]# ls -l /etc/rsync.password 
-rw-------. 1 root root 20 Mar  8 01:16 /etc/rsync.password

(2)服务端配置完成。

客户端配置:

方法一:

[root@localhost ~]# systemctl restart rsync.service 
[root@localhost ~]# echo "joinlabs" > /etc/rsync.password
[root@localhost ~]# chmod 600 /etc/rsync.password 
[root@localhost ~]# ls -l /etc/rsync.password 
-rw-------. 1 root root 9 Mar  8 08:54 /etc/rsync.password

方法二:

[root@localhost ~]# echo 'export RSYNC_PASSWORD=joinlabs' >> /etc/bashrc 
[root@localhost ~]# tail -1 /etc/bashrc 
export RSYNC_PASSWORD=joinlabs
[root@localhost ~]# . /etc/bashrc 

客户端配置完成。

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

配置服务器守护进程,实现数据传输:1、服务器守护进程;2客户端执行命令。

Pull,拉:从远端拉取到本地;

语法一:

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

语法二:

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

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

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

语法二:

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

注意双引号。

(4)测试成果

[root@clent ~]# rsync -avz /etc/redhat-release rsync_backup@10.0.0.123::backup --password-file=/etc/rsync.password 
sending incremental file list
redhat-release

sent 135 bytes  received 34 bytes  338.00 bytes/sec
total size is 45  speedup is 0.27

客户端按方法二配置不需要–password-file=/etc/rsync.password。

2.3 rsync选项说明
-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
-n --dry-run  :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
-a --archive  :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
-r --recursive:递归到目录中去。
-t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新
          :检查出mtime不同从而导致增量传输无效。
-o --owner:保持owner属性(属主)。
-g --group:保持group属性(属组)。
-p --perms:保持perms属性(权限,不包括特殊权限)。
-D        :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。
-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
-z        :传输时进行压缩提高效率。
-R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。用法见下文示例。
--size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
-u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
-d --dirs   :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。
--max-size  :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m")
--min-size  :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
--exclude   :指定排除规则来排除不需要传输的文件。
--delete    :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在
            :exclude/include规则生效之后才执行的。
-b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。
--backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
-e          :指定所要使用的远程shell程序,默认为ssh。
--port      :连接daemon时使用的端口号,默认为873端口。
--password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。
-W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
--existing  :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
--ignore-existing:要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能,见下文示例。
--remove-source-files:要求删除源端已经成功传输的文件。

企业常用参数组合:-avz或者 -vzrtopg。

rsync的选项非常多,能够实现非常具有弹性的功能,以上选项仅仅只是很小一部分常用的选项,关于更完整更详细的选项说明,rsync man手册翻译

2.4 rsync的功能应用扩展
2.4.1 排除指定目录和文件数据复制

操作准备

[root@clent ~]# mkdir /opt/{{a..z},{A..Z}}
[root@clent ~]# touch /opt/{{a..z},{A..Z}}/{1..9}
[root@clent ~]# tree /opt/
/opt/
├── a
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   ├── 5
│   ├── 6
│   ├── 7
│   ├── 8
│   └── 9
├── A
│   ├── 1
... ...

例题一:排除/opt里的N,i,c,y目录

#方法一:多选项
[root@clent ~]# rsync -avz /opt/ --exclude=N --exclude=i --exclude=c --exclude=y rsync_backup@10.0.0.123::backup --password-file=/etc/rsync.password

#方法二:不连续文件名可以用逗号分隔(推荐)
rsync -avz /opt/ --exclude={N,i,c,y} rsync_backup@10.0.0.123::backup --password-file=/etc/rsync.password

例题二:排除/opt里面的abcd目录

#连续名字用法
[root@clent ~]# rsync -avz /opt/ --exclude={a..d} rsync_backup@10.0.0.123::backup --password-file=/etc/rsync.password

例题三:排除/opt下每个目录里名为1,2,3,4,5的文件

#按文件内容排除
[root@clent ~]# seq 1 5 >no.txt
[root@clent ~]# cat no.txt 
1
2
3
4
5

[root@clent ~]# rsync -avz /opt/ --exclude-from=no.txt rsync_backup@10.0.0.123::backup --password-file=/etc/rsync.password
2.4.2 两端目录和文件数据一致性操作
慎用!!!

rsync作为镜像,相当于raid1,让两台服务器保持一致

–delete

推送:本地有啥,远端就有啥;

rsync -avz --delete /opt/ rsync_backup@10.0.0.123::backup --password-file=/etc/rsync.password

拉取:远端有啥,本地就有啥。

rsync -avz --delete rsync_backup@10.0.0.123::backup /opt/

2.4.3 断点续传和限速(了解即可)

--partial
--partial-dir=DIR
--bwlinit=KBPS
例题:某企业高峰期,DBA人员通过rsyn备份数据库上百G数据,导致带宽占满,用户反映无法打开公司网站。可以通过--bwlinit解决。

三、Rsync企业应用

3.1 rsync排错思路

排错必备思想:要对部署流程步骤熟练,熟悉rsync数据同步原理,并且要学会多看日志,rsync命令行输出的日志文件为/var/log/rsyncd.log。

排错能力练习:模拟错误,重视日常错误总结。

3.2 rsync服务端排错

查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf。

查看配置文件里host allow,host deny,允许的ip网段是否是允许客户端访问的ip网段。

查看配置文件中path藏书里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属主和组)。

查看rsync服务是否启动,查看命令为:ps -ef|grep rsync。端口是否存在netstat lnt|grep 873。

查看iptables防火墙和selinux是否开启允许rsync服务通过,也可以考虑关闭。

查看服务端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,正确格式用户名 密码,文件路径和配置文件里的secrect files参数对应。

如果是推送数据,要查看一下,配置rsyncd.conf文件中用户是否对模块下目录有可读可写的权限。

3.2.1 rsync服务端常见报错整理
3.3 rsync客户端排错思路
3.3.1 rsync客户端常见报错整理
3.4 Rsync复制工具的优缺点
3.4.1 Rsync的优点

增量备份,支持socket(daemon)守护进程模式,集中备份(支持推拉模式备份)。

远程SHELL通道模式还可以加密(SSH)传输;

socket(daemon)需要加密传输,可以利用vpn服务或ipsec服务。

3.4.2 Rsync的缺点

大量小文件复制的时候,rsync进程可能会僵死或效率不高。

一次性远程拷贝可以用scp,如果大量小文件可打成压缩包再拷贝。

3.5 Rsync服务安全
3.5.1 利用软件自身参数实现安全复制

rsync服务的安配置信息说明:

hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
#两个参数不能同时配置不然会导致安全策略冲突造成失效的情况
3.6 Rsync企业常用工作场景
3.6.1 服务器之间数据备份(手工或定时任务cron+rsync)

在集群架构中,搭建一台备份服务器,用于全网服务器的数据备份工作。利用手工或定时任务能将所有服务本地重要的数据定时备份到rsync备份服务器上。

该工作场景一般用于程序代码以及运维人员对系统的配置变更的备份。

3.6.2 两台服务器之间实时数据复制(实时任务inotify/sersync+rsync)

四 Rsync企业全网备份项目案例介绍与实践

4.1 项目前言介绍
4.2 项目需求说明

某公司有一台web服务器,里面的数据很重要,但如果数据坏了,数据就会丢失,现在领导要求把数据做备份,这样web服务器上的数据就可以进行恢复,要求如下:

每天晚上0点整web服务器A上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送到服务器B上备份保留(备份思路可以事先在本地按日期打包,然后再推送到备份服务器B上)。

已知3台服务器主机名为web01、backup、nfs01主机信息见下表:

全网备份主机信息表

服务器说明外网ip(nat)ssh内网ip(nat)交换数据用主机名
nginx web服务器10.0.0.7/24172.16.1.7/24web01
NFS存储服务器10.0.0.31/24172.16.1.31/24nfs01
rsync备份服务器10.0.0.41/24172.16.1.41/24backup

备份要求

每天晚上0点整再web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留。

备份思路

可以事先在本地按日期打包,然后再推送到备份服务器backup上;NFS存储服务器上web服务器实际工作中就是运维主要管理的全部服务器。

4.3 项目实战部署
4.3.1 服务器创建

初始化3台服务器,作为全网方案测试测试服务器,配置如下表:

服务器说明网络地址规划服务器系统信息主机名
nginx web服务器10.0.0.7/24CentOS Linux release 8.0web01
NFS存储服务器10.0.0.31/24172.16.1.31/24nfs01
rsync备份服务器10.0.0.41/24172.16.1.41/24backup
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值