linux运维、架构之路-实时同步方案
一、inotify+rsync实时同步
1、介绍
inotify-tools是一种强大的、细粒度的、异步的文件系统事件监控机制,可以用来监控文件系统的事件。inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。
2、实现原理

3、根据原理进行部署
①查看系统是否支持inotify
[root@nfs-nfs01 ~]# ll /proc/sys/fs/inotify/
-rw-r--r-- root root Aug : max_queued_events
-rw-r--r-- root root Aug : max_user_instances
-rw-r--r-- root root Aug : max_user_watches
②软件安装
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #安装epel源才可以yum安装inotify
yum install -y inotify-tools
③测试监控事件create、delete、close_write、moved_to、moved_from,定义inotify监控命令参数
inotifywait -mrq -e create,delete,moved_to,close_write --format '%w%f' /data
#/data为监控的目录
④编写脚本让rsync与inotify服务结合实现实时同步
cat >>inotify.sh <<EOF
#!/bin/sh
/usr/bin/inotifywait -mrq --format “%w%f” -e moved_to,delete,create,close_write /data|while read line
do
rsync -az --delete /data/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
done
EOF
⑤inotify优化
[root@nfs-nfs01 ~]# ll /proc/sys/fs/inotify/
-rw-r--r-- root root Aug : max_queued_events #设置监控服务实例可以监控的事件的个数
-rw-r--r-- root root Aug : max_user_instances #设置用户可以开启的服务进程数
-rw-r--r-- root root Aug : max_user_watches #可以监控的最大文件数
优化参数调整:
echo “” >/proc/sys/fs/inotify/max_user_watches
echo “” >/proc/sys/fs/inotify/max_queued_events
⑥inotifywait命令参数
|
参数名称 |
参数说明 |
|
-m,--monitor ***** |
始终保持事件监听状态 |
|
-r,--recursive ***** |
递归监控目录数据信息变化 |
|
-q,-quiet ***** |
输出信息少(只打印事件信息) |
|
--exclude |
排除文件或目录时,不区分大小写 |
|
--timefmt ***** |
指定时间输出格式 |
|
--format ***** |
打印使用指定的输出类似格式字符串,实际监控输出的内容 |
|
-e ***** |
指定监听的事件,如果省略,表示所有事件都进行监听 |
⑦inotifywait events监控事件
|
事件名称 |
事件说明 |
|
access |
文件或目录内容被读取 |
|
modify |
文件或目录内容被写入 |
|
attrib |
文件或目录属性改变 |
|
close_write ***** |
文件或目录关闭,在写入模式打开之后关闭 |
|
chose_nowrite |
文件或目录关闭,在只读模式打开之后关闭的 |
|
close |
文件或目录关闭,不管读或写模式 |
|
open |
文件或目录被打开 |
|
moved_to |
文件或目录被移动到监控的目录中 |
|
moved_from |
文件或目录被移动从监控的目录中 |
|
move ***** |
文件或目录不管移动或是移动出监控目录都触发事件 |
|
create ***** |
文件或目录创建在监控的目录中 |
|
delete |
文件或目录被删除在监控的目录中 |
二、sersync实时同步
1、介绍
数据同步就必然会想到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输。针对数据实时同步需求大多数人会选择rsync+inotify-tools的解决方案,但是这样的方案也存在一些缺陷,sersync是国人基于前两者开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。https://github.com/wsgzao/sersync官方资料
2、sersync优点
①sersync对linux系统文件系统产生的临时文件和重复的文件操作进行过滤所以在结合rsync同步的时候,节省了运行时耗和网络资源,因此更快。
②相比较inotify+rsync,sersync配置起来简单,bin目录下已经有基本上静态编译的2进制文件,配合bin目录下的xml配置文件直接使用即可。
③另外sersync相比较其他脚本开源软件,使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
④sersync有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步。
⑤自带crontab功能,只需在xml配置文件中开启,即可按要求,隔一段时间整体同步一次,无需再额外配置crontab功能。
⑥sersync有socket与http插件扩展,满足二次开发的需要
3、实现原理图

