Linux:inotify监控,rsync远程同步

在生产环境,有时会需要两台主机的特定目录实现实时同步,比如,将NFS共享目录的数据文件,自动同步到备份服务器特定目录中。

一、实时同步技术介绍

1.1 实现实时同步的方法

inotify+rsync方式:实现数据同步

sersync:功能更强大

1.2 工作原理

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

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

1.3 Inotify:

异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制来获取事件,linux内核从2.6.13起支持inotify,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件。

1.4 实现inotify软件:

inotify-tools,sersync,lrsyncd

1.5 inotify+rsync适用方式:

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

rsync完成对数据的同步

利用脚本进行结合

二、inotify实时监控

2.1 内核支持

内核是否支持inotify

linux支持inotify的内核最小版本为2.6.13

可以通过命令,说明服务器内核支持inotify

[root@Node1 ~]#:ll /proc/sys/fs/inotify/
总用量 0
-rw-r--r--. 1 root root 0 7月  12 2024 max_queued_events
-rw-r--r--. 1 root root 0 7月  12 2024 max_user_instances
-rw-r--r--. 1 root root 0 7月  12 2024 max_user_watches

查看内核参数:

[root@Node1 ~]#:cat /proc/sys/fs/inotify/max_queued_events 
16384
[root@Node1 ~]#:cat /proc/sys/fs/inotify/max_user_instances 
128
[root@Node1 ~]#:cat /proc/sys/fs/inotify/max_user_watches 
8192

 内核参数说明:

max_queued_events:inotify事件队列最大长度,如值太小会出现event Queue Overflow错误,默认值:16384,建议调大。

max_user_isntances:每个用户创建inotify实例最大值,默认是:128

max_user_watches:可以监视的文件的总数量,默认是:8192,建议调大

可以修改内核参数:/etc/sysctl.conf文件

2.2 inotify-tools工具

安装工具需要epel源:

[root@Node1 ~]#:yum install -y epel-release.noarch
......
[root@Node1 ~]#:yum install -y inotify-tools
......

inotify-tools包主要工具有:inotifywait和inotifywatch。

inotifywait:在被监控的文件或目录上等待特定文件系统事件(open,close,delete等)发生,常用于实时同步的目录监控。

inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计。

2.3 inotifywait命令

格式:inotifywait [选项] file [文件1] [文件2] [...]

常用的一些选项:

-m,始终保持事件监听

-d,以守护进程方式执行,和-m相似,配合-o使用

-r,递归监控目录数据信息变化

-q,输出少量事件信息

-o,打印事件到文件中,相当于标准正确输出,注意:使用绝对路径

-e,指定监听的事件,如果省略,表示所有的时间都进行监听

--timefmt,该命令的时间格式:

%y-%m-%d:年-月-日

%H:%M:%S:时:分:秒

例如:--timefmt "%y-%m-%d %H:%M:%S"

--format格式定义:

%T:输出时间格式中定义的时间格式信息。与前面的--timefmt语法格式指定时间日期

%w:监控文件或目录

%f:监控文件或目录信息

%e:显示发生的事件信息,事件默认用","分隔。但是可以使用指定的分割符。%Xe,X分割

指定的事件:-e

create,delete,moved_to,close_write,attrib

三、inotify监控

使用两个终端,一个终端监控,一个终端操作。

在文件夹中执行ls命令,监控,打开目录

-m选项,始终监听

 创建了一个文件a.txt

-rm,递归

时间格式:--format输出定义的时间格式信息

 inotifywait -rm /data/ --timefmt "%y-%m-%d %H-%M-%S" --format "%T %w%f event: %;e"

24-07-12 14-02-04:%T

/data/:%w目录

a.txt:%f文件

event:事件

OPEN;ISDIR:以分号为分割符,监控变更的所有事件

普通的一次性命令程序

四、rsync

rsync远程同步

查看软件:

[root@Node1 data]#:rpm -q rsync
rsync-3.1.2-6.el7_6.1.x86_64
[root@Node1 data]#:rpm -ql rsync
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
/usr/bin/rsync
/usr/lib/systemd/system/rsyncd.service
......

既然是远程同步,有另一台服务器端

基于SSH协议

rsync有三种工作方式:

1.本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
2.本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。
3.本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。

前两者的本质是通过本地或远程shell,而第3种方式则是让远程主机上运行rsyncd服务,使其监听在一个端口上,等待客户端的连接。

常用选项:

-v:显示rsync过程中详细信息。

