Rsync+Inotify 实现数据同步
Rsync 是UNIX及类UNIX-Like平台下一款强大的数据镜像备份软件,它不像FTP或其他文件传输服务那样需要进行全备份,Rsync 可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率.你可以使用它进行本地数据或远程数据的复制,Rsync可以使用 SSH 安全隧道进行加密数据传输,Rsync 服务器端定义源数据,Rsync客户端仅在源数据发生改变后才会从服务器上实际复制数据至本地,如果源数据在服务器端被删除,则客户端数据也会被删除,以确保主机之间的数据是同步的.Rsync 使用 TCP-873 端口.
Inotify 是一个Linux特性,它监控文件系统操作,比如读取、写入和创建 Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多,本章学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具.
Rsync 文件同步
Rsync服务端配置
1.服务端首先安装Rsync软件包,并创建一个/common目录拷贝进去一些配置文件用于测试.
[root@localhost ~]# yum install -y rsync
[root@localhost ~]# mkdir -p /common
[root@localhost ~]# cp -a /etc/* /common
2.编辑Rsync的主配置文件覆盖写入以下内容,这里指定了我们需要共享的文件与目录.
[root@localhost ~]# vim /etc/rsyncd.conf
use chroot=yes #禁锢用户主目录
address=127.0.0.1 #指定本机的IP地址
port=873 #指定默认端口
log file=/var/log/rsync.log #指定日志文件保存位置
pid file=/var/syncd.pid #指定PID文件保存位置
[pub] #声明目录名(也就是下面的共享名)
comment=hello lyshark #说明信息
path=/common #要同步的目录
read only=yes #只读
dont compress=*.gz *.tgz *.bz2 #指定这些文件不压缩
auth users=lyshark #使用sync的用户名密码
secrets file=/etc/rsyncd_users.db #存放虚拟用户的密码文件
3.创建密码文件,在上面的配置中我们指定了密码配置文件位置为/etc/rsyncd_users.db,编辑这个配置文件并写入以下内容.
[root@localhost ~]# vim /etc/rsyncd_users.db
lyshark:123123 #格式:用户名:密码
admin:123123
4.给服务端密码文件给予最低运行权限,并开启rsync守护进程.
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db #给予权限,保证安全
[root@localhost ~]# rsync --daemon #开启服务
[root@localhost ~]# netstat -antp |grep ":873" #查看端口,是否开启成功
Rsync客户端配置
1.首先我们应该创建客户接收位置,用于接收传输文件,这里我就和服务器保持一致了.
[root@localhost ~]# mkdir -p /common
2.声明一个全局变量,Rsync验证时先搜索变量在输入密码,这里将其写入配置文件实现开机自启动.
[root@localhost ~]# export RSYNC_PASSWORD=123123 #设置验证密码
[root@localhost ~]# echo "export RSYNC_PASSWORD=123123" >> /etc/profile #写入配置文件
3.上面的步骤全部完成以后我们就可以使用一下命令进行验证同步了.
[root@localhost ~]# rsync -avz 虚拟用户名@IP地址::共享名 数据保存位置 #从服务器同步到本机
[root@localhost ~]# rsync -avz --delete 虚拟用户名@服务器IP地址::共享名 数据保存位置 #从服务器同步到本机并且完全与服务器保持数据一致
[root@localhost ~]# rsync -avz 本地文件 root@服务器IP:/保存位置 #把我的文件发送给对方
[root@localhost ~]# rsync -avz root@服务器IP:/对方文件位置 /保存位置 #把对方的文件下载给我
[root@localhost ~]# rsync -avz lyshark@192.168.1.12::pub /client/rsync
每次同步数据都需要手动输入命令是非常麻烦的一件事,作为一名运维人员,我们需要更智能化的处理机制,这可以考虑使用Shell脚本来解决这样的问题,下面的这个rsync_back.sh脚本可以实现数据的同步任务,我们可以将他加入到计划任务里实现自动同步数据之用.
#!/bin/bash
export RSYNC_PASSWORD=123123
src=common
dest=/common
server=192.168.1.10
user=lyshark
[! -d $dest ] && mkdir $dest
rsync -avz --delete ${user}@${server}::$src $dest/${date +%Y%m%d}
Rsync+Inotify 双向同步
Rsync+Inotify可实现一台服务器数据更新另一台马上同步,实现基础的单向热备份这里有个,前置条件主服务器对从服务器建立SSH密钥对验证,并且下面的几个步骤主从服务器都需要做一遍.
1.下载Inotify工具,并编译安装inotify-tools
[root@localhost ~]# wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
[root@localhost ~]# tar -xzvf inotify-tools-3.13.tar.gz
[root@localhost ~]# cd inotify-tools-3.13/
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install
2.优化内核参数(可选)
[root@localhost ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost ~]# sysctl -p
3开启监控模块(测试)
[root@localhost ~]# inotifywait -mrq -e create,delete /tmp #tmp为被监控目录
4.监控脚本,实现如果服务端数据更新,自动使用Rsync命令同步数据到客户端
#!/bin/bash
date="inotifywait -mrq -e create,delete /本地目录"
sync="rsync -avz --delete /本地目录/ 对方用户名@对方IP:/同步到对方哪个目录"
$date | while read DIRECTORY EVENIS FILE
do
$sync
done
Unison+Inotify 实时双向同步
Unison+Inotify可以实现,无论客户端还是服务器,只有发生变化全部进行同步,前置条件,两台服务器必须互相建立SSH密钥对验证,其次服务器和客户端必须同时安装以下软件,做相同的配置。
1.安装Inotify
[root@localhost ~]# wget https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
[root@localhost ~]# tar -xzvf inotify-tools-3.13.tar.gz
[root@localhost ~]# cd inotify-tools-3.13/
[root@localhost ~]# ./configure
[root@localhost ~]# make && make install
2.配置内核优化
[root@localhost ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost ~]# sysctl -p
3.安装Unison
a)安装依赖
[root@localhost ~]# wget http://caml.inria.fr/pub/distrib/ocaml-4.06/ocaml-4.06.0.tar.gz
[root@localhost ~]# tar -xzvf ocaml-4.06.0.tar.gz
[root@localhost ~]# cd ocaml-4.06.0/
[root@localhost ~]# ./configure
[root@localhost ~]# make world opt && make install
b)安装Unison
[root@localhost ~]# wget https://codeload.github.com/bcpierce00/unison/tar.gz/v2.51.2
[root@localhost ~]# tar -xzvf unison-2.51.2.tar.gz
[root@localhost ~]# cd unison-2.51.2/
[root@localhost ~]# make UISTYLE=text THREADS=true static=true
[root@localhost ~]# cp -a src/unison /usr/local/bin/ #只需要此主程序
[root@localhost ~]# chmod 755 /usr/local/bin/unison #赋予执行权限
3.服务器和客户端同时运行脚本
#!/bin/bash
date="inotifywait -mrq -e create,delete /本地目录"
sync="/usr/local/bin/unison -batch /本地目录/ ssh://root@远程同步IP//同步到远程目录"
$date | while read DIRECTORY EVENIS FILE
do
$sync
done
Rsync+Inotify 实现数据同步的更多相关文章
- rsync+inotify实时数据同步多目录实战
rsync+inotify实时数据同步多目录实战 inotify配置是建立在rsync服务基础上的配置过程 操作系统 主机名 网卡eth0 默认网关 用途 root@58server1 1 ...
- rsync+inotify实时数据同步单目录实战
rsync+inotify实时数据同步单目录实战 rsync+inotify实时数据同步单目录实战 inotify是一个强大的.细粒度的.异步的文件系统事件监控机制,linux内核从2.6.13起 ...
- 我的一次rsync+inotify本地数据同步示例
环境: web工作目录:/var/www/mydafuhao git仓库目录: /var/www/mydafuhao.git/mydafuhao 需求:inotify监控git仓库目录,发现有版本更新 ...
- Rsync+inotify 实时数据同步 inotify master 端的配置
强大的,细致的,异步的文件系统事件监控机制.Linux 内科从 2.6.13 起支持 inotify Inotify 实现的几款软件:Inotify,sersync,lsyncd ※Inotify 实 ...
- Centos rsync+inotify 实现数据同步备份
最近公司做了一
- 通过rsync+inotify实现数据实时备份同步
一.环境描述 测试环境 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 环境描述: 主服务器172.26.7.50 ,从 ...
- rsync简介与rsync+inotify配置实时同步数据
rsync简介 rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步. rsync特性 rsync ...
- CentOS 6.5 rsync+inotify实现数据实时同步备份
CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...
- Inotify+rsync实现实时数据同步
使用rsync可以实现数据同步,但是即使使用crontab定时任务最小执行间隔为1分钟,在数据实时性要求比较高场合需使用inotify+rsync实现实时同步 下载inotify wget https ...
- sersync基于rsync+inotify实现数据实时同步
一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192. ...
随机推荐
- 服务器上TIME_WAIT过多怎么处理
正常情况下,TIME_WAIT是需要存在的 为了保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文,服务 ...
- Java | Spring Boot数据源配置原理
在数据库访问过程中,"数据源"无疑是最重要的概念之一,它不仅可以对与数据库访问相关的各种参数进行封装和统一管理,还可以管理数据库连接池,提高数据库连接性能. 目前,在市面上有很多优 ...
- SpringBoot 学习笔记:运维篇
SpringBoot程序的打包和运行 开发部门使用Git.SVN等版本控制工具上传工程到版本服务器 服务器使用版本控制工具下载工程 服务器上使用Maven工具在当前真机环境下重新构建项目 启动服务 程 ...
- P1525 关押罪犯 (并查集 / 二分图)| 二分图伪码
原题链接:https://www.luogu.com.cn/problem/P1525 题目概括: 给你m对关系,每对关系分别涉及到x,y两人,矛盾值为w 请你判断分配x和y到两个集合中,能否避免冲突 ...
- Flask的简单学习
简介 Flask是一个非常小的PythonWeb框架,被称为微型框架:只提供了一个稳健的核心,其他功能全部是通过扩展实现的:意思就是我们可以根据项目的需要量身定制,也意味着我们需要学习各种扩展库的使用 ...
- Ribbon默认负载均衡规则替换为NacosRule
近期博主在参与一个 Spring Cloud 搭建,版本为 Hoxton.SR12,服务注册发现组件为 Nacos 的老项目时,发现项目负载均衡组件 Ribbon 的负载均衡规则在某些场景下不够完美, ...
- 如何将接口的返回值中所需信息提取出来作为其他接口的入参使用(postman与jmeter的使用)
一.背景: 偶尔会用到一个场景,两个接口之前的调用有依赖关系,将其中一个的返回参数中的部分信息取出来作为入参在第二个接口中使用,代码内是比较好实现,只要定义一个变量,用于参数传递. 如果是测试过程中使 ...
- 机器学习-线性分类-支持向量机SVM-合页损失-SVM输出概率值-16
目录 1. SVM概率化输出 2. 合页损失 1. SVM概率化输出 标准的SVM进行预测 输出的结果是: 是无法输出0-1之间的 正样本 发生的概率值 sigmoid-fitting 方法: 将标准 ...
- JavaScrip基本语法
2. 上篇内容回顾 1. CSS属性 1. 高和宽 2. 字体相关 3. 文本相关 4. 背景相关 1. background-color: red 2. background-image: url( ...
- spring-transaction源码分析(3)Transactional事务失效原因
问题概述 在Transactional方法中使用this方式调用另一个Transactional方法时,拦截器无法拦截到被调用方法,严重时会使事务失效. 类似以下代码: @Transactional ...