rsync 守护进程及实时同步

rsync简介

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

rsync官网

  • rsync监听端口:873
  • rsync运行模式:C/S client/server
  • rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量

rsync特性

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

rsync应用场景

  • 全量备份:全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝,耗时长。
  • 增量备份:增量备份是针对于上一次备份(无论是哪种备份)备份上一次备份后(包含全量备份、差异备份、增量备份)所有发生变化的文件,耗时短。
  • 差异备份:备份自上一次完全备份之后有变化的数据。差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,也即备份后不标记为已备份文件。换言之,不清除存档属性。差异备份是指在一次全备份后到进行差异备份的这段时间内,对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全备份和最后一次差异备份进行恢复。

概念参考:全量,增量,差异备份

区别与cpscp备份

cp命令

  • cp备份:本机复制

  • 格式:cp [选项] 源文件 目标文件

cp参数

参数 说明
-a 相当于 -d、-p、-r 选项的集合
-d 如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
-i 询问,如果目标文件已经存在,则会询问是否覆盖;
-l 把目标文件建立为源文件的硬链接文件,而不是复制源文件
-s 把目标文件建立为源文件的软链接文件,而不是复制源文件
-p 复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)
-r 递归复制,用于复制目录
-u 若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用
# cp的不是本文重点只举一个
# 创建一个示例目录
[root@m01 ~]# mkdir -p ./a/b/c/test.txt
[root@m01 ~]# cp -ar ./a /tmp/
[root@m01 ~]# ll /tmp/a/b/c/
total 0
drwxr-xr-x 2 root root 6 Dec 29 15:00 test.txt

scp命令

scp 命令用于 Linux 之间复制文件和目录,用于远程复制,是rcp的加强版,rcp不加密。scp可以加密

  • scp备份:远程复制

  • 格式:

    • scp [本地文件路径] 用户名@[服务器ip]:[远程文件路径] --- 推模式
    • scp 用户名@[服务器ip]:[远程文件路径] [本地文件路径] --- 拉模式
    # 简单示例(推模式)
    scp a.txt root@172.16.1.41:/opt/
  • 参数:

  scp【本地或远程文件的路径】【服务器用户名】@【服务器地址】:【远程或本地文件的路径】
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
  • 传输方式:

    • 格式在上面
    • push 推:本地上传到远程服务器
    • pull 拉:把远程服务器文件下载到本地
# 推模式:本地上传到远程服务器
[root@m01 tmp]# scp -r a root@172.16.1.41:/opt/
root@172.16.1.41's password:
# 查看
[root@backup ~]# ll /opt/
total 0
drwxr-xr-x 3 root root 15 Dec 29 15:12 a # 拉模式:把远程服务器文件下载到本地
[root@backup ~]# touch /opt/b.txt
[root@m01 ~]# scp root@172.16.1.41:/opt/b.txt ./
root@172.16.1.41's password:
b.txt 100% 0 0.0KB/s 00:00

cp命令和scp命令都只支持全量复制,rsync支持远程复制(全量)和增量复制

rsync的传输方式

  • push 推:客户端将数据从本地推送至服务端
  • pull 拉:客户端将数据从服务端拉取到本地

rsync的传输模式

  • 本地方式(类似于cp,不支持推送和拉取,只是单纯的复制)
  • 远程方式(类似于scp,又不同于scp),scp只支持全量备份,rsync支持增量备份和差异备份
  • 守护进程方式(客户端和服务端)

rsync实际使用

rsync命令

三种格式:

# 本地,没有推和拉模式
Local: rsync [OPTION...] SRC... [DEST] # 通过远程shell访问
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST # 通过rsync守护进程访问
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

参数表(OPTIONS SUMMARY)

参数 说明
-a 归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
-v 详细模式输出, 打印速率, 文件数量等
-z 传输时进行压缩以提高效率
-r 递归传输目录及子目录,即目录下得所有目录都同样传输
-t 保持文件时间信息(stat命令查看文件时间,a/m/ctime)
-o 保持文件属主信息
-g 保持文件属组信息
-p 保持文件权限
-l 保留软连接
-P 显示同步的过程及传输时的进度等信息
-D 保持设备文件信息
-L 保留软连接指向的目标文件
-e 使用的信道协议,指定替代rsh的shell程序
--append 指定文件接着上次传输中断处继续传输(断点续传)
--append-verify 使用参数续传(在断点续传之后,验证一下文件,如果不同,修复文件)
--exclude=PATTERN 指定排除不需要传输的文件
--exclude-from=[文件路径] 按照文件指定内容排除
--bwlimit=100 限速传输(单位:MB)
--delete 让目标目录和源目录数据保持一致
--password-file=[密码文件路径] 使用密码文件
--port 指定端口传输

案例

