Rsync简介

什么是rsync?

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。Rstync软件适用于unix/linux/windows等多种操作系统平台。

Rsync英文全称为Remotesynchronization,即远程同步。从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,Rsync还可以在本地主机的不通分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。此外,利用Rsync还可以实现删除文件和目录功能,这又相当于rm命令。

一个rsync相当于scp,cp,rm,并且优于他们每一个命令。

在同步备份数据时,默认情况下,Rsync通过其独特的”quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可以根据权限,属主等属性的变化同步,但需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。

Rsync2.x和rsync3.x差异

# CentOS5,rsync2.x对比方法,把所有的文件对比一遍,然后进行同步。
# CentOS6,rsync3.x对比方法,一边对比差异,一边对差异的部分进行同步。
rsync特性
# 支持拷贝特殊文件如链接文件,设备等。
# 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
# 可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。
# 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高。
# 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身对数据不加密)。
# 可以通过sockert(进程方式)传输文件和数据(服务端和客户端)。
# 支持匿名或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。 # 注意:需要注意拷贝的时候源目录加“/”和不加“/”的区别(加“/”表示只拷贝该目录之下的文件;不加“/”表示连该目录一起拷贝)
rsync应用场景

定时备份

# 可以通过crond + rsync 来实现

实时备份

# 可以通过inotify(sersync)+ rsync来实现

inotify使用

作为客户端命令,常用参数如下

inotify命令参数
# -avz      --多个参数的集合
# -v, --verbose 详细模式输出,传输时的进度等信息
# -z, --compress 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。
# -a,--archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
# -r,--recursive 对子目录以递归模式,即目录下所有目录有同样传输
# -t,--times,保持文件时间信息
# -o,--owner 保持文件属主信息
# -p,--perms 保持文件权限
# -g,--group 保持文件属组信息
# -P,--progress 显示同步的过程及传世时的进度等信息(大写的P)
# -D,devices 保持设备文件信息
# -l,--links 保持软链接
# -e,--rsh=COMMAND 使用的信道协议,指替代rsh的shell程序。例如:ssh
# -exclude=PATTERN指排斥不需要传输的文件模式
# --bwlimit=RATE 限速,默认是以kbit/s为单位
# --delete --删除(本地没有,远端也没有),让目标目录SRC和源目录数据DST一致,适用于两个目录完全一样
innotify的三种工作模式之本地模式

Rsync的本地模式,即将本地系统的文件或目录从一个目录移动到另外一个目录中,相当于一个系统命令来使用(不常用)。

命令格式

# rsync [OPTION...]SRC... [DEST]

Example

[root@jenkins data]# echo 1234 > test1.txt
[root@jenkins data]# ls
test1.txt
[root@jenkins data]# rsync /data/test1.txt /data/test2.txt
[root@jenkins data]# cat /data/test2.txt
1234
innotify的三种工作模式之shell模式

Rsync的远程shell模式,即将本地系统文件或目录从一台服务器传输向另外一台服务器,类似于scp命令。既可以推送数据到其他服务器,也可以下拉文件到本地。(该模式也不常用)

命令格式

# Pull: rsync[OPTION...] [USER@]HOST:SRC... [DEST]
# Push: rsync[OPTION...] SRC... [USER@]HOST:DEST

Example: 将一个文件传输到另一台服务器

[root@client data]# rsync -avz /data/test1.txt root@39.108.140.0:/root/
root@39.108.140.0's password:
sending incremental file list
test1.txt sent 97 bytes received 35 bytes 37.71 bytes/sec
total size is 5 speedup is 0.04 [root@server ~]# cat test1.txt
1234

Example: 将一台主机的文件下载到本地

[root@client data]# rsync -avz 39.108.140.0:/root/test1.txt /data/test3.txt
root@39.108.140.0's password:
receiving incremental file list
test1.txt sent 43 bytes received 97 bytes 56.00 bytes/sec
total size is 5 speedup is 0.04
[root@client data]# cat test3.txt
1234

加密传输(隧道传输)

Rsync的传输协议默认是不加密的明文传输,如果有加密传输文件的需求,可以自定义加密管道管道协议。使用参数:-e来指定相应的管道协议。

Example: 跨主机加密传输文件,指定ssh协议

[root@client data]# rsync -avz /etc/hosts -e 'ssh -p 22' root@39.108.140.0:
root@39.108.140.0's password:
sending incremental file list sent 43 bytes received 12 bytes 22.00 bytes/sec
total size is 211 speedup is 3.84 # -e 指定加密协议以及协议端口号

限速传输

Rsync的传输默认是不限速的,传输时可能会占用很大的网络带宽,影响业务正常使用。可以使用参数:-bwlimit来限制传输时的网络带宽

Example: 传输时限速为1M/s

