NFS主从同步:Inotify+Rsync

NFS主从同步

数据的实时同步实现:
  利用监控服务(inotify),监控同步数据服务器目录中信息的变化
  发现目录中数据产生变化后,就利用rsync服务推送到备份服务器中

实现同步的方法:
  inotify+rsync 方式实现数据同步,inotify负责监控,rsync在被触发后同步数据
  sersync 金山公司周洋在inotify软件基础上进行的二次开发,功能更加强大


inotify:介绍

异步的文件系统时间监控机制,利用事件驱动机制,而无需通过类似cron等的轮询机制来获取事件,Linux内核从2.6.13起支持inotify,通过inotify可以监控文件系统中添加、删除、修改、移动等各种操作事件
centos6和7都支持

inotify软件:
inotify-tools,sersync,lrsyncd

inotify+rsync使用方式:
inotify对同步数据目录信息进行监控
rsync完成对数据的同步
利用脚本进行结合

inotify相关

查看系统是否加载了inotify功能

grep -i inotify /boot/config-3.10.0-957.el7.x86_64 
CONFIG_INOTIFY_USER=y

内核参数文件

ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Dec  3 19:01 max_queued_events
-rw-r--r-- 1 root root 0 Dec  3 19:01 max_user_instances
-rw-r--r-- 1 root root 0 Dec  3 19:01 max_user_watches

inotify内核参数解释
man 7 inotify

以下值都可调大,看环境
max_queued_events:inotify各种操作事件队列最大长度,如值太小会出现event queue overflow错误
	默认值:16384
max_user_instances:可以监控的文件数量,单进程,默认:8192
max_user_watches:每个用户创建inotify实例最大值,默认值:128

inotify的参考文档

安装:基于epel源

 yum install -y inotify-tools	

主要工具

/usr/bin/inotifywait:在被监控的文件或目录上等待特定文件发生的操作事件[create、delete等]发生。常用于实时同步的目录监控
/usr/bin/inotifywatch:收集被监控的文件系统使用的统计数据,指的是文件系统发生的次数统计

inotifywait命令的常见选项:

选项 作用
-m 始终保持监控状态
-d 以守护进程方式执行,和-m相似,配置-o使用
-r 递归监控目录数据信息变化
-q 输出少量时间信息
–exclude 可指定排除某文件或目录,使用扩展正则表达式匹配的模式实现
–excludei 和exclude相似,不区分大小写
-o 输出到指定文件中
-s 发送错误到syslog,相当于标准错误输出
–timefmt 指定时间输出格式
–format 指定的输出格式,即实际监控输出内容
-e 指定监听指定的事件,如果省略此项,表示所有事件都监控

–timefmt 的事件格式,参考man 3 strftime
此项要配合–format一起使用,format是具体输出的格式

格式 说明
%Y 年,包含世纪信息
%y 年,不包含世纪信息
%m 月,范围1~12
%d 天,范围1~31
%H 小时,24小时制
%M 分,0~59

示例:–timefmt “%Y-%m-%d %H:%M”


–format :指定的输出格式,结合–timefmt使用

格式 说明
%T 输出–timefmt定义的时间格式信息
%w 事件出现时,监控文件或目录的名称
%f 事件出现时,将显示监控目录下触发事件的文件名
%e 显示发生的事件信息,不同的事件默认用逗号分隔
%;e 不使用默认的逗号分隔,自定义;为分隔符

示例:
  --format “%T %w%f event:%;e”
  --format ‘%T %w %f’


-e:指定监听指定的事件类型

事件类型 说明
create 文件或目录创建操作
delete 文件或目录删除操作
modify 文件或目录修改写入操作
attrib 文件或目录属性改变
close_write 文件或目录关闭,在写入模式打开之后关闭的
close_nowrite 文件或目录关闭,在只读模式打开之后关闭的
close 文件或目录关闭,不管读或写模式
open 文件或目录被打开
moved_to 文件或目录被移动到监控的目录中
moved_from 文件或目录从监控的目录中被移动
move 文件或目录不管移动或移除监控目录
access 文件或目录内容被读取
delete_self 文件或目录被删除,目录本身被删除
unmount 取消挂在

示例:
  -e create,delete,moved_to,close_write,attrib


练习

#默认是占用终端,等待对目录或文件的操作,当有操作时,实时在屏幕输出

inotifywait -mrq /data/www --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event:%;e"

#可以使用-o输出到一个文件中,也是占用一个终端

inotifywait -mrq /data/www --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event:%;e" -o /tmp/inotify.log

#-e指定只有指定的动作才记录

inotifywait -mrq /data/www --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event:%;e" -e create,delete,moved_to,close_write,attrib
	# 具体的输出格式如下
2019-12-03 19:53 /data/www/file1 event:ATTRIB
2019-12-03 19:54 /data/www/file1 event:DELETE
2019-12-03 19:54 /data/www/file2 event:DELETE