# -v :详细模式输出, 打印速率, 文件数量等
[root@m01 ~]# rsync -v ./b.txt root@172.16.1.41:/opt/
root@172.16.1.41's password:
b.txt sent 88 bytes received 35 bytes 82.00 bytes/sec
total size is 6 speedup is 0.05
[root@backup opt]# ll
total 4
-rw-r--r-- 1 root root 6 Dec 29 16:22 b.txt # -z :传输时进行压缩以提高效率
[root@m01 ~]# rsync -vz ./b.txt root@172.16.1.41:/opt/ # -r :递归传输目录及子目录,即目录下得所有目录都同样传
[root@m01 opt]# rsync -vzr ./a/ root@172.16.1.41:/opt/
root@172.16.1.41's password:
sending incremental file list
b/
b/c/
b/c/test.txt sent 151 bytes received 43 bytes 129.33 bytes/sec
total size is 0 speedup is 0.00 # -t:保持文件时间信息
[root@m01 opt]# rsync -trvz ./a root@172.16.1.41:/opt/ # -o :保持文件属主信息
# -g :保持文件属组信息
[root@m01 opt]# rsync -trvzgo ./a root@172.16.1.41:/opt/ # -p:保持文件权限
[root@m01 opt]# chmod 000 a/b/c/test.txt
[root@m01 ~]# rsync -vzrtgop ./a/b/c/test.txt root@172.16.1.41:/opt/ # -l:保留软连接
[root@m01 ~]# rsync -vzrtgopl ./* root@172.16.1.41:/opt/ # -P :显示同步的过程及传输时的进度等信息
[root@m01 opt]# rsync -vzrtgoplP /root root@172.16.1.41:/opt/ # -D:保持设备文件信息
[root@m01 dev]# rsync -vzrtgDopl /dev/tty1 root@172.16.1.41:/opt/ # -t -r -o -p -g -D -l参数可以用-a来替换
[root@m01 opt]# rsync -avzP ./* root@172.16.1.41:/opt/
root@172.16.1.41's password:
sending incremental file list
1.txt
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=6/7)
a/
a/1.txt -> 1.txt
a/b/
a/b/c/
a/b/c/test.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=0/7)
b/ sent 304 bytes received 81 bytes 256.67 bytes/sec
total size is 5 speedup is 0.01

rsync守护进程模式

服务端

  1. 安装rsync
[root@backup ~]# yum install -y rsync
  1. 修改配置文件

模块用于备份

[root@m01 ~]# vim /etc/rsyncd.conf
uid = rsync # 启动服务的用户id
gid = rsync # 启动服务的用户的组id
port = 873 # 服务默认监听端口
fake super = yes # 无须使用root用户启动
use chroot = no # 安全机制
max connections = 200 # 最大连接数
timeout = 600 # 超时时间
ignore errors # 忽略错误
read only = false # 只读权限
list = false # 查看模块列表
auth users = rsync_backup # 定义虚拟用户(rsync传输过程使用的用户)
secrets file = /etc/rsync.passwd # 定义虚拟用户的密码
log file = /var/log/rsyncd.log # 日志文件
#####################################
[backup] # 模块
comment = welcome to backup! # 模块备注
path = /backup # 路径
[linux]
comment = welcome to linux!
path=/tmp/linux
  1. 创建系统用户
[root@backup opt]# groupadd rsync -g 666
[root@backup opt]# useradd rsync -u 666 -g 666 -M -s /sbin/nologin -r
  1. 创建密码文件
# 密码自定义
[root@backup opt]# echo "rsync_backup:123456" > /etc/rsync.passwd
  1. 授权(必须授权为600)
[root@backup opt]# chmod 600 /etc/rsync.passwd
  1. 创建备份目录
[root@backup opt]# mkdir /backup
[root@backup opt]# mkdir /tmp/linux
  1. 目录授权
[root@backup opt]# chown rsync.rsync /backup/
[root@backup opt]# chown rsync.rsync /tmp/linux/
  1. 关闭防火墙和selinux
[root@backup opt]# systemctl disable --now firewalld
[root@backup opt]# setenforce 0
  1. 启动rsyncd服务
[root@backup opt]# systemctl start rsyncd

客户端

客户端传输的方式有以下三种,任选其一

方法一:自己输入密码
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::backup # 注:
# 1、rsync_backup : 虚拟用户,只在数据传输时使用
# 2、172.16.1.41 : backup服务端的IP
# 3、backup : 模块名称 方法二:设置密码文件,运行时读取
1、编写密码文件
[root@m01 ~]# echo "123456" > /etc/rsyncd.passwd 2、授权
[root@m01 ~]# chmod 600 /etc/rsyncd.passwd 3、连接
[root@m01 ~]# rsync -avzP --password-file=/etc/rsyncd.passwd ./* rsync_backup@172.16.1.41::linux 方法三:添加环境变量
1、定义环境变量
[root@m01 ~]# export RSYNC_PASSWORD=123456 2、同步
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::linux

rsync实时同步传输

rsync是不支持实时同步的,通常我们借助于inotify这个软件来实时监控文件变化,一旦inotify监控到文件变,则立即调用rsync进行同步。

  1. 安装inotify(装在客户端)
[root@m01 ~]# yum -y install inotify-tools
  1. inotify参数介绍
