
1 理论部分
1.1 工具的介绍
Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。
inotify-tools
是一个C库和一组命令行的工作提供Linux下inotify的简单接口。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:
— inotifywait
命令可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。
— inotifywatch
命令用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。
1.2 帮助信息
1.2.1 查看参数
inotifywait -h
1.2.1 部分参数翻译
inotifywait命令参数
-m 是要持续监视变化。
-r 使用递归形式监视目录。
-q 减少冗余信息,只打印出需要的信息。
-e 指定要监视的事件列表。
–timefmt 是指定时间的输出格式。
–format 指定文件变化的详细信息。
可监听的事件:
— access访问,读取文件。
— modify修改,文件内容被修改。
— attrib属性,文件元数据被修改。
— move移动,对文件进行移动操作。
— create创建,生成新文件
— open打开,对文件进行打开操作。
— close关闭,对文件进行关闭操作。
— delete删除,文件被删除
3 最佳实践
3.1 系统的准备
3.1.1 系统基本信息
hostname=node0[1-3].cmdschool.org
ipaddress=10.168.0.16[1-3]
OS = RHEL 8.5 x86_64
3.1.2 配置时区
timedatectl set-timezone Asia/Shanghai
3.2 安装前准备
3.2.1 配置名称解析
echo '10.168.0.161 node01 node01.cmdschool.org' >> /etc/hosts echo '10.168.0.162 node2 node02.cmdschool.org' >> /etc/hosts echo '10.168.0.163 node3 node03.cmdschool.org' >> /etc/hosts
注:以上仅用于临时测试,生产环境请使用DNS代替
3.2.2 配置公钥认证
需要配置“node01”到其他节点的公钥认证,使node1节点访问其他节点无需密码即可链接,详细请参阅以下章节,
简单地,你可以执行以下命令实现,
In node01,
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ssh-copy-id -i ~/.ssh/id_rsa.pub node02 ssh-copy-id -i ~/.ssh/id_rsa.pub node03
配置完成后,你可以使用如下命令测试,如果无需密码登录即成功,
ssh node01
3.2.3 配置安装源
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
3.2.4 安装软件包
dnf install -y rsync inotify-tools
3.3 配置文件同步服务
3.3.1 下载同步脚本
In node01,
mkdir ~/scripts wget https://github.com/tanzhenchao/isync/blob/56fe736364463f2797669031737e14a559819425/isync -O ~/scripts/isync.sh
脚本参数变量参数解析如下(请根据实际情况修改),
– 参数“serverList”定义从服务器的主机名称(多个主机使用“;”分隔)
– 参数“sourceDir”定义主服务器的源目录
– 参数“targetDir”定义从服务器的目标目录
– 参数“threadNo”定义启动rsync同步进程的数量(建议1,多个反而会降低数据同步效率)
– 参数“isyncLog”定义同步脚本日志输出的路径
– 参数“inotifywaitPipo”定义“inotifywait”的命名管道路径
– 参数“isyncPipo”定义“isync”的命名管道路径
– 参数“isyncPid”定义“isync”的PID文件路径
3.3.2 部署同步脚本
cp ~/scripts/isync.sh /usr/bin/isync chmod +x /usr/bin/isync
3.3.3 创建Inotifywait同步服务
vim /usr/lib/systemd/system/inotifywait.service
加入如下配置,
[Unit] Description=Inotifywait Service StartLimitIntervalSec=0 [Service] Type=forking KillMode=process ExecStart=/usr/bin/isync start inotifywait ExecStop=/usr/bin/isync stop inotifywait [Install] WantedBy=multi-user.target
配置创建后,你需要使用如下命令重载使服务生效,
systemctl daemon-reload
然后,使用如下命令控制服务,
systemctl start inotifywait.service systemctl stop inotifywait.service systemctl restart inotifywait.service systemctl status inotifywait.service systemctl enable inotifywait.service
3.3.3 创建Isync同步服务
vim /usr/lib/systemd/system/isync.service
加入如下配置,
[Unit] Description=Isync Service After=syslog.target network-online.target inotifywait.service StartLimitIntervalSec=0 [Service] Type=exec KillMode=process KillSignal=SIGQUIT TimeoutStopSec=5 PIDFile=/var/run/isync/isync.pid ExecStart=/usr/bin/isync start isync [Install] WantedBy=multi-user.target
配置创建后,你需要使用如下命令重载使服务生效,
systemctl daemon-reload
然后,使用如下命令控制服务,
systemctl start isync.service systemctl stop isync.service systemctl restart isync.service systemctl status isync.service systemctl enable isync.service
参阅文档:
=======================================
read命令的使用
—————-
http://www.linuxidc.com/Linux/2013-01/77875.htm
官方wike
—————-
https://github.com/rvoicilas/inotify-tools/wiki#getting
关于rsyun的进程锁
———————-
http://pakey.net/blog/rsync-lock.html
没有评论