[root@client data]# dd if=/dev/zero of=test bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00811283 s, 1.3 GB/s [root@client data]# seq 10 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1 # 不限速
[root@client data]# rsync -avz /data/test -e 'ssh -p 22' root@39.108.140.0:/data
root@39.108.140.0's password:
sending incremental file list
test sent 10,293 bytes received 35 bytes 2,950.86 bytes/sec
total size is 10,485,760 speedup is 1,015.27 # 限速
[root@client data]# rsync -avz /data/test -e 'ssh -p 22' --bwlimit=1 root@39.108.140.0:/data
root@39.108.140.0's password:
sending incremental file list
test sent 10,293 bytes received 35 bytes 826.24 bytes/sec
total size is 10,485,760 speedup is 1,015.27 # bwlimit的参数默认为1K bits/s

文件备份需要注意的事项

# 1. 备份需要考虑带宽限速(rsync,scp,ftp都有限速功能)
# 2. 备份需要选择业务低谷
innotify的三种工作模式之Daemon模式

Daemon,即守护进程。该模式是在一台rsync服务器上安装并运行一个rsync的服务进程,其他的客户端通过rsync命令上传文件到服务器中。该模式是rsync最常用的功能,用来做数据的定时或者实时备份,下面来具体安装和介绍daemon模式。

Daemon模式的安装与配置

环境清单
节点名 IP 软件版本 硬件 网络 说明
server 39.108.140.0 rsync-3.1.2 1C2G 阿里云 测试环境
Client 47.95.119.205 rsync-3.1.2 1C2G 阿里云 测试环境
安装
[root@server data]# yum -y install rsync
[root@server data]# rpm -qa |grep rsync
rsync-3.1.2-10.el7.x86_64
配置服务端

修改/etc/rsyncd.conf

该配置文件时rsync服务器端默认的配置文件,该文件默认不存在,需要自己手动创建!填入内容如下:

cat rsyncd.conf
uid = rsync # 配置用户,远端命令要使用rsync用户访问共享目录(访问目录的权限)
gid = rsync # 配置rsync服务程序的用户组
use chroot = no # 安全相关
max connections = 200 # 设置最大连接数
timeout = 300 # 设置超时时间
pid file = /var/run/rsyncd.pid # 定义进程文件
lock file = /var/run/rsync.lock # 定义锁文件
log file = /var/log/rsyncd.log # 定义日志文件
[backup] # 配置一个数据存储的模块
path = /data # 模块备份数据路径
ignore errors
read only = false
list = false
hosts allow = 47.95.119.205,172.25.1.0/24 # 配置登录权限,可以多个IP网段用逗号隔开
#hosts deny = 0.0.0.0/32
auth users = rsync_backup # 配置匿名服务登录用户(访问服务的权限)
secrets file = /etc/rsync.password # 配置匿名用户和密码文件
配置用户
# 创建用户名为rsync的用户,只让其运行程序,不给其登录系统的权限以及家目录
[root@server data]# useradd rsync -s /sbin/nologin -M
[root@server data]# tail -1 /etc/passwd
rsync:x:1001:1001::/home/rsync:/sbin/nologin
配置存储路径

创建目录/data,并将其所属用户和用户组修改为rsync,因为程序需要用rsync用户来访问这个目录,如果rsync没有权限访问该目录,那么客户端也无法上传文件到备份数据目录。命令如下:

[root@server data]# mkdir /data/ -p
[root@server data]# chown rsync:rsync /data/
[root@server data]# ls -ld /data/
drwxr-xr-x 2 rsync rsync 4096 Jul 29 23:12 /data/
配置虚拟用户文件

/etc/rsync.password

rsync有一个重要的特性,就是可以使用一个虚拟的用户(不是实际存在的用户)来访问系统服务。为了使用这个功能,我们需要创建一个虚拟的用户文件,该文件已经在rsyncd.conf配置文件里面的secrets file定义好了,是/etc/rsync.password文件

[root@server data]#  echo "rsync_backup:youmen" > /etc/rsync.password
[root@server data]# cat /etc/rsync.password
rsync_backup:youmen
[root@server data]# chmod 600 /etc/rsync.password
# 文件创建完成之后,需要修改文件的权限属性为600,否则程序无法正常运行
配置开机自启动
[root@server data]#  echo '/usr/bin/rsync --daemon' >> /etc/rc.local
[root@server data]# tail -1 /etc/rc.local
/usr/bin/rsync --daemon
配置客户端

/etc/rsync.password

相对于服务器端来说,客户端的配置很简单,只需要创建一个密码文件就行了。这个密码文件也是默认不存在,需要手动创建。

[root@client data]# echo "youmen" > /etc/rsync.password
[root@client data]# cat /etc/rsync.password
youmen
[root@client data]# chmod 600 /etc/rsync.password
[root@client data]# ls -l /etc/rsync.password
-rw------- 1 root root 7 Jul 29 23:29 /etc/rsync.password

使用rsync