-a --archive:归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。

-o --owner:保持owner属性(属主)。
-g --group:保持group属性(属组)。

-z:传输时进行压缩提高效率

--delete:以SRC为主,对DEST进行同步。多则删之,少则补之。

-e:指定所要使用的远程shell程序,默认为ssh。

......


ssh协议:将本机目录,通过ssh协议发送给对面, 一次性命令:

rsync -av /etc/passwd root@192.168.114.20:/opt

rsync协议发给对面

将本机的/etc/passwd文件,同步到主机192.168.114.20的root用户,/opt/下

-a保留权限(所有),-v显示过程

加不加/的问题。

现在本地/data下。创建test文件夹,test文件夹里面有两个文件a.txt和b.txt

[root@Node1 data]#:ls
test
[root@Node1 data]#:ls test/
a.txt  b.txt

 文件夹/data/test后加不加/的问题。每次实验,都是清空文件夹后再操作的

加/:rsync -av /data/test/ root@192.168.114.20:/opt

发现,加/不会把test文件夹同步过去。

不加/:rsync -av /data/test root@192.168.114.20:/opt

test后不加/,会把test文件夹一并同步过去。

--delete的用法:我们把本地Node1的test文件夹下b.txt删除。再次同步。

如果远端有与本机多出的文件,会删除远端多于的文件,使其与本机同步。

五、服务端开启rsyncd

5.1 数据同步

当客户端要与服务端同步文件时,数据服务器,和备份服务器(要开启rsync服务)。

开启rsync服务,监听在873端口上。

开启:rsync --daemon

要想开启必须要有配置文件,默认已存在:/etc/rsyncd.conf

端口为873端口

开启之后去客户端使用rsync软件同步文件:

[root@Node1 data]#:rsync rsync://192.168.114.20

服务端没有设置共享目录。使用命令无法看到共享目录。

我这里用的是systemctld启动的。把873的pid使用kill -9杀掉。启动:systemctl start rsyncd

服务端Node2上设置共享目录:

vim /etc/rsyncd.conf

手动添加共享目录:

[backup]

path = /data/

再在客户端查看:

 把客户端的passwd文件同步到客户端的/data/下。提示权限拒绝。

需要设置,指定可读写,默认只读

指定目录给nobody权限,默认用户以nobody访问此目录

给nobody  用户加权限

再次同步: 

执行成功,查看/data/文件夹下:这样Node1的passwd文件就同步过来了。

第二种方式:rsync /etc/fstab 192.168.114.20::backup

5.2 实现验证功能

对配置文件进行以下修改:

max connections = 0   #最大连接

exclude = lost+found/   #不同步文件

use chroot = no   #限制目录,禁锢。只允许操作这个文件夹
reverse lookup = no   #禁用反向解析。不需要,尽量禁用掉
auth users = rsyncuser  #只能通过这个用户

 必须修改权限600

使用客户端测试:

查看是否同步:

客户端设置密码

客户端配置密码文件:

[root@Node1 ~]#:echo "123456" > /etc/pass

也可以将密码赋值给环境变量RSYNC_PASSWORD变量,但是不安全

必须授权:

[root@Node1 ~]#:chmod 600 /etc/pass

非交互式查看共享目录,查看的是服务端那边的目录。

---end---

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
rsync是一个用于文件同步的工具,可以在本地和远程服务器之间进行文件的复制和同步。而inotifyLinux系统中的一个文件系统事件监控框架,可以实时监控文件系统中的事件,比如文件的修改、删除、创建等。通过结合rsyncinotify,可以实现文件的自动同步功能。 在给出的引用\[1\]中,是一个使用rsyncinotify实现自动同步的脚本示例。脚本中定义了一些变量,包括源路径、日志文件、rsync服务器的地址、用户名、密码等。然后通过inotifywait命令监控源路径下的文件系统事件,并在事件发生时使用rsync命令将文件同步远程服务器。 引用\[2\]提到了rsync的其他功能,包括双向同步和使用sersync2实时同步多个远程服务器。同时还提到了inotify作为高效实时的Linux文件系统事件监控框架。 引用\[3\]是修改rsync配置文件的示例,将disable选项改为no,表示启用rsync服务器。 综上所述,通过使用rsyncinotify,可以实现Linux系统中的文件同步和实时监控功能。 #### 引用[.reference_title] - *1* *2* *3* [Linux同步工具inotify+rsync使用详解](https://blog.csdn.net/wuzhongchao/article/details/42364039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值