4、sersync服务部署
①软件下载安装
https://github.com/wsgzao/sersync
cd /server/tools/
unzip sersync_installdir_64bit.zip
mv sersync_installdir_64bit /usr/local/sersync
cd /usr/local/sersync/
mv sersync/* ./
rm sersync/ -rf
chmod +x /usr/local/sersync/bin/sersync
cp conf/confxml.xml conf/confxml.xml.bak
②修改配置文件

③启动sersync服务
/usr/local/sersync/bin/sersync -dro /usr/local/sersync/conf/confxml.xml
5、高并发场景无分布式存储实时同步解决方案
①inotify(sersync)+rsync 系统文件级别
②drbd文件系统级别
③第三方软件的同步功能 mysql同步,oracle,mongodb
④业务上,通过程序双写
⑤弃用nfs方案

linux运维、架构之路-实时同步方案的更多相关文章
- linux运维架构师职业规划
1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...
- linux下两台服务器文件实时同步方案实现-乾颐堂
假设有如下需求: 假设两个服务器: 192.168.0.1 源服务器 有目录 /opt/test/ 192.168.0.2 目标服务器 有目录 /opt/bak/test/ 实现的目的就是保持这两 ...
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...
- Linux 运维入门到跑路书单推荐
一.基础入门 <鸟哥的Linux私房菜基础学习篇>:最具知名度的Linux入门书<鸟哥的Linux私房菜基础学习篇>,全面而详细地介绍了Linux操作系统. https://b ...
- Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!
Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...
- Linux运维企业架构实战系列
Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...
- Linux运维企业架构项目实战系列
Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...
- 从零起步做到Linux运维经理, 你必须管好的23个细节
“不想成为将军的士兵,不是好士兵”-拿破仑 如何成为运维经理? 一般来说,运维经理大概有两种出身:一种是从底层最基础的维护做起,通过出色的维护工作,让公司领导对这个人非常认可,同时对Linux运维工作 ...
- linux运维工程师面试题收集
面试必考 mysql5和mysql6 有什么区别 mysql-server-5.5:默认引擎改为Innodb,提高了性能和扩展性,提高实用性(中继日志自动恢复) mysql-server-5.6:In ...
随机推荐
- 【SSH】---【Struts2、Hibernate5、Spring4】【散点知识】
一.Struts21.1.Struts2的概念Struts2是一个用来开发MVC应用程序的框架,它提供了Web应用程序开发过程中的一些常见问题的解决方案: ->对来自用户的输入数据进行合法 ...
- 关于WordPress中字体加载慢的问题解决方案(转)
2016-04-15 最近发现Wordpress有时候加载的特别慢,于是就想办法找了下原因.之前听网上说是因为wordpress用的是Google的字体库,而且是每次都要加载,导致访问慢的,于是当时装 ...
- oracle表名中带@什么意思
例如:select * from dim.dim_area_no@to_dw @后是实例名或数据源,一个简单例子,服务器上创建了2个数据库实例,名称分别为HR.BOSS, 如果你用PL/SQL DEV ...
- [Web 前端] 025 js 的对象、数组和数学对象
1. Javascript 对象 1.1 创建对象 1.1.1 使用原始的方式创建内置对象 var myObject = new Object(); myObject.name = "lij ...
- [19/06/03-星期一] HTML基础_C/S与B/S的区别&标题标签(h1-h6)、段落标签(p)
一.C/S与B/S的区别 C/S(Client/Server):客户端/服务器 1)一般使用的软件都是C/S架构,比如QQ.360.office365: 2)C表示客户端,用户通过客户端来使用软件:S ...
- [BZOJ 3509] [CodeChef] COUNTARI (FFT+分块)
[BZOJ 3509] [CodeChef] COUNTARI (FFT+分块) 题面 给出一个长度为n的数组,问有多少三元组\((i,j,k)\)满足\(i<j<k,a_j-a_i=a_ ...
- mysql简单命令
库: 增 create database db1:新建一个默认编码的库 create database db1 charset uet8 ;建一个编码为 utf8 的库 删 drop database ...
- HNUSTOJ-1257 You are my brother
1257: You are my brother 时间限制: 1 Sec 内存限制: 128 MB提交: 39 解决: 15[提交][状态][讨论版] 题目描述 Little A gets to ...
- C#设计模式:备忘录模式(Memento Pattern)
一,C#设计模式:备忘录模式(Memento Pattern) 1.发起人角色(Originator):记录当前时刻的内部状态,负责创建和恢复备忘录数据.负责创建一个备忘录Memento,用以记录当前 ...
- 在cmd下用cd怎么进不了其他的盘
你当前就是在C盘目录下的,可以切换到别的盘比如D:,然后在切换E:!然后可以切换C:,然后可以用cd\回到根目录. cd是打开文件根目录里面文件夹的,比如C:目录下可以cd Windows打开Wind ...