参数 作用
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
格式如
格式: 1、 %Xe 事件
2、%w 目录
3、%f 文件
-e 指定监控的事件 access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
open 打开
delete 删除
umount 卸载
  1. 开始监控

在m01中创建文件,修改文件和删除等都会被监控到

[root@m01 ~]# /usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /root
  1. 实时监控并同步

在m01中执行以下命令,会同步创建,到172.16.1.41中查看

[root@m01 ~]# /usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /root | while read line;do
cd /root
rsync -avzP --delete --password-file=/etc/rsyncd.passwd ./* rsync_backup@172.16.1.41::backup
done

rsync 守护进程及实时同步的更多相关文章

  1. CentOS 7 Sersync+Rsync 实现数据文件实时同步

    rsync+inotify-tools与rsync+sersync架构的区别? 1.rsync+inotify-tools inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪 ...

  2. CentOS 6.5 rsync+inotify实现数据实时同步备份

    CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync    remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...

  3. sersync+rsync实现服务器文件实时同步

    sersync+rsync实现服务器文件实时同步 一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.sersyn ...

  4. rsync+inotify实现数据实时同步

    rsync rsync是linux系统下的数据镜像备份工具.支持远程同步,本地复制,或者与其他SSH.rsync主机同步. 优点: 1).可以镜像保存整个目录树和文件系统.保存源目录整个目录树和文件系 ...

  5. sersync基于rsync+inotify实现数据实时同步

    一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192. ...

  6. Sersync+Rsync实现数据文件实时同步

    rsync+inotify-tools与rsync+sersync架构的区别1,rsync+inotify-tools只能记录下被监听的目录发生的变化(增删改)并没有把具体变化的文件或目录记录下来在同 ...

  7. Rsync和Sersync(企业实时同步方案)

    注:本文章依据参考文章中的信息资料结合自己的实践操作而成 一.实验环境介绍 系统版本:Cent OS 7.4 X64 内核版本:3.10.0-693.5.2.el7.x86_64 系统采用最小化安装, ...

  8. 利用inotify和rsync服务实现数据实时同步

    文件定时同步的实现: 利用rsync结合cron计划任务实现: rsync -av --delete /data/ 10.0.0.12:/back -a:保留文件属性 -v:显示过程 -delete: ...

  9. Rsync+inotify实现文件实时同步#附shell脚本

    强烈推荐先仔细看此文 https://segmentfault.com/a/1190000002427568 实验环境 centos 7.3 vm2:192.168.221.128 同步服务器 vm1 ...

随机推荐

  1. C++中Try Catch中的继承

    1.C++中Try Catch简介:我们编译运行程序出错的时候,编译器就会抛出异常.抛出异常要比终止程序灵活许多. 而C++异常是指在程序运行时发生的反常行为,这些行为超出了函数正常功能的范围.当程序 ...

  2. tomcat拦截特殊字符报400,如 "|" "{" "}" ","等符号的解决方案

    最近在做一个项目,需要对外暴露两个接口接收别人给的参数,但是有一个问题就是对方的项目是一个老项目,在传参数的时候是将多个字符放在一个参数里面用"|"进行分割,然而他们传参数的时候又 ...

  3. Scala(三)【函数式编程】

    目录 一.方法和函数 1.方法 1)基本语法 2)简化原则 3)方法参数 2.函数 3.方法和函数的区别 二.高阶函数 三.匿名函数 四.柯里化 五.闭包 一.方法和函数 1.方法 1)基本语法 de ...

  4. 商业爬虫学习笔记day4

    一.获取登录后页面信息的两种方法 1.第一种方法: 人为把有效cookies加到请求头中,代码如下 import urllib.request # 确定url url = "https:// ...

  5. iOS 的文件操作

    直接上操作 效果:将一张图片写入文件 (图片本身已经在Assets.xcassets里面了) 1.获取当前app的沙盒路径 NSString *documentPath = NSSearchPathF ...

  6. HongYun-ui搭建记录

    vue项目windows环境初始化 Element-ui使用 vue2 页面路由 vue SCSS 在VUE项目中使用SCSS ,对SCSS的理解和使用(简单明了) vue axios vue coo ...

  7. Give You My Best Wishes

    亲耐滴IT童鞋们: 感谢大家一直以来的支持,因为有你们的支持,才有我这么"拼"的动力!!爱你们哟 OC的学习已经告一段落,希望大家通过阅读这几篇浅薄的随笔,能够寻找到解决问题的方法 ...

  8. CentOS Linux下编译安装MySQL

    本文参考张宴的Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)[原创]完成.所有操作命令都在CentOS 6.4 64位操作系统下实践 ...

  9. SharedWorker实现多标签页联动计时器

    web workers对于每个前端开发者并不陌生,在mdn中的定义:Web Worker为Web内容在后台线程中运行脚本提供了一种简单的方法.线程可以执行任务而不干扰用户界面.此外,他们可以使用XML ...

  10. MySQL数据库如何查看数据文件的存放位置

    SHOW GLOBAL VARIABLES;