一.Rsync基本概述

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

二.Rsync简介

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

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

rsync监听端口:873

rsync运行模式:C/S

client/server

客户端/服务端

小提示:利用rsync还可以实现删除文件和目录的功能,这又相当于rm命令,一个rsync相当于scp、cp、rm,但是还优于他们的每一个命令。

三.Rsync的特性

1)支持拷贝特殊文件,如连接文件、设备等。 2)可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。 3)可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。 4)可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。 5)可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。 6)可以通过socket(进程方式)传输文件和数据(服务端和客户端)。 7)支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。

生产场景架构集群备份方案

1)借助cron+rsync把所有客户服务器数据同步到备份服务器。 2)针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案。 3)通过本地打包备份,然后rsync结合inotify应用把全网数统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果。 4)定期将IDC机房的数据 备份公司的内部服务器,防止机房地震及火灾问题导致数据丢失。 5)实时同步,解决存储服务器等的单点问题。

备份类型介绍

备份类型有两种,分别是完全备份和增量备份。

完全备份示意图如下:

增量备份示意图如下:

四.Rsync的应用场景

应用场景1:推

示意图如下:

应用场景2:拉

示意图如下:

应用场景3:大量数据备份场景

示意图如下:

应用场景4:异地备份

示意图如下:

Rsync的传输模式

Rsync有三种传输模式,分别是本地方式、远程方式、守护进程。

本地传输方式

类似于cp命令

    命令示例:[root@web01 ~]# rsync -avz file0801- /ml-/
命令语法:
#本地拷贝数据命令
Local: rsync [OPTION...] SRC... [DEST]
完整示例:
#在本地创建目录file0801-,在目录file0801-1里创建文件f1.txt,在本地创建目标目录ml-
[root@web01 ~]# mkdir file0801-
[root@web01 ~]# mkdir ml-
[root@web01 ~]# cd file0801-
[root@web01 file0801-]# touch f1.txt

#拷贝目录file0801-1至目录ml-1下
rsync -avz file0801- /ml-/

#检查结果
sending incremental file list
file0801-/
file0801-/f1.txt

sent bytes received bytes 324.00 bytes/sec
total size is speedup is 0.00
[root@web01 ~]# ll /ml-/file0801-
total
-rw-r--r-- root root Aug : f1.txt

远程方式

类似于scp命令

    命令示例:[root@web01 ~]# rsync -avz file0801- /ml-/
命令语法:
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
完整示例:
#推 push

#先在客户端web01创建要复制的目录及文件
[root@web01 ~]# mkdir tmp2
[root@web01 ~]# cd tmp2
[root@web01 tmp2]# touch f1{.txt,.log}

#接着在服务器端backup上创建目标目录
[root@backup ~]# mkdir tmp3

#拷贝客户端上的tmp2目录至服务器端的目录tmp3中
[root@web01 tmp2]# rsync -avz tmp2 root@172.16.1.41:tmp3/



#检查结果
客户端页面:
[root@web01 ~]# rsync -avz tmp2 root@172.16.1.41:tmp3/
root@172.16.1.41's password:
sending incremental file list
tmp2/
tmp2/f1.log
tmp2/f1.txt

sent bytes received bytes 90.40 bytes/sec
total size is speedup is 0.00


服务器端页面:(服务器端存在目录tmp2,表示已拷贝成功)
[root@backup ~]# cd tmp3
[root@backup tmp3]# ll
total
drwxr-xr-x root root Aug : tmp2
[root@backup tmp3]# cd tmp2
[root@backup tmp2]# ll
total
-rw-r--r-- root root Aug : f1.log
-rw-r--r-- root root Aug : f1.txt

完整示例:
#拉 pull


#先在服务器端backup上创建要复制的目录及文件
[root@backup ~]# mkdir tp10
[root@backup ~]# cd tp10
[root@backup tp10]# touch aa.txt

#再在客户端web01创建目标目录
[root@web01 ~]# mkdir f08
[root@web01 ~]# mkdir f09


#拉服务器端上的tp10目录至客户端的目录f08中
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10/ f08


#拉服务器端上的tp10目录至客户端的目录tp09中
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10 f09



#检查结果
加/的情况下,只拷贝目录里的内容(不包含目录)
客户端页面:
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10/ f08

root@172.16.1.41's password:
receiving incremental file list
./
aa.txt

sent bytes received bytes 42.86 bytes/sec
total size is speedup is 0.00


客户端页面:(客户端存在aa.txt,但没有目录tp10)
[root@web01 ~]# cd f08
[root@web01 f08]# ll
total
-rw-r--r-- root root Aug : aa.txt


不加/的情况下,拷贝目录整体(包含目录本身及目录里的内容)
客户端页面
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10 f09
root@172.16.1.41's password:
receiving incremental file list
tp10/
tp10/aa.txt

