实验需要两台虚拟机
如不会安装请参考https://www.jianshu.com/p/9f3eb5139d18
添加一块内网卡,先自行百度添加
Rsync介绍
什么是rsync?
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。
Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。
rsync监听端口:873
rsync运行模式:C/S
Rsync的功能
①支持拷贝普通文件与特殊文件,如链接文件,设备文件。
②支持排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
③可以做到保持原文件或目录的权限,时间,软硬链接,属主,组等所有属性均不改变。
④可实现增量复制,即只复制发生变化的数据,因此数据传输效率很高。
⑤可以使用rcp,rsh,SSH等方式来配合进行隧道加密传输文件
⑥可以通过socker传输文件和数据
⑦支持匿名或认证进程模式传输,安全地进行数据备份及镜像。
rsync工作方式介绍与实践
rsync有三种传输数据模式,具体介绍如下:
1.本地传输
类似cp 可实现文件目录移动备份
2.远程shell数据传输模式
远程shell数据传输模式一般是借助通道如ssh 在两台服务器之间进行复制数据,和两台服务器是对等的,没有客户端与服务端之分,整个过程类似与scp远程复制命令
3.守护进程传输模式
守护进程传输模式是在客户端与服务器之间进行数据复制,通常需要服务器端部署守护进程服务,然后在客户端执行命令,实现数据的拉取和推送复制。
本地数据传输模式
rsync | [option] | src | [dest] |
---|---|---|---|
rsync | 参数选项 | 源文件或文件 | 目的目录或文件 |
rsync #命令
[OPTION...] #选项
SRC... #远程主机模块(不是目录)
[USER@] #远程主机用户(虚拟用户)
HOST:: #远程主机地址
[DEST] #将远程主机模块备份至本地什么位置
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代 rsh 的 shell 程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--delete #让目标目录和源目录数据保持一致
(1) 本地复制(类似cp)
案例一:使用rsync实现本地文件的复制
root@backup ~#: cd /tmp
root@backup tmp#: ls
root@backup tmp#: rsync /etc/passwd /tmp/
root@backup tmp#: ls
passwd
案例二:使用rsync实现本地目录复制
root@backup tmp#: mkdir oldboy
root@backup tmp#: touch oldboy/{1..5}.txt
root@backup tmp#: ls oldboy/{1..5}.txt
oldboy/1.txt oldboy/2.txt oldboy/3.txt oldboy/4.txt oldboy/5.txt
root@backup tmp#: rsync -r oldboy /root/
root@backup tmp#: cd
root@backup ~#: ls
oldboy
root@backup ~#: ls oldboy/
1.txt 2.txt 3.txt 4.txt 5.txt
(2) 查询数据(类似ls)
root@backup tmp#: rsync /etc/hosts
-rw-r--r-- 158 2013/06/07 22:31:32 hosts
root@backup tmp#: rsync oldboy/
drwxr-xr-x 71 2020/01/13 16:15:21 .
-rw-r--r-- 0 2020/01/13 16:15:21 1.txt
-rw-r--r-- 0 2020/01/13 16:15:21 2.txt
-rw-r--r-- 0 2020/01/13 16:15:21 3.txt
-rw-r--r-- 0 2020/01/13 16:15:21 4.txt
-rw-r--r-- 0 2020/01/13 16:15:21 5.txt
远程shell数据传输语法
远程分为推拉两种
拉取
rsync | [option] | user@host:src | [dest] |
---|---|---|---|
rsync | 参数选项 | 认证用户@主机地址:源路径 | 本地路径 |
推送
rsync | [option] | [dest] | user@host:src |
---|---|---|---|
rsync | 参数选项 | 本地路径 | 认证用户@主机地址:源路径 |
数据传输实践
实践一:拉取模式 从远程服务端把/etc/hosts 复制到本地/tmp
root@backup ~#: rsync -av -e 'ssh -p 22' root@172.16.1.31:/etc/hosts /root
root@172.16.1.31's password:
receiving incremental file list
hosts
sent 43 bytes received 243 bytes 81.71 bytes/sec
total size is 158 speedup is 0.55
root@backup ~#: ls
hosts oldboy
实践二:推送模式 把本地服务器/etc/passwd 复制到远程主机的/root下
root@backup ~#: rsync -av /etc/passwd root@172.16.1.31:/root
root@172.16.1.31's password:
sending incremental file list
passwd
sent 1,187 bytes received 35 bytes 349.14 bytes/sec
total size is 1,095 speedup is 0.90
root@nfs ~#: ll
总用量 4
-rw-r--r-- 1 root root 1095 1月 3 16:35 passwd
守护进程传输模式
拉取模式
rsync | [option] | user@host:src | [dest] |
---|---|---|---|
rsync | 参数选项 | 认证用户@主机地址 端口 / 远端模块名 | 目的地 |
推送模式
rsync | [option] | src | user@host::dest |
---|---|---|---|
rsync | 参数选项 | 源路径 | 认证用户 @ 主机地址 :: 远端模块名 |
部署前准备工作
root@backup ~#: cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
root@backup ~#: uname -r
3.10.0-1062.el7.x86_64
root@backup ~#: uname -m
x86_64
root@backup ~#: rpm -qa rsync
rsync-3.1.2-6.el7_6.1.x86_64
主机信息
主机名 | 网卡eth0 | 网卡eth2 | 用途 |
---|---|---|---|
nfs | 10.0.0.31/24 | 172.16.1.31/16 | NFS存储服务器 |
backup | 10.0.0.41/24 | 172.16.1.41/16 | rsync存储服务器 |
配置rsyncd.conf
root@backup ~#: vim /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = rsync
gid = rsync
fake super = yes
use chroot = no
max connections = 200
timeout = 900
pid file = /var/run/rsync.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
ignore errors
read only = false
list = false
host allow = 172.16.1.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to oldboyedu backup!
path = /backup/
配置文件解释
uid = rsync 用户名
gid = rsync 用户组
fake super = yes 允许不已root身份运行,就可以改变文件属性
use chroot = no 禁锢推送的数据至某个目录, 不允许跳出该目录
max connections = 200 最大连接数
timeout = 900 超时时间
pid file = /var/run/rsync.pid 将进程pid写入此文件
lock file = /var/run/rsync.lock 指定lock文件用来支持最大连接次数
log file = /var/log/rsync.log 输入日志信息
ignore errors 忽略I/O错误
read only = false 上传文件
list = false 允许查看可用模块列表
host allow = 172.16.1.0/24 指定ip
auth users = rsync_backup 可使用模块
secrets file = /etc/rsync.password 指定密码存放文件
[backup] 模块名
path = /backup/ 模块对应文件路径
配置用于数据备份的目录
如果配置文件配置了path=/backup 这里的/backup备份目录默认不存在需创建
root@backup ~#: useradd rsync -s /sbin/nologin -M 创建用户
root@backup ~#: mkdir -p /backup 创建模块对应目录
root@backup ~#: chown -R rsync.rsync /backup 给目录授权为rsync用户
配置用于rsync复制的账号 密码 及账号文件权限
root@backup ~#: echo 'rsync_backup:oldboy' >/etc/rsync.password 将账号和密码写入文件
root@backup ~#: chmod 600 /etc/rsync.password 文件必须为600权限
启动rsync服务
systemctl start rsyncd 启动服务
systemctl enable rsyncd 开机自启
systemctl status rsyncd 检查启动状态和开机自启动状态
rsync客户端操作
root@nfs ~#: echo 'oldboy' >/etc/rsync.password 密码必须和服务器相同
root@nfs ~#: chmod 600 /etc/rsync.password 授权600
测试数据传输
推送
root@nfs ~#: rsync -avzP /etc rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
······发送内容省略·······
sent 48,666 bytes received 655 bytes 98,642.00 bytes/sec
total size is 27,801,952 speedup is 563.69
root@backup backup#: ls
etc
拉取
rsync -avz rsync_backup@172.16.1.41::backup /opt/ --password-file=/etc/rsync.password
参数选项解释
-a 保持文件属性
-z 传输的数据进行压缩
-P 显示进度信息
-v 详细传输情况
拓展
在添加一个模块
对应模块创建目录
授权
在重启服务(每更改一次配置文件就要重启一次)
报错
1.检查密码文件权限是否为600
2.检查配置文件用户属主是否为root,不需要改成普通用户
3.密码文件是否写错
网友评论