利用Centos7搭建rsync+inotify实现数据实时同步

发布时间:2022-1-10 10:51

因也无需求,配置ECS时需要将Web集群之间配置数据同步以及会话保持,接下来配置在 linux Centos7.4版本的系统操作。

一、概念讲解

1、实现实时同步

1)要利用监控服务(inotify),监控同步数据服务器目录中信息的变化

2)发现目录中数据产生变化,就利用rsync服务推送到备份服务器上

2、Inotify简介

Inotify是一种强大的,细粒度的。异步的文件系统事件监控机制,linux内核从2.6.13起,加入了 Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而 inotify-tools 正是实施这样监控的软件。国人周洋在金山公司也开发了类似的实时同步软件sersync。

Inotify实际是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界事件机制相符合。

3、使用方式

inotify:对同步数据目录信息的监控

rsync:完成对数据信息的实时同步

4、部署inotify软件的前提

需要2.6.13以后内核版本才能支持inotify软件

[root@localhost ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_queued_events
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_user_instances
-rw-r--r-- 1 root root 0 Oct 17 10:12 max_user_watches

5、实验资源准备

192.168.112.138     server
192.168.112.139     backup

二、部署backup端

1、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
#关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
setenforce 0  #临时

2、安装rsync服务

yum intsall rsync -y

3、修改配置文件

时的用户,不是系统用户,不用创建
secrets file = /etc/rsyncd.passwd #保存密码和用户名文件,需要自己生成,这个路径可以自定义

4、创建密码文件

vim  /etc/rsyncd.passwd
rsync:123456                     #用户和路径是上面设置的,密码自定义,

5、设置权限

chmod 600 /etc/rsyncd.passwd     #设置权限,不设置会报错

6、启动服务

systemctl restart rsyncd
systemctl enable rsyncd

7、查看服务

[root@backup ~]# netstat -nutlp|grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      12809/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      12809/rsync

三、部署server端

1、安装rsync服务

yum intsall rsync -y

2、创建一个文件存放server端的密码

vim   /root/rsyncd.passwd
123456                         #只写上面设置好的密码,不写用户名
chmod 600 /root/rsyncd.passwd

3、现在我们把server机器定义的/opt/下面的数据同步到backup的/data目录夹,/data自己创建
注意该操作是在backup上操作

rsync -avzp --delete  rsync@192.168.112.139::master_web  /data  --password-file=/root/rsyncd.passwd

–delete 表示在同步时,server端/opt/目录中不论是删除,添加,修改,都会同步到backup,如果不加该参数,则只会同步server端新添加和修改的数据,server端删除掉的数据,client端不会删除,依然存在,该选项按个人需求选择.

4、实现自动检测server文件发生变化,自动同步到backup端上去

1)安装inotify
yum install  inotify-tools -y
2)调整inotify内核参数
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。可以直接修改/etc/sysctl.conf的配置文件,将管理队列、实例数、监控数进行设置。
vim /etc/sysctl.conf
#For more information, see sysctl.conf(5) and sysctl.d(5).   //添加
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p    //启动

3)编写inotify脚本
#!/bin/bash
host=192.168.112.139(server)
src=/opt/                    #client上的需要同步的路径
des=master_web               #master上配置文件里的模块名
password=/root/rsyncd.passwd          #密码文件
user=rsync
inotifywait=/usr/bin/inotifywait

$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files ;do
 rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
 echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
4)运行脚本
chmod +x  /root/inotify.sh
nohup bash /root/inotify.sh &   #后台形式运行
5)设置开机自启
chmod +x /etc/rc.d/rc.local     #这步一定要做,因为该文件默认没有执行权限
echo "nohup bash /root/inotify.sh" >> /etc/rc.d/rc.local

备注:执行完脚本第一次不会马上同步数据,只有当server端文件发生改变时,才会触发同步数据操作

CentOS7服务器安装SolusVM被控端硬盘分区方法 电脑常识

CentOS7服务器安装SolusVM被控端硬盘分区方法

众所周知,安装SolusVM被控端(Slave),在分区上的步骤非常繁琐,所以本教程采用在安装CentOS7时便使用安装过程的分区工具进行分区,这样方便且快捷。本教程配合安装过程图文介绍,帮助您完成最...
基于CentOS7.5+Flask框架快速部署一个小型的系统 网站建设

基于CentOS7.5+Flask框架快速部署一个小型的系统

最近在学习Python,有两个多月时间了,今天尝试用Python Flask框架搭建一个小型的系统,为了方便使用,在腾讯云购买了一台服务器,准备把项目架设到上面。自己做记录的同时也给大家做一个参考,将...