sent bytes received bytes 65.60 bytes/sec
total size is speedup is 0.00

[root@web01 ~]# cd f09
[root@web01 f09]# ll
total
drwxr-xr-x root root Aug : tp10 #只拷贝了tp10目录
[root@web01 f09]# cd tp10
[root@web01 tp10]# ll
total #tp10下的文件并没有拷贝过来

PS:注意: rsync不管是推还是拉,推送目录的时候带/和不带/

1.带/ :/etc/ 将etc目录里的所有内容(不包括目录),推过去或者拉过来

2.不带/:/etc 将etc目录整体(包括目录及目录里的所有内容)推过去或者拉过来

守护进程

步骤1、客户端、服务端安装rsync

客户端:   web01-10.0.0.7
[root@web01 ~]# yum install -y rsync
服务端:  backup-10.0.0.41
[root@backup ~]# yum install -y rsync

步骤2、进入服务端会话页面,进行如下操作

服务端页面:
1)先修改配置文件:
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port =
fake super = yes
use chroot = no
max connections =
timeout =
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[zls]
comment = welcome to oldboyedu backup!
path = /backup

配置文件详解:
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync                 #用户名
gid = rsync #用户组
port = #端口
fake super = yes #无需让rsync以root身份运行
use chroot = no #禁锢目录,不允许操作指定目录之外的目录
max connections = #最大连接数200
timeout = #超时时间600s 10分钟
ignore errors #忽略错误信息
read only = false #关闭只读,对备份数据可读写
list = false #不允许查看模块信息
auth users = rsync_backup #认证用户,定义虚拟用户作为连接认证用户
secrets file = /etc/rsync.passwd #认证用户的密码文件
log file = /var/log/rsyncd.log #日志文件
#####################################
#模块(任意名字都可以)
[zls] #定义模块信息
comment = welcome to oldboyedu backup! #注释信息(无关紧要)
path = /backup

===============================================================

)接着创建用户
[root@backup ~]# id rsync #检查用户是否存在
id: rsync: no such user
#创建用户(不允许登录,不创建家目录)
[root@backup ~]# useradd rsync -s /sbin/nologin -M


===============================================================

)创建一个备份目录
[root@backup ~]# mkdir /backup #创建目录backup
#授权rsync用户
[root@backup ~]# chown -R rsync.rsync /backup/


===============================================================

)创建虚拟用户及密码文件
[root@backup ~]# vim /etc/rsync.passwd
rsync_backup: #用户名:密码
[root@backup ~]# chmod /etc/rsync.passwd #授权


===============================================================

)启动rsync添加开机自启
[root@backup ~]# ll /usr/lib/systemd/system/rsyncd.service
-rw-r--r-- root root Apr : /usr/lib/systemd/system/rsyncd.service
[root@backup ~]# systemctl start rsyncd #启动rsyncd守护进程
[root@backup ~]# systemctl enable rsyncd #允许开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. )检查rsync 端口是否处于监听状态
[root@backup ~]# netstat -antup | grep
7) rsync 客户端仅需配置虚拟用户的密码,并授权为600安全权限
#方式一:适合终端执行指定用户密码文件
[root@backup ~]#  yum install rsync -y 
[root@backup ~]# echo " 123456 " >  /etc/rsync.pass
[root@backup ~]#  chmod 600 /etc/rsync.pass
#方式二:脚本使用
[root@backup ~]# export RSYNC_PASSWORD=123456

实战一:客户端推送backup目录下所有内容至rsync服务端
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup /backup/

实战二:客户端拉取rsync服务端backup模块数据至本地客户端的/backup 目录
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz rsync_backup@172.16.1.41::backup /backup/

实战三:rsync实现数据无差异同步
#拉取远端数据:远端与本地保持一致,远端没有本地有会被删除,造成客户段数据丢失
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz --delete rsync_backup@172.16.1.41::backup/ /data/

#推送数据到远端:本地与远端保持一致,本地没有远端会被删除,造成服务器端数据丢失
[root@backup ~]#  export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz --delete /date/ rsync_backup@172.16.1.41::backup/

实战四: rsync的Limit限速
#文件过大导致内部交换机带宽被沾满,导致用户的请求无法响应
[root@backup ~]#  export RSYNC_PASSWORD=123456
[root@backup ~]#  rsync -avz --bwlimit=1 rsync_backup@172.16.1.41::backup/ /data/ 

步骤3、进入客户端会话页面,进行如下操作

客户端页面:
#创建虚拟用户的密码文件
[root@web01 ~]# vim /etc/rsync.pass
1 #输入密码,对应服务器端密码文件中的密码
[root@web01 ~]# chmod 600 /etc/rsync.pass #授权

步骤4、在客户端页面,创建目录,并在该目录下批量创建文件

