rsync+inotify实时同步
1.rsync
与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份的优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
随着应用系统规模不断的扩大,对数据安全性和可靠性也提出了更高的要求,rsync在高端业务中也逐渐暴露出许多不足。首先,rsync实时同步时,需要扫描所有的文件进行比对,进行差量传输。如果文件数量打到了百万甚至千万量级,扫描所有的文件是非常耗时的,而且正在发生变化的往往是其中很少一部分,这是非常低效的方式。其次,rsync不能实时监测、同步数据。虽然它可以通过linux守护进程的方式进行出发同步,但是两次出发动作一定会有时间差,这样就导致了服务端和客户端出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify就出现了!
2.inotify(监控)
inotify是一种强大的、细粒度的、异步的文件系统事件监控机制。通过inotify可以监控文件系统中的添加、删除、修改、移动等各种细微事件,利用这个内核借口,第三方软件就可以监控文件系统下的各种情况变化,而inotify-tools就是这样的一个第三方软件。
一、服务端配置(只需要安装rsync)
共享到/tmp/下:
1.添加虚拟用户useradd rsync -s /sbin/nologin
chown -R rsync.rsync /tmp/
2.配置rsyncd.conf配置文件
vim rsyncd.conf
#rsync_config_______________start
#rsyncd.conf start##
uid = rsync(用户)
gid = rsync(用户)
use chroot = no(防止出现安全问题)
max connections = 200(有多少个客户端可以连接我这个备份服务器)
timeout = 300(超时,多长时间没有动作就断掉连接)
pid file = /var/run/rsyncd.pid(进程号,将进程号放在这个文件里)
lock file = /var/run/rsync.lock(相当于“锁”的概念,上厕所锁门的概念)
log file = /var/log/rsyncd.log(出错了,可以查看log日志文件)
[tmp](模块)
path = /tmp/(路径)
ignore errors(忽略错误)
read only = false(只读为假,可读,可写的意思)
list = false(不允许列表)
hosts allow = 10.0.0.0/24(允许的主机)
hosts deny = 0.0.0.0/32(拒绝的主机)
auth users = rsync_backup(支持虚拟用户)
secrets file = /etc/rsync.password(用户对应的密码文件)
#rsync_config_______________end
3.建立密码文件
echo “rsync_backup:123456” >/etc/rsync.password
凡是密码文件全部600权限 chmod 600 /etc/rsync.password
4.rsync --daemon daemon模式启动
5.将rsync --daemon加入/etc/rc.local
echo “/usr/bin/rsync --daemom” >>/etc/rc.local
二、客户端配置
安装rsync和inotify
1.安装rsync(yum安装即可)
2.建立密码认证文件
echo “123456” >/etc/rsync.password 只需要密码
设置权限600 chmod 600 /etc/rsync.password
3.安装inotify:
cd /home/cai/tools/
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-too
54 tar xf inotify-tools-3.14.tar.gz
55 ls
56 cd inotify-tools-3.14
57 ./configure --prefix=/usr/local/inotify-tools-3.14
58 make && make install
59 yum install -y gcc
60 ./configure --prefix=/usr/local/inotify-tools-3.14
61 make && make install
62 cd /usr/local/inotify-tools-3.14/
63 ls
64 ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify
4.脚本都是放在/server/scripts下
vim /server/scripts/rsync.sh
#!/bin/sh
host=192.168.76.129
src=/tmp/
des=tmp
user=rsync_backup
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src |
while read files
do
/usr/bin/rsync -avz --delete $src $user@$host::$des --password-file=/etc/rsync.password
echo "${files} was rsynced" >>/var/log/rsyncd.log 2>&1
done
exit o
~
并给予764权限
测试脚本:sh -x /server/scripts/rsync.sh
运行脚本:sh /server/scripts/rsync.sh &
将rsync.sh脚本放入到开机启动项中:echo “/tmp/rsync.sh” >>/etc/rc.local
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- RabbitMQ入门Demo,基于springboot
- 收藏|Pandas缺失值处理看这一篇就够了!
- Spring Boot项目页面报错 OTS parsing error: Failed to convert WOFF 2.0
- Spring Boot开启JSP页面热部署
- Springboot thymeleaf热部署
- Java初始化List的6种方式
- Java遍历Map对象的四种方式
- 【SpringBoot源码解析】第三章:SpringBoot通过打成war包的方式是如何启动的
- 让你编码嗨到停不下来的8个VSCode插件
- 【SpringBoot源码解析】第四章:SpringBoot是如何自动装配SpringMvc的
- 【SpringBoot源码解析】第二章:SpringBoot是如何通过内置Tomcat启动的
- 技术译文 | How Can ScaleFlux Handle MySQL Workload?
- 技术译文 | MySQL 8 需要多大的 innodb_buffer_pool_instances 值(上)
- 前端登录,这一篇就够了
- 技术译文 | MySQL 8 需要多大的 innodb_buffer_pool_instances 值(下)