rsync 与 inotify 的使用 & 实现实时同步备份
今日内容
- rsync
内容详细
上一篇内容问题
1、yum源问题
2、VPN链接正常,但是没办法通过172
3、VPN链接时,出现了DNS错误
4、掩码不对
5、openvpn开启错误
复制的命令
1、cp
本机复制:
只能在本地计算机中复制目录
2、scp
# ssh 自带的命令
远程复制:
可以上传文件到远程服务器,有两种复制方式
1、推(本地上传到远程服务器):
scp <文件路径> <登录用户>@<ip>:<目标路径>
[root@m01 ~]# scp 1.txt root@172.16.1.41:/opt
root@172.16.1.41's password:
1.txt 36% 109MB 27.6MB/s 00:06 ETA
2、拉(把远程服务器文件下载到本地):
scp root@192.168.15.41:/opt/1.txt 2.txt
[root@m01 ~]# scp root@172.16.1.41:/opt/1.txt 2.txt
root@172.16.1.41's password:
1.txt 72% 217MB 73.1MB/s 00:01 ETA
缺点 : 只能全量复制(数据要一次全部传输完)
只支持全量复制 1TB 1GB
3、rsync
支持增量复制(可以进行断点续传)
下文详细介绍
用于全量备份、增量备份
rsync 介绍
rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
rsync官方地址:https://rsync.samba.org/
rsync监听端口:873
rsync运行模式:C/S client/server
rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量
rsync 特性
1、支持拷贝特殊文件,如连接文件、设备等。
2、可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
3、可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
4、可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
5、可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
6、可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。
7、支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
rsync 的传输方式
push 推:
客户端将数据从本地推送至服务端
pull 拉:
客户端将数据从服务端拉取到本地
rsync 的传输模式
1.本地方式(类似于cp,不支持推送和拉取,只是单纯的复制)
2.远程方式(类似于scp,又不同于scp),scp只支持全量备份,rsync支持增量备份和差异备份
3.守护进程方式(客户端和服务端)
rsync 的使用(参数)
1、普通参数
-a
#归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
rsync -avzP ./* root@172.16.1.41:/opt
-v
# 详细模式输出, 打印速率, 文件数量等
rsync -v init.sh root@172.16.1.41:/opt
[root@m01 ~]# rsync -v init.sh root@172.16.1.41:/opt
root@172.16.1.41's password:
init.sh
sent 4,630 bytes received 35 bytes 1,866.00 bytes/sec
total size is 4,542 speedup is 0.97
-z
#传输时进行压缩以提高效率
[root@m01 ~]# rsync -vz ./2.txt root@172.16.1.41:/opt/
-r
#递归传输目录及子目录,即目录下得所有目录都同样传输。
[root@m01 ~]# rsync -vzr ./a root@172.16.1.41:/opt/
-t
#保持文件时间信息
[root@m01 ~]# rsync -vzrt ./a/b/c/2.txt root@172.16.1.41:/opt/
-o
#保持文件属主信息
[root@m01 ~]# rsync -vzrto ./a/b/c/2.txt root@172.16.1.41:/opt/
-g
#保持文件属组信息
[root@m01 ~]# rsync -vzrtgo ./a/b/c/2.txt root@172.16.1.41:/opt/
-p
#保持文件权限
[root@m01 ~]# rsync -vzrtgop ./a/b/c/2.txt root@172.16.1.41:/opt/
-l
#保留软连接
-P
#显示同步的过程及传输时的进度等信息
-D
#保持设备文件信息
-L
#保留软连接指向的目标文件
-e
#使用的信道协议,指定替代rsh的shell程序
2、重要参数
--append
# 指定文件接着上次传输中断处继续传输
rsync -avzP --append-verify -exclude=2 --bwlimit=10 ./* root@172.16.1.41:/opt
[root@m01 ~]# rsync -avzP --append-verify --exclude=2 --bwlimit=10 ./* root@172.16.1.41:/opt
root@172.16.1.41's password:
sending incremental file list
1.txt
152,174,592 48% 9.87MB/s 0:00:16 ^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(638) [sender=3.1.2]
rsync: [sender] write error: Broken pipe (32)
[root@m01 ~]# rsync -avzP --append-verify --exclude=2 --bwlimit=10 ./* root@172.16.1.41:/opt
root@172.16.1.41's password:
sending incremental file list
1.txt
173,304,020 55% 71.73MB/s 0:00:01
--append-verify
# 使用参数续传(在断点续传之后,验证一下文件,如果不同,修复文件)
--exclude=PATTERN
# 指定排除不需要传输的文件
--exclude-from=file
# 按照文件指定内容排除
--bwlimit=100
# 限速传输(单位:MB)
--delete
# 让目标目录和源目录数据保持一致
--password-file=xxx
# 使用密码文件
--port
# 指定端口传输
rsync 守护进程模式
概念
正常我们备份数据,都需要自己手动使用备份命令把本地数据上传到备份服务器中
# 守护进程模式
就是在本地机产生文件数据之后,可以实时同步到备份服务器中,无需手动操作
前提 : 在服务端(存放备份服务器 backup)和客户端(需要备份数据的服务器)都要装上 rysnc 软件
系统用户 : rsync(启动 rsync 软件的系统用户)
虚拟用户 : rsync (同步数据时使用的用户)
1、服务端( backup )
1、安装 rsync 软件
[root@backup ~]# yum install -y rsync
2、修改 rsync 的配置文件(rsyncd.conf)
uid = rsync # 系统用户
gid = rsync # 用户组
port = 873 # 默认监听端口
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup # 虚拟用户
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
3、创建系统用户组 和 系统用户( rsync )
groupadd rsync -g 666
useradd rsync -u 666 -g 666 -M -s /sbin/nologin -r (-s 指定解析器 /sbin/nologin)
4、创建虚拟用户密码文件
# 虚拟用户的密码文件存放密码格式 : 虚拟用户名:密码
echo "rsync_backup:123456" > /etc/rsync.passwd
5、密码文件授权( 600 )
chmod 600 /etc/rsync.passwd
6、创建备份目录
mkdir /backup
mkdir /tmp/linux
7、备份目录授权(修改目录的所属主和所属组,让 rsync 用户可以使用这两个目录文件)
chown rsync.rsync /backup
chown rsync.rsync /tmp/linux
8、关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
9、启动 rsync 服务
systemctl start rsyncd
# 注意是启动 rsyncd
2、客户端(跳板机中,需要备份数据的服务器)
方法一 : 自己输入密码
rsync -avzP ./* rsync_backup@172.16.1.41::backup
# 注意 : 备份模块 backup,模块就是指定备份的路径
rsync_backup : 虚拟用户,只在数据传输时使用
172.16.1.41 : backup服务端的IP
backup : 模块名称
# 请注意 : 密码已经改成 123456 ,不要输错密码
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
1.txt
314,572,800 100% 99.00MB/s 0:00:03 (xfr#1, to-chk=9/10)
2 -> a/b/c/2.txt
2.txt
314,572,800 100% 95.66MB/s 0:00:03 (xfr#2, to-chk=7/10)
方法二 : 设置密码文件,运行时读取
1、编写密码文件
[root@backup opt]# echo "123456" > /etc/rsync.passwd
2、授权
[root@m01 ~]# chmod 600 /etc/rsync.passwd
3、连接(需要指定密码文件)
--password-file=/etc/rsync.passwd
rsync -avzP --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::linux
[root@m01 ~]# rsync -avzP --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::linux
sending incremental file list
1.txt
314,572,800 100% 114.58MB/s 0:00:02 (xfr#1, to-chk=9/10)
2 -> a/b/c/2.txt
2.txt
147,881,984 47% 70.55MB/s 0:00:02
方法三 : 添加环境变量
1、定义环境变量
export RSYNC_PASSWORD=123456
2、同步
rsync -avzP ./* rsync_backup@172.16.1.41::linux
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::linux
sending incremental file list
1.txt
314,572,800 100% 117.04MB/s 0:00:02 (xfr#1, to-chk=9/10)
2 -> a/b/c/2.txt
2.txt
164,986,880 52% 78.71MB/s 0:00:01
rsync 实时同步
inotify 的使用
1、rsync 不支持实时同步
2、一般用 inotify 软件来监控文件的实时变化
3、监控到文件发生变化,立刻调用 rsync 传输数据,实现实时同步
实现实时同步步骤
1、安装 inotify (装在客户端)
[root@m01 ~]# yum install inotify-tools -y
2、inotify 参数介绍
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 时间
%w 目录
%f 文件
-e
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3、开始监控
/usr/bin/inotifywait -mrq --format "%Xe %w %f" -e create,modify,delete,close_write,attrib /root
[root@m01 ~]# /usr/bin/inotifywait -mrq --format "%Xe %w %f" -e create,modify,delete,close_write,attrib /root
4、实时监控并同步
# 读取监控的信息,循环调用 rsync 传输数据即可进行同步
--delete # 让目标目录和源目录数据保持一致
/usr/bin/inotifywait -mrq --format "%Xe %w %f" -e create,modify,delete,close_write,attrib /root | while read line;do
cd /root
rsync -avzP --delete --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::backup
# 不要忘记写 ./* 和 done
[root@m01 ~]# /usr/bin/inotifywait -mrq --format "%Xe %w %f" -e create,modify,delete,close_write,attrib /root | while read line;do
> cd /root
> rsync -avzP --delete --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::backup
> done
rsync 与 inotify 的使用 & 实现实时同步备份的更多相关文章
- 烂泥:rsync与inotify集成实现数据实时同步更新
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要 ...
- CentOS 6.5 rsync+inotify实现数据实时同步备份
CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...
- rsync+sersync+inotify实现服务器间文件同步之一
rsync+sersync+inotify实现服务器间文件同步之一:rsync安装配置 2013年12月14日 ⁄ Linux管理, 服务器集群技术 ⁄ 共 4925字 ⁄ rsync+sersync ...
- sersync2 文件的实时同步备份
|——需求: 监控192.168.9.5[主] 下的 /data/vmeipai 目录 --> 同步到 192.168.12.8 [备] 下的 /data/vmeipai 目录 |——网络拓 ...
- rsync从linux到linux的文件同步备份
rsync从linux到linux的文件同步备份 一.环境 需要备份文件的服务器(服务器端):192.168.1.201 (RHEL 5) 接收备份文件的服务器(客户端):192.168.1.202 ...
- inotify用法简介及结合rsync实现主机间的文件实时同步
一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系 ...
- rsync+inotify实现数据的实时同步更新
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样 ...
- rsync+inotify百万级文件实时同步
实验环境:Centos7.4 目的:将源服务器的文件实时同步至目标服务器 源服务器:10.11.1.107 目标服务器:10.11.1.106 分别在两个节点安装rsync yum -y instal ...
- 使用rsync+inotify实现/www目录实时同步
一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...
随机推荐
- PowerShell【IF篇】
1 [int]$num=0 2 do 3 { 4 $num+=1 5 if($num%2) 6 { 7 "$num"+" 是奇数" 8 }else{ 9 &qu ...
- 第10组 Beta冲刺 (3/5)(组长)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14018630.html ·作业博客:https://edu.cnblogs.co ...
- Itellij Idea使用
图片如果损坏,点击链接查看 https://www.toutiao.com/i6491635946176381454/ 创建Maven项目 JDK环境 目前大多数IDE都没有集成JDK环境,IDEA也 ...
- Vue项目中使用websocket
<template> <div class="test"> </div> </template> <script> ex ...
- PAT 乙级 1004. 成绩排名 (20)(C语言描述)
读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生 ...
- F2BPM的流程仿真
仿真概述 F2BPM工作流仿真是一种通过建立工作流虚拟运行环境执行工作流仿真的方法.集中式仿真引擎解释工作流仿真模型,仿真活动的执行,处理仿真过程中的不确定性,从而完成工作流模型的仿真.同时,会实时显 ...
- Termux搭建hexo博客并部署到GitHub
Termux搭建hexo博客并部署到GitHub 安装 termux-change-repo apt update apt install git && nodejs &&am ...
- 《剑指offer》面试题14- II. 剪绳子 II
问题描述 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m.n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m] .请问 k[0]*k[1]* ...
- 【经验总结】VSCode中找不到numpy/matplotlib/pillow,navigator没了
在VSCode中写python时,import numpy和matplotlib总是报错找不到模块,用conda list和pip list看到都安装了numpy,前后折腾了很久遇到了好几个问题: 无 ...
- 带你学习Flood Fill算法与最短路模型
一.Flood Fill(连通块问题) 0.简介 Flood Fill(洪水覆盖) 可以在线性的时间复杂内,找到某个点所在的连通块! 注:基于宽搜的思想,深搜也可以做但可能会爆栈 flood fill ...