启动并验证服务
[root@server data]# rsync --daemon
[root@server data]# ss -atnlp |grep 873
LISTEN 0 5 *:873 *:* users:(("rsync",pid=25230,fd=3))
LISTEN 0 5 :::873 :::* users:(("rsync",pid=25230,fd=5)) # 重启
[root@server data]# pkill rsync
[root@server data]# rsync --daemon
同步数据

命令格式

# 下载: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
# rsync [OPTION...]rsync://[USER@]HOST[:PORT]/SRC... [DEST] # 上传: rsync [OPTION...] SRC... [USER@]HOST::DEST
# rsync [OPTION...] SRC...rsync://[USER@]HOST[:PORT]/DEST
创建测试数据

客户端

[root@client data]# seq 10 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1
[root@client data]# ls
10.dat 2.dat 4.dat 6.dat 8.dat
1.dat 3.dat 5.dat 7.dat 9.dat

服务端

[root@server data]#  seq 2 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 0.000147976 s, 6.9 MB/s
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 9.5039e-05 s, 10.8 MB/s
[root@server data]# ls
1.dat 2.dat
下载数据测试

Example1


Rsync服务详解的更多相关文章

  1. 基于CentOS7.5的 Rsync 服务详解

    第1章 Rsync概述 1.1 Rsync基本概述 rsync是一款开源的备份工具,可以在不同服务器(主机)之间进行同步备份, 可实现完全备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用 ...

  2. 【转】SSH服务详解

    [转]SSH服务详解 第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Gro ...

  3. (转)SSH服务详解

    SSH服务详解 原文:http://www.cnblogs.com/clsn/p/7711494.html 第1章 SSH服务1.1 SSH服务协议说明SSH 是 Secure Shell Proto ...

  4. (转)Rsync命令详解

    Rsync命令详解 原文:http://blog.51cto.com/irow10/1826249 说明: Rsync是linux/Unix文件同步和传送工具.用于替代rcp的一个工具,rsync可以 ...

  5. rsync参数详解

    Rsync的参数详细解释 -v, --verbose 详细模式输出-q, --quiet 精简输出模式-c, --checksum 打开校验开关,强制对文件传输进行校验-a, --archive 归档 ...

  6. winxp计算机管理中服务详解

    winxp计算机管理中服务详解01 http://blog.sina.com.cn/s/blog_60f923b50100efy9.html http://blog.sina.com.cn/s/blo ...

  7. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  8. rsync指令详解

    rsync指令详解(更详细的看官方文档http://rsync.samba.org/ftp/rsync/rsync.html) [root@Centos epel]# rsync --help rsy ...

  9. WCF中队列服务详解

    WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...

随机推荐

  1. ip修改器

    哈哈,算法来源于网络... 源码:http://pan.baidu.com/s/11P0P9 参考:http://bbs.csdn.net/topics/370201571 http://bbs.cs ...

  2. 利用CSS变量实现炫酷的悬浮效果

    最近,我从 Grover网站 上发现以一个好玩儿的悬停动画,这个动画是将鼠标移动到订阅按钮上移动光标,会跟随光标实现相应的彩色渐变. 这个想法很简单,但是它能使这个按钮脱颖而出,人们一下子就注意到它了 ...

  3. 状压DP之学校食堂

    题目 传送们 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负 ...

  4. Oracle数据库期末总结

    目录 基础内容-服务相关 Oracle体系结构: 表空间与数据文件之间的关系: 内存结构(SGA ,PGA) 表空间(大题)(tablespace) 数据文件(大题)(.dbf) 控制文件,记录和维护 ...

  5. CSS(二)- 选择器 - 一定要搞懂的选择器优先级和权重问题

    css的优先级之前一直没怎么注意没当回事,总以为对同一元素靠后的渲染会覆盖前面的渲染,要是覆盖不了那就来个!important嘛.直到我那在学前端基础的后端伙伴拿一个问题问住了我,我才意识到这是重点中 ...

  6. Django框架01 / http协议、web框架本质

    Django框架01 / http协议.web框架本质 目录 Django框架01 / http协议.web框架本质 1.http协议 1.1 http协议简介 1.2 什么是http协议 1.3 H ...

  7. Controller怎么接收Ajax传来的data

    var json = { "VendorId": strVendorId, "VendorName": strVendorName, "Remark& ...

  8. 一、Python系列——函数的应用之名片管理系统

    card_list = [] def main_desk(): print('*'*50) print('欢迎使用[名片管理系统]V1.0') print('1.新建名片') print('2.显示全 ...

  9. OSCP Learning Notes - Post Exploitation(2)

    Windows Post Exploitation Target Server: IE8-Win 7 VM 1. Download and upload the fgdump, PwDump7, wc ...

  10. spring oauth2获取当前登录用户信息。

    使用spring oauth2框架做授权鉴定.想获取当前用户信息怎么办? 我们知道spring oauth2是基于spring security的实现的. spring security可以通过Sec ...