rsync 远程同步 实时同步备份 两种免交互的方式实现实时备份
rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步
作用:做数据备份
备份方式:
完全备份
增量备份
rsync客户端 好处:
优点: 第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。支持增量备份
选择性的保持 : 符号链接,硬链接,文件属性,权限 及时间 等
传输前执行压缩。适用于异地备份 ,镜像服务器等应用
安全,使用ssh做为传输端口。 sftp ,ssh
rsync命令的基本用法:
格式:rsync 【选项】 源文件 目标文件
常见的选项:
-a,--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD
-r,–recursive 对子目录以递归模式处理
-l,--links 表示拷贝链接文件
-p , --perms 表示保持文件原有权限
-t , --times 表示保持文件原有时间
-g , --group 表示保持文件原有属用户组
-o , --owner 表示保持文件原有属主
-D , --devices 表示块设备文件信息
-z , --compress 表示压缩传输
-H 表示硬连接文件
-A 保留ACL属性信息
-P 显示传输进度
--delete 删除那些目标位置有而原始位置没有的文件
常见的选项:
-a,--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD
-z , --compress 表示压缩传输
-P 显示传输进度
--delete 删除那些目标位置有而原始位置没有的文件
[root@DaMoWang ~]# rpm -q centos-release
centos-release--5.1804.el7.centos..x86_64
[root@DaMoWang ~]# rpm -q rsync
rsync-3.1.-.el7.x86_64
创建备份目录
[root@DaMoWang ~]# mkdir -p /var/www/html/
[root@DaMoWang ~]# rsync -azP --delete /var/www/html/ root@192.168.94.29:/backup #把本机的html下的文件备份备份服务器的/backup目录
下面实现实时备份的两种方法
你打算几点备份? 业务最不忙的时候?
3:00 人都休息。 找一个人最少的时间去备份?
每天晚上3点起来备份 敲密码???
都不是 , 首先实现无交互 , 在无交互的基础上实现实时备份
使用ssh密钥实现无交互备份
[root@DaMoWang ~]# ssh-keygen #生成密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #一路回车
Enter passphrase (empty for no passphrase): #回车
Enter same passphrase again: #回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+oFKlgZfDbR1PdvG+uq6wWutYQaOxWHUZU2wyRcaw0g root@DaMoWang.localdomain
The key's randomart image is:
+---[RSA ]----+
| . ooE=*+o |
| . + .oo+*.. |
| o o ==. |
| = . ..+ |
| . . S o |
| o o * o . |
| * + o *. . |
| + . . +.+. . |
| . ..==o. |
+----[SHA256]-----+
查看生成的公钥和私钥:
[root@DaMoWang ~]# ls /root/.ssh/
authorized_keys id_rsa id_rsa.pub known_hosts #id_rsa(私钥) id_rsa.pub(公钥)
将公钥上传到备份服务器上:
[root@DaMoWang ~]# ssh-copy-id root@192.168.94.29
root@192.168.94.'s password: #最后一次输入密码
Now try logging into the machine, with "ssh 'root@192.168.94.29'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
现在已经是无交互免密了
测试
[root@DaMoWang html]# touch {..}.txt #创建测试文件
[root@DaMoWang html]# ls
.txt .txt .txt .txt .txt
[root@DaMoWang ~]# rsync -azP --delete /var/www/html/ root@192.168.94.29:/backup #推送到备份服务器
sending incremental file list
./
.txt
% .00kB/s :: (xfr#, to-chk=/6)
.txt
% .00kB/s :: (xfr#, to-chk=/6)
.txt
% .00kB/s :: (xfr#, to-chk=/6)
.txt
% .00kB/s :: (xfr#, to-chk=/6)
.txt
% .00kB/s :: (xfr#, to-chk=/6)
切换到备份服务器查看
[root@DaMoWang html]# ssh root@192.168.94.29 #切换到备份服务器
[root@DaMoWang ~]# ip a #已经切换到备份服务器
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::7d:b5: brd ff:ff:ff:ff:ff:ff
inet 192.168.94.29/ brd 192.168.94.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::a1f6:1d30:fbb2:f090/ scope link noprefixroute
valid_lft forever preferred_lft forever
[root@DaMoWang ~]# cd /backup/
[root@DaMoWang backup]# ls #查看备份目录下是否成功备份
.txt .txt .txt .txt .txt
[root@DaMoWang backup]# exit
登出
Connection to 192.168.94.29 closed.
创建密码文件实现无交互备份
配置备份服务器的rsync配置文件
[root@DaMoWang ~]# vim /etc/rsyncd.conf #修改rsync的配置文件
# 用户
uid = rsync
# 组
gid = rsync
# 程序安全设置
use chroot = no
# 客户端连接数
max connections = 200
# 超时时间
timeout = 300
# 本机ip
address = 192.168.94.29
# 监听端口
port 873
# 进程号文件位置
pid file = /var/run/rsyncd.pid
# 进程锁
lock file = /var/run/rsync.lock
# 日志文件位置
log file = /var/log/rsyncd.log
# 共享模块名称
[backup]
# 使用目录
path = /backup/
# 有错误时忽略
ignore errors
# 可读可写
read only = false
# 阻止访问远程列表
list = false
# 允许IP
hosts allow = 192.168.94.0/24
# 禁止IP
hosts deny = 0.0.0.0/32
# 虚拟用户
auth users = rsync_backup
# 存放用户和密码的文件
secrets file = /etc/rsync.password
# 排除的压缩类型
dont compress = .gz .bz2 .tgz .zip .rar .z
# 共享模块名称
[nfsbackup]
# 使用目录
path = /data/
# 有错误时忽略
ignore errors
# 可读可写(true或false)
read only = no
# 阻止远程列表(不让通过远程方式看服务端有什么)
list = false
# 允许IP
hosts allow = 192.168.94.0/24
# 禁止IP
hosts deny = 0.0.0.0/32
# 虚拟用户
auth users = rsync_backup
# 存放用户和密码的文件
secrets file = /etc/rsync.password
#保存退出
#把密码文件的权限改成600
[root@DaMoWang ~]# chmod /etc/rsync.password
[root@DaMoWang ~]# echo “rsync_backup:” > /etc/tc/rsync.password #设置密码到密码文件中
[root@DaMoWang ~]# useradd -M -s /sbin/nologin rsync
[root@DamOWang ~]# chmod +R rsync /backup
服务器端配置完成 , 下面把客户端里添加密码文件即可实现面交互
[root@DaMoWang ~]# echo "" > /etc/rsync.password
[root@DaMoWang ~]# mkdir /backup #创建共享目录
[root@DaMoWang ~]# cd /backup
[root@DaMoWang backup]# touch {..}.txt #创建测试文件
[root@DaMoWang backup]# rsync -azp /backup/ rsync_backup@192.168.94.29::backup --password-file=/et
c/rsync.password #推送数据到备份服务器
sending incremental file list
./
.txt
% .00kB/s :: (xfr#, to-chk=/)
.txt
% .00kB/s :: (xfr#, to-chk=/6)
.txt
% .00kB/s :: (xfr#, to-chk=/)
.txt
% .00kB/s :: (xfr#, to-chk=/)
.txt
% .00kB/s :: (xfr#, to-chk=/)
切换到备份服务器查看是否备份成功
[root@DaMoWang backup]# ssh root@192.168.94.29 #切换到备份服务器
Last login: Sat Jul :: from 192.168.94.100 #本机ip 192.168.94.100
[root@DaMoWang ~]# ip a #已经切换到备份服务器
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :0c::7d:b5: brd ff:ff:ff:ff:ff:ff
inet 192.168.94.29/ brd 192.168.94.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::a1f6:1d30:fbb2:f090/ scope link noprefixroute
valid_lft forever preferred_lft forever
[root@DaMoWang ~]# cd /backup/
[root@DaMoWang backup]# ls #查看备份目录下是否成功备份
.txt .txt .txt .txt .txt
[root@DaMoWang backup]# exit
登出
Connection to 192.168.94.29 closed.
配置rsync+inotify实现实时同步
inotify概述:
Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应
使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份存在的延迟性、周期过密等问题
#使用网络yum源或者源码安装inotify工具
[root@DaMoWang ~]# yum -y install inotify-tools
[root@DaMoWang ~]# inotifywait -h #查看选项 参数
常用参数:
-e 用来指定要监控哪些事件
这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改
-m 表示持续监控
-r 表示递归整个目录
-q 表示简化输出信息
[root@DaMoWang ~]# inotifywait -mrq -e create,close_write,move,delete,modify /var/www/html/ #输入命令后会监控目录变化 , 打开另一个终端来测试
在另一个终端登录,在/var/www/html目录进行相关的操作,然后,回到原来的终端查看监控变化情况
[root@DaMoWang ~]# echo aaa > /var/www/html/a.html
[root@DaMoWang ~]# mkdir /var/www/html/test
[root@DaMoWang ~]# cp /etc/passwd /var/www/html/test/
[root@DaMoWang ~]# rm -rf /var/www/html/test/passwd
查看变化:
/var/www/html/ CREATE a.html
/var/www/html/ MODIFY a.html
/var/www/html/ CREATE,ISDIR test
/var/www/html/test/ CREATE passwd
/var/www/html/test/ MODIFY passwd
/var/www/html/test/ DELETE passwd
#使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况
编写触发式同步脚本
只要使用inotifywait检测到事件时,自动执行rsync进行同步操作即可
#!/bin/bash
inotifywait -mrq -e create,close_write,move,delete,modify /var/www/html/ | while read a b c
do
rsync -azP --delete /var/www/html/ root@192.168.94.29:/backup(或者rsync -azp /backup/ rsync_backup@192.168.94.29::backup --password-file=/et
c/rsync.password) done
加上执行权限并在后台运行即可
rsync 远程同步 实时同步备份 两种免交互的方式实现实时备份的更多相关文章
- Hibernate中两种获取Session的方式
转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...
- OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)
实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...
- 两种获取connectionString的方式
两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...
- Spring两种实现AOP的方式
有两种实现AOP的方式:xml配置文件的方式和注解的形式 我们知道通知Advice是指对拦截到的方法做什么事,可以细分为 前置通知:方法执行之前执行的行为. 后置通知:方法执行之后执行的行为. 异常通 ...
- OC中两种单例实现方式
OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...
- javascript两种声明函数的方式的一次深入解析
声明函数的方式 javascript有两种声明函数的方式,一个是函数表达式定义函数,也就是我们说的匿名函数方式,一个是函数语句定义函数,下面看代码: /*方式一*/ var FUNCTION_NAME ...
- JIT(Just in time,即时编译,边运行边编译)、AOT(Ahead Of Time,运行前编译),是两种程序的编译方式
JIT(Just in time,即时编译,边运行边编译).AOT(Ahead Of Time,运行前编译),是两种程序的编译方式
- Java中有两种实现多线程的方式以及两种方式之间的区别
看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案. 网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了. Java中有两种实现多线程的方式.一是直接继承Thre ...
- FMX有两种消息处理的实现方式,一种是用TMessageManager来实现自定义的消息,另外一种象TEdit中的实现,直接声明消息方法(firemonkey messaging)
看FMX代码,发现有两种消息处理的实现方式,一种是用TMessageManager来实现自定义的消息,另外一种象TEdit中的实现,直接声明消息方法. 早前,看过文章说TMessageManage ...
随机推荐
- 用WordPress建立专业网站教程 (一步步建站, 一步也不少)
最新美国域名中心US Domain Center: http://www.usdomaincenter.com/ 建站教程 (10分钟上线, 无需备案): https://www.qiyewp.com ...
- ImportError: No module named 'requests.packages.urllib3'
场景:CentOS 7 运行微信告警脚本报错 原因:requests库版本问题 解决方法: sudo pip install requests urllib3 pyOpenSSL --force -- ...
- jq 日期区间处理
<html lang="en"><head> <meta charset="UTF-8"> <title>Tit ...
- 3 ansible-playbook 条件语句-外部变量使用
外部变量指的是从playbook文件之外获取的数值 lookups file file是我们经常使用的一种lookups的方式,它的原理就是使用python的codecs.open打开文件然后把结果返 ...
- iOS 裁剪View指定的角裁剪
在开发中碰到view的左上角和右上角需要裁剪,具体实现方法如下: UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:se ...
- cdh 安装调研
解决:No module named site http://blog.csdn.net/amgang/article/details/7030642 因为安装greenplum导致yum报如下错误: ...
- CF 977E Cyclic Components
E. Cyclic Components time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- cf 1114E
为什么这道题我到现在才写题解... 题解: 因为是随机题吗,,好像对于我来说还是很新颖的,就写一下. rand()的范围是到32768?这个以前踩过坑 #include <bits/stdc++ ...
- package.json文件配置信息
1.概述 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文 ...
- 七牛免费SSL证书申请全流程
购买证书 在七牛ssl 首页点击购买 购买限免证书 补全订单信息 免费证书,随意填写,问题不大 购买成功,查看订单详情,获取 TXT 值信息 添加 DNS TXT 验证 根据上一步,查看证书订单详情, ...