rsync相关

rsync本身可作为一个服务为我们提供服务

来自rsync包
端口:873

rpm -ql rsync
/etc/rsyncd.conf 配置文件
/etc/sysconfig/rsyncd
/usr/bin/rsync 命令方式
/usr/lib/systemd/system/rsyncd.service service文件,支持systemctl管理

rsync命令:
  基于ssh和rsh服务实现高效率的远程系统之间的复制文件
 使用安全的shell连接为传输方式
   rsync -av /etc host_ip:/tmp :复制目录和目录下文件
   rsync -av /etc/ host_ip:/tmp :只复制目录下文件
  特性:比scp更快,而且只复制不同的文件,没有改变的文件忽略

常用选项:

选项 说明
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
–delete 删除DEST中SRC没有的文件
–exclude 过滤指定文件,如–exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩

定义同步数据配置,修改配置文件

uid = root				# 以root身份开启rsync服务
gid = root		
use chroot = no			# 不允许切换根
max connections = 0		# 最大的连接数,0位不限制
log file = /var/log/rsyncd.log		# 日志文件路径
pid file = /var/run/rsyncd.pid		# pid文件路径
lock file = /var/run/rsyncd.lock	# 锁文件路径
exclude = lost+found/	# 针对此目录不监控
timeout = 900			# 超时时长
reverse lookup = no		# 反向解析,将IP解析为名称,no为关闭,不解析效率会高一点
hosts allow = 192.168.40.0/24		# 允许哪个客户端网段访问rsync服务器

[backup]				# 此名字代表下面所有内容,调用时只需要写这个名字
path = /backup/			# 同步到rsync服务器的备份路径
comment = backup		# 描述
read only = no 			# no为可写
auth users = rsyncuser	# 不需要向ssh输入用户和密码,使用rsync的用户和密码连接
secrets file = /etc/rsync.pass		# 密码文件
ignore errors			# 如果产生错误,忽略错误

以上是解释


实现步骤

40.7作为inotify监控,在40.17设备上做rsync服务器
监控40.7设备上/data/www/目录下文件的变化

1、40.7设备上只需安装inotify即可

2、40.17rsync配置文件中添加

uid = root
gid = root
use chroot = no
max connections = 0
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
exclude = lost+found/
timeout = 900
reverse lookup = no
hosts allow = 192.168.40.0/24

[backup]
path = /backup
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass
ignore errors

注意:在重启后使用systemctl status rsyncd 可以看到部分报错内容,必须解决,否则客户端同步不成功

3、服务器生成验证文件

echo "rsyncuser:123123" > /etc/rsync.pass	# 可生成多个用户和密码,一行一个
chmod 600 /etc/rsync.pass					# 修改权限,使密码更安全

4、服务器准备存放同步数据目录

mkdir /backup

5、启动服务

centos7
	systemctl start rsyncd
centos6
	依赖xinetd,由xinetd管理激活rsync服务
	chkconfig --list	没有xinetd就安装,然后启动
	chkconfig rsyncd on
	service xinetd start 

6、返回到40.7在客户端生成密码文件

echo "123123" > /etc/rsync.pass	# 可以和服务器设置不同名字
chmod 600 /etc/rsync.pass

7、客户端测试:

rsync -avz --password-file=/etc/rsync.pass /data/www/ [email protected]::backup
选项说明:
	--password-file	指定密码文件
	backup	这个backup是rsync服务器配置文件中定义的模块内容的名字,直接调用名字,就可以使用模块内定义的内容

此步骤是实现单次测试复制!!!


脚本实现死循环监控

客户端40.7创建inotify+rsync.sh 脚本

#!/bin/bash
src='/data/www/'
desc='[email protected]::backup'
inotifywait -mrq --timefmt "%Y-%m-%d %H:%M" --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${src} | while read date time dir file;do
        FilePath=${dir}${file}
        rsync -az --delete --password-file=/etc/rsync.pass $src $desc && echo "At $date on $time, ${dir}${file} change" >> /tmp/rsync.log
done

测试方法:
40.7会话1设备上跑脚本
在这里插入图片描述
40.17额外新窗口使用
  watch -n1 ls -l /backup/ # 一秒查看一次backup目录的变化
在这里插入图片描述
40.7再开一个会话,敲命令
此时文件相同
在这里插入图片描述
删除或创建文件,对方都会发生变化
dd if=/dev/zero of=bigfile bs=1M count=500 # 查看40.17下/backup 目录中文件是否有变化

在这里插入图片描述
查看脚本定义的日志文件内容
在这里插入图片描述

同步完成!!让NFS数据得到进一步安全!!

发布了63 篇原创文章 · 获赞 0 · 访问量 2197

猜你喜欢

转载自blog.csdn.net/qq_43058911/article/details/104792394
今日推荐