全网实时热备inotify+rsync
title: 全网实时热备inotify+rsync
tags: 备份,inotify,rsync
全网实时热备inotify+rsync
1 为什么需要inotify?
当全网部署了NFS存储后,如果提供NFS服务的设备宕机或者故障了,那么我们的与之相连的NFS客户端都会受到影响,严重可能会导致数据丢失,因此,为了防止单点故障,我们要给提供NFS服务的主机的数据目录做一个实时同步,这样NFS服务器宕机或者其他故障后,我们能很轻易的把备份节点设置为NFS的共享目录,让那些NFS客户端重新挂载NFS共享盘,这样可以尽量减少损失,提高服务满意度。
inotify是可以监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,使用起来也十分高效, 而rsync可以直接推送文件到远程daemon目录,而且支持增量备份。因此我们可以通过使用inotify监控到文件系统有创建,删除,修改后触发rsync进行同步推送到备份服务器里。于是如图所示,我们在备份服务器里搭建一个rsync daemon,并创建/backup用来专门与NFS存储的数据目录作为实时同步的远端目录,而在对应的NFS存储中安装inotify,用来对/data目录进行动态监控,一旦发现/data目录有创建,删除,修改后立刻触发rsync进行同步推送到备份服务器的/backup里,从而保证两端的数据一致性,增强NFS存储的安全性。
2 安装inotify
解压缩,并安装inotify,因为inotify是一个源码包文件,所以安装的时候注意,先要编译,通过--prefix=PATH指定编译安装的路径,然后在进行make和make install。安装完成后,因为源码安装是带程序的版本号的,最好做一个软链接把版本号去掉,这样在后续使用中会方便很多。另外安装后,在安装目录中会生成4个目录,bin (inotify的执行命令)、 include (inotify所需的头文件) 、lib (动态链接文件)、 share (帮助文档)。安装过程如下:
[root@server ~]# tar zxf inotify-tools-3.14.tar.gz [root@server ~]# ls -l |grep "inotify-tools-3.14" drwxrwxrwx. 5 1000 1000 4096 Mar 14 2010 inotify-tools-3.14 -rw-r--r--. 1 root root 358772 May 19 17:52 inotify-tools-3.14.tar.gz [root@server ~]# cd inotify-tools-3.14 [root@server inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14/ [root@server inotify-tools-3.14]# make && make install [root@server inotify-tools-3.14]# ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify-tools [root@server inotify-tools-3.14]# cd /usr/local/inotify-tools && ls bin include lib share3 inotify的相关命令和参数介绍
3 . 对inotify进行测试,看看是否满足需求
[root@server data]# /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data 因为inotify开启后是时刻监控着/data目录,切处于阻塞状态,因此我们要么让它在后台运行,要么重新开一个窗口,因为我们需要清晰的看到监控的事件,因此重新再打开一个窗口。 Last login: Sun May 20 20:06:00 2018 from 192.168.50.50 [root@server ~]# [root@server ~]# cd /data [root@server data]# ls a aaa bb cc dd file nnn [root@server data]# [root@server data]# [root@server data]# rm -rf * [root@server data]# ls [root@server data]# [root@server data]# /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data/data/a /data/aaa /data/bb /data/cc /data/dd /data/file /data/nnn 由此我们可以看到了,inotify确实监控到了这些事件的发生,因此我们可以利用read这个变化来触发调用rsync进行推送数据。4 在备份服务器上部署rsync daemon
[root@backup ~]# rsync --daemon
5 我们可以在NFS服务端部署脚本,让脚本监控到事件发生后调用rsync进行推送
[root@server scripts]# cat inotify.sh #!/bin/bash inotify=/usr/local/inotify-tools/bin/inotifywait $inotify -mrq --format '%w%f' -e create,close_write,delete /data | while read file do cd / && rsync -az /data --delete rsync-backup@192.168.50.4::backup/ \ --password-file=/etc/rsync.password done6 进行对server和backup进行测试
server端创建文件: [root@server data]# rm -rf * [root@server data]# touch a [root@server data]# rm -rf * [root@server data]# for n in `seq 1000` ;do touch file$n; done [root@server data]# ls |wc -l 1000 backup端查看是否推送过来: [root@backup backup]# cd data [root@backup data]# ls a [root@backup data]# [root@backup data]# [root@backup data]# ls [root@backup data]# [root@backup data]# ls |wc -l 10007 将inotify脚本设置为开机启动,这样两台服务器就可以永久实现实时同步
[root@backup data]# echo "sh /service/scripts/inotify.sh & " >>/etc/rc.local
8 inotify对应的优化参数:
在/proc/sys/fs/inotify目录下的max_queued_events 、max_user_instances、max_user_watches对inotify有一定的限制。其中:
[root@backup inotify]# echo "50000000" > /proc/sys/fs/inotify/max_user_watches
转载于:https://blog.51cto.com/ouyangtao/2121825
总结
以上是生活随笔为你收集整理的全网实时热备inotify+rsync的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 523. Continuous Suba
- 下一篇: git 常用命令以及其他使用笔记