【linux】rsync服务部署

数据传输原理

1. 需要建立网络连接:TCP三次握手

2. 需要进行身份验证,客户端发送用户/密码信息;服务端需要对比用户文件信息进行验证

3. 数据传递后需要进行属组和属主信息变化,客户端文件属性统一变成服务端指定用户信息

数据增量备份原理

在数据远程传输之前需要进行数据对比。

两种对比方式:

1. 根据文件属性信息进行对比(权限信息 时间信息 大小信息)

2. 根据文件sha/md5算法进行数据对比,根据文件名称以及文件内容识别文件之间区别   

PS:

scp命令无法进行增量备份,scp每次传输/备份数据都是重新传输,当文件比较大的时候,会非常浪费时间。

rsync简介

1. rsync 是一个常用的 Linux 应用程序,用于文件同步。

2. 它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代 cp 和 mv 命令。

3. 它名称里面的 r 指的是 remote,rsync 其实就是"远程同步"(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。

语法格式:

Local:  rsync [OPTION...] SRC... [DEST]    --- rsync可以实现数据本地备份==cp

Access via remote shell:   rsync实现远程方式数据备份==scp
      Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]   -- 将远程数据拉取到本地主机上  将数据进行下载/恢复
              eg:rsync -avz root@172.16.1.41:/tmp/hosts /etc/
      Push: rsync [OPTION...] SRC... [USER@]HOST:DEST   --  将本主机数据推送到远程主机上 将数据进行上传/备份
              eg:rsync -avz /etc/hosts root@172.16.1.41:/tmp
 

Access via rsync daemon:
基于守护进程方式实现数据传输
      Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
              eg:rsync -avz rsync_backup@172.16.1.41::backup /etc/
              rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
      Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
                eg:rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup
                rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
                eg:rsync -avz /etc/selinux/config rsync://rsync_backup@172.16.1.41:888(端口号)/backup

常用参数:

-v, --verbose            increase verbosity
                                显示传输过程信息
-z, --compress         compress file data during the transfer
                                文件在传输时做压缩处理
-a, --archive             archive mode; equals -rlptgoD (no -H,-A,-X)
                                执行-a参数等价于执行-rlptgoD
-r, --recursive           recurse into directories
                                进行递归复制数据信息(可以实现目录传输)

-l, --links                  copy symlinks as symlinks (没有任何作用)
                                可以复制软链接文件
-L, --copy-links         transform symlink into referent file/dir
                                将链接文件所执行源文件信息做备份
-p, --perms              preserve permissions
                                维持权限属性信息不变
-t, --times                 preserve modification times
                                维持文件修改时间属性不变
-o, --owner               preserve owner (super-user only)
                                维持文件属主信息不变
-g, --group               preserve group
                                维持文件属组信息不变
-D                            same as --devices --specials
                                复制传输设备文件信息可以保持设备文件属性信息不变
-P                            same as --partial --progress
                                显示数据传输进度信息

--exclude=file          指定排除不需要传输的目标文件

--exclude-from=file  排除file中写的文件信息

--partial                    断点续传

--password-file        使用密码文件,实现免交互

--port=xxx(端口号)使用指定端口号

rsync服务端部署过程

1. 第一个历程:安装部署软件程序

[root@backup ~]# yum install -y rsync

2. 第二个历程:创建管理备份目录、数据用户信息

# 创建管理备份数据的用户
[root@backup ~]# useradd rsync -M -s /sbin/nologin   -- 创建虚拟用户 

3. 第三个历程:创建备份目录,并修改目录的属主和属组信息

[root@backup ~]# mkdir /backup               -- 创建备份目录
[root@backup ~]# chown rsync.rsync /backup   -- 修改目录的属主和属组

4. 第四个历程:创建用户列表文件(验证)

[root@backup ~]# echo rsync_backup:oldboy123 >/etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password   -- 修改权限信息

5. 第五个历程:编写配置文件

01. 查看rsync安装包配置文件在什么位置以及叫什么名字

[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd

02. 编辑配置文件/etc/rsyncd.conf(清空文件中内容,将以下文件粘贴进去)

[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200 
timeout = 300
pid file = /var/run/rsyncd.pid
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 = "backup dir by oldboy"
path = /backup

03. 配置文件解释

[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync                                                --- 指定rsync服务备份目录或数据信息管理用户信息
gid = rsync                                                --- 指定rsync服务备份目录或数据信息管理用户组信息
port = 873                                                 --- 指定服务程序端口信息(如果服务端端口号(xxx)改变,那么客户端使用该服务时端口号(xxx)也要相应改变。

                                                                      eg:rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup --port=xxx)
fake super = yes                                       --- 将uid指令指定的用户可以伪装为管理员用户
use chroot = no                                        --- 提高数据备份安全性,前提需要将备份目录权限与uid信息设置为root用户
max connections = 200                            --- 设置最大连接数
timeout = 300                                           --- 设置连接会话超时时间(闲置状态)
pid file = /var/run/rsyncd.pid                     --- 记录服务程序pid文件(进程号文件)
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            --- 用户密码文件(权限600 属组属主root)
[backup]                                                   ---  模块信息(可以有多个模块) 模块下面的信息称为局部配置信息
comment = "backup dir by oldboy"          --- 模块注释说明信息
path = /backup                                         --- 数据备份目录

6. 第六个历程:启动服务程序

# 启动rsync服务
[root@backup ~]# systemctl start rsyncd    
# 查看rsync服务进程(可以确认服务是否成功开启)  
[root@backup ~]# ps -ef |grep rsync           
root      10137      1  0 17:08 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root      10139  10113  0 17:09 pts/0    00:00:00 grep --color=auto rsync
# 查看端口号873的服务是否开启/查看服务名称为rsync的服务是否开启
[root@backup ~]# netstat -lntup|grep 873      -
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      10137/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      10137/rsync         

rsync客户端部署过程

1. 交互式实现数据传输:

[root@nfs01 ~]# rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
config

sent 362 bytes  received 43 bytes  90.00 bytes/sec
total size is 542  speedup is 1.34

2. 免交互式实现数据传输:

01. 方式一:在客户端创建建一个密码文件

[root@nfs01 ~]# echo oldboy123 >/etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
sending incremental file list
config

sent 362 bytes  received 43 bytes  810.00 bytes/sec
total size is 542  speedup is 1.34

02. 方式二:配置环境变量实现免交互(环境变量:RSYNC_PASSWORD)

# 编写环境变量(export + 普通变量 = 环境变量)
[root@nfs01 ~]# echo 'export RSYNC_PASSWORD="oldboy123"' >> /etc/profile

# 查看文件中是否有设置好的环境变量
[root@nfs01 ~]# tail -1 /etc/profile
export RSYNC_PASSWORD="oldboy123"

# 激活环境变量
[root@nfs01 ~]# . /etc/profile

# 测试数据传输是否是免交互式
[root@nfs01 ~]# rsync -avz /etc/selinux/config rsync_backup@172.16.1.41::backup
sending incremental file list
config

sent 362 bytes  received 43 bytes  810.00 bytes/sec
total size is 542  speedup is 1.34

补充:rsync服务在复制目录时和scp复制目录信息区别

1. rsync可以实现增量复制目录下面的数据信息,scp只能实现全量复制

2. 复制目录时,目录后面有/和没有/是有区别的

    scp复制目录时,目录后面加或者不加 / 都只是将目录本身进行复制
    rsync复制目录时,目录后面加 / 表示只将目录下面数据内容进行复制
    rsync复制目录时,目录后面没 / 表示将目录以及目录下面内容都进行复制  等价于scp

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小天才。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值