客户端页面:
[root@web01 ~]# mkdir /data #创建目录data
[root@web01 ~]# cd /data #切换到目录data
[root@web01 data]# touch file{1..50} #在目录data下批量创建50个文件

Rsync的推操作:

[root@web01 data]# rsync -avz /data/ rsync_backup@172.16.1.41::wangxiaogang
#将目录data推至服务器端      在守护进程中,不考虑加/或者不加/

Rsync的拉操作

[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::wangxiaogang rt
#将服务器端的模板目录拉至客户端的rt目录中     在守护进程中,不考虑加/或者不加/

Linux架构--------Rsync守护进程推和拉的更多相关文章

  1. Linux架构之Rsync守护进程推和拉

    第三十三章 Rsync服务 33.1)Rsync基本概述 rsync是一款开源.快速.多功能.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于Unix/linux/Window ...

  2. 【Linux】rsync 守护进程的配置

    环境 centos7.2 1.首先查看是否安装rsync的相关包 rpm -qa | grep rsync rsync-3.1.2-4.el7.x86_64 如果没安装就yum install rsy ...

  3. rsync 守护进程及实时同步

    目录 rsync 守护进程及实时同步 rsync简介 rsync特性 rsync应用场景 cp命令 scp命令 rsync的传输方式 rsync的传输模式 rsync实际使用 rsync命令 案例 r ...

  4. rsync 守护进程模式搭建 与常见报错

    守护进程模式搭建 1.环境准备 2.安装rsync(做备份的服务器都安装) [root@backup ~]# yum install -y rsync 3.服务端配置 [root@backup ~]# ...

  5. Linux学习之守护进程详解

    Linux系统守护进程详解                                                              ---转自:http://yuanbin.blog ...

  6. linux下的守护进程daemon

    什么是守护进程?其实感觉守护进程并没有什么明确的定义,只是守护进程有一些特征,这是它需要遵循的. 守护进程的第一个特征是长时间在后台运行的程序,并且主要是为了提供某种服务,而为了能够让服务尽可能随时都 ...

  7. linux shell脚本守护进程监控svn服务

    最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...

  8. linux下daemon守护进程的实现(以nginx代码为例)

    ngx_int_t ngx_daemon(ngx_log_t *log) { int fd; // 让init进程成为新产生进程的父进程: // 调用fork函数创建子进程后,使父进程立即退出.这样, ...

  9. Linux编程实现守护进程

    Linux 守护程序 守护进程(Daemon)它是在一个特定的过程的背景进行.它独立于控制终端的和周期性地执行某些任务或待某些事件.是一种非常实用的进程. Linux的大多数server就是用守护进程 ...

随机推荐

  1. Sensor在内核中的驱动框架【转】

    本文转载自:http://blog.csdn.net/armfpga123/article/details/52840370 内核中对sensor的抽象:drivers/sensors/sensors ...

  2. leetcode-mid-sorting and searching-34 Search for a Range

    mycode   63.98% class Solution(object): def searchRange(self, nums, target): """ :typ ...

  3. sklearn—无监督最近邻

    无监督最近邻 NearestNeighbors (最近邻)实现了 unsupervised nearest neighbors learning(无监督的最近邻学习). 它为三种不同的最近邻算法提供统 ...

  4. 在WCF程序中动态修改app.config配置文件

    今天在个WCF程序中加入了修改配置文件的功能.我是直接通过IO操作修改的app.config文件内容,修改后发现发现其并不生效,用Google搜了一下,在园子里的文章动态修改App.Config 和w ...

  5. -----------------解决天天模拟器不能连接adb命令

    cmd------输入adb connect 127.0.0.1:6555即可 查询日志:adb shell "logcat |grep OkHttp"

  6. Linux_系统时间管理

    目录 目录 时间管理 date指令 系统时间设置timedatectl指令 本地时间同步 时间服务器NTP RHEL6 RHEL7 计划任务 一次性计划任务 at指令 限制用户建立一次性计划任务 周期 ...

  7. 全局namespace与模块内的namespace

    declare global{ declare namespace xxx } 相当于 在一个js文件的顶级部分 declare namespace xxx 声明的都是全局的namespace, 如果 ...

  8. JS中设置cookie,读取cookie,删除cookie

    在开发时,碰到一个需求,需要保存一个表的信息(非隐私),希望下次打开还存在.于是想到用cookie,一番折腾完成.示例数据都是假的,打马赛克是怕泄密. 这个表取名为Data,为Array,每一行是一个 ...

  9. 如何在linux上部署vue项目

    安装nginx的前奏 安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 创建一个文件夹 cd /usr/ ...

  10. Java基础之 多线程

    一.创建多线程程序的第一种方式: 继承(extends) Thread类 Thread类的子类: MyThread //1.创建一个Thread类的子类 public class MyThread e ...