一、引言

由于项目需求,需要使用两台虚机完成NFS服务的主备功能,备用机器需要实时同步主机器的文件,并记录日志,在此选择inotify和rsync实现

二、inotify和rsync

inotify和rsync是Linux系统中两个非常有用的工具,它们在文件管理和数据同步方面发挥着重要作用。下面我将分别介绍这两个工具的功能以及它们之间的区别。

1、inotify

inotify是Linux内核提供的一个特性,它可以监控文件系统事件,并在事件发生时通知应用程序。inotify能够追踪文件的变化,如创建、删除、修改、移动等,这对于需要实时响应文件变化的应用程序来说非常有用。

inotify的主要特点包括:

  1. 实时监控:inotify能够实时地监控文件系统的变化,及时通知应用程序。
  2. 多种事件类型:inotify支持多种事件类型,包括文件的创建、删除、修改、访问、移动等。
  3. 多文件监控:inotify可以同时监控多个文件和目录。
  4. 非侵入式:使用inotify不会对文件系统的性能产生显著影响。

2、rsync

rsync是一个在Linux和Unix系统中广泛使用的文件同步和传输工具。它特别适用于备份和镜像操作,因为它只会传输文件中更改的部分,从而节省时间和带宽。

rsync的主要特点包括:

  1. 高效传输:rsync只传输文件的变动部分,而不是整个文件,这大大提高了传输效率。
  2. 多种同步选项:rsync提供了多种同步选项,如增量备份、删除同步等。
  3. 安全性:rsync支持加密传输,确保数据安全。
  4. 跨平台:rsync可以在多种操作系统之间传输文件,包括Linux、Unix和Windows。

3、inotify与rsync的区别

  1. 功能定位:inotify主要用于监控文件系统事件,而rsync主要用于文件的同步和传输。
  2. 工作方式:inotify通过监听文件系统的变化来实时通知应用程序,而rsync通过比较文件差异来同步文件。
  3. 使用场景:inotify适合于需要实时响应文件变化的场景,如自动构建系统、实时备份等;rsync适合于需要高效传输和同步大量数据的场景,如数据备份、网站迁移等。
  4. 性能影响:inotify对系统性能的影响较小,因为它是非侵入式的;而rsync在传输大量数据时可能会占用较多的系统资源。

总的来说,inotify和rsync都是强大的Linux工具,它们在文件管理和数据同步方面各有所长。根据具体的应用需求,可以灵活选择使用inotify、rsync或者将它们结合起来,以达到最佳的工作效果。

三、inotify和crontab

inotify和crontab是Linux系统中用于任务调度和文件监控的两种不同机制,它们各自有着独特的功能和应用场景。

1、crontab

crontab是Linux系统中用于定时执行任务的工具。它允许用户配置一系列的定时任务,这些任务会在指定的时间自动执行。crontab的工作方式是基于时间的,用户可以设置任务的执行频率,如每天、每周或每月的特定时间点。crontab适合于那些需要定期执行的任务,如系统维护脚本、日志清理、数据备份等。

2、inotify与crontab的区别

  1. 触发机制:inotify是基于事件的,当文件系统发生变化时触发;而crontab是基于时间的,到达预设时间点时触发。
  2. 实时性:inotify提供实时监控,能够立即响应文件变化;crontab则存在一定的时间延迟,因为任务的执行依赖于到达预定的时间点。
  3. 应用场景:inotify适合于需要实时监控文件变化的场景,如实时数据同步;crontab适合于需要定期执行的任务,如定时备份、系统维护等。

总的来说,inotify和crontab各有优势,它们可以根据不同的需求和场景被灵活地应用在Linux系统的任务调度和文件监控中。在实际使用中,也可以将两者结合起来,比如使用inotify监控文件变化,并在检测到变化时触发crontab中配置的任务,以此来实现更加高效和灵活的系统管理。

四、inotify+rsync具体步骤

1、备用服务器配置

(1)、安装rsync

yum -y install rsync

(2)、添加密码文件

mkdir /etc/rsync
touch rsyncd.secrets
echo 'cib:123456' > /etc/rsync/rsyncd.secrets
chmod 600 /etc/rsync/rsyncd.secrets

(3)、编辑配置文件

vim /etc/rsyncd.conf

添加如下内容

# 日志路径
log file = /var/log/rsyncd.log
# 用户名密码存放路径
secrets file = /etc/rsync/rsyncd.secrets
uid = cib
gid = cib
use chroot = no
read only = false
write only = false
hosts allow = *
# 模块名,在主服务器的监控脚本中使用
[backup]
        comment = backup directory
        # 备份路径
        path = /backup
        auth users = cib
        list = no

以下是 /etc/rsyncd.conf 文件中常见的配置项及其说明:

  1. uid 和 gid:指定运行 rsync 守护进程的用户和组ID。通常出于安全考虑,会创建一个专用的用户和组来运行 rsync 服务。
  2. use chroot:如果设置为 "yes",则 rsync 会将工作目录更改为指定的路径,这样 rsync 就不能访问文件系统以外的目录。
  3. max connections:指定 rsync 服务可以同时接受的最大连接数。
  4. timeout:设置连接超时时间(秒)。
  5. log filepid file:分别指定 rsync 服务的日志文件和进程ID文件的路径。
  6. lock file:指定用于锁定的文件路径,以防止多个 rsync 守护进程同时运行。
  7. hosts allowhosts deny:用于基于 IP 地址的访问控制,允许或拒绝来自特定 IP 地址的连接。
  8. auth users:定义一个或多个允许连接到 rsync 服务的用户列表。
  9. secrets file:指定一个包含用户密码的文件,用于认证。
  10. read only:如果设置为 "yes",则 rsync 服务将不允许写操作,只能同步数据到客户端。
  11. list:如果设置为 "yes",则客户端可以使用 rsync --list-only 命令来列出模块的内容。
  12. path:指定同步数据的本地路径。
  13. comment:添加注释,用于描述模块的用途或其他信息。

(4)、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

我这里是为了方便测试,直接关闭的防火墙,实际项目中肯定不会这样,通常会开通点对点的单向网络

(5)、启动服务

systemctl start rsyncd

注意:

  • 备份文件加授权给访问用户:
    chown xxx:xxx /backup/
    chmod 775 /backup/

2、主服务器配置

(1)、安装rsync

yum -y install rsync

(2)、安装inotify-tools

yum -y install gcc gcc-c++ make
tar zxf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure
make
make install

(3)、修改配置文件

[root@localhost ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Apr  6 02:47 max_queued_events
-rw-r--r-- 1 root root 0 Apr  6 02:47 max_user_instances
-rw-r--r-- 1 root root 0 Apr  6 02:47 max_user_watches

/proc/sys/fs/inotify/目录包含了一些可以调整的参数,这些参数用于控制inotify系统调用的行为。这些参数对于优化inotify的性能和资源使用非常重要,以下是一些关键参数及其说明:

  1. max_queued_events:这个参数指定了inotify实例可以排队的最大事件数量。如果事件队列满了,新的事件会被丢弃,并触发IN_Q_OVERFLOW事件。根据系统负载和需要监控的文件数量,可能需要增加这个值。

  2. max_user_instances:这个参数限制了每个用户可以创建的inotify实例的最大数量。inotify实例用于监控文件系统事件,限制实例数量有助于防止单个用户创建过多的监控点,从而影响系统性能。

  3. max_user_watches:这个参数指定了每个inotify实例可以监控的文件(包括目录)的最大数量。这个限制有助于防止单个监控任务消耗过多的系统资源。

    (4)、添加密码文件

    mkdir /etc/rsync
    # 这里的secret就是访问备份服务器的密码
    echo 'secret' > /etc/rsync/rsyncd.secrets
    chmod 600 /etc/rsync/rsyncd.secrets

    (5)、编写监控脚本inotify.sh

    
    #!/bin/bash
    # 日志路径
    logPath=/usr/local/inotifies-tools-3.13/info.log
    # 监控文件夹
    Path=/files
    # 备份服务器地址
    backup_Server=192.168.85.133

/usr/local/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete $Path | while read file
do
echo $file >> $logPath
/usr/bin/rsync -rltDvz $Path --delete cib@$backup_Server::backup --password-file=/etc/rsync/rsyncd.secrets
done

#### (6)、进程监控
这里我在调试的时候出现过一个问题,使用nohup+&启动脚本后,后台并不能保持脚本运行,即使父进程ID为1也不行,所以又配合crontab加了一个检查监控脚本进程的定时任务脚本,如下:
```shell
logPath=/usr/local/inotifies-tools-3.13/info.log
logTime=`date +"%Y-%m-%d %H:%M:%S"`
PSCOUNT=`ps -ef|grep inotify |grep -v grep`
echo "$logTime PSCOUNT IS $PSCOUNT">> $logPath
if [ "$PSCOUNT" != "" ];then
  echo "$logTime inotify process is running!" >> $logPath
else
  echo "$logTime start inotify..." >> $logPath
  nohup sh /usr/local/inotifies-tools-3.13/inotify.sh &
  echo "$logTime start inotify process success `ps -ef|grep inotify`">> $logPath
fi

再附上一个测试时停止进程的脚本吧

logPath=/usr/local/inotifies-tools-3.13/info.log
logTime=`date +"%Y-%m-%d %H:%M:%S"`
PSCOUNT=`ps -ef | grep inotify | grep -v grep | awk '{print $2}'`
for pid in $PSCOUNT; do
  kill $pid
  echo "$logTime kill inotify pid $pid success" >> $logPath
done

注意:

  • /usr/local/bin/inotifywait/usr/bin/rsync,一定要注意命令所在的路径,防止出错,直接使用全路径,可以使用which命令查看命令所在路径。
  • 脚本及相关路径注意授权chmod 775 xxx.sh
  • 如果使用crontab,注意inotify文件夹及脚本的命名,不要出现重复,不然此命令ps -ef | grep inotify | grep -v grep会查询出问题

    总结

    整个过程其实还是比较容易理解,主要是一些细节方面需要注意,如文件夹的授权,命令的全路径,以上就是我的整个实践过程,供大家参考,欢迎交流。

标签: none

已有 10 条评论

  1. 叼茂SEO.bfbikes.com

  2. 不错不错,我喜欢看

  3. 不错不错,我喜欢看 https://www.237fa.com/

  4. 《探索发现秘境追踪第五季》记录片高清在线免费观看:https://www.jgz518.com/xingkong/107140.html

  5. 每次看到你的文章,我都觉得时间过得好快。 https://www.4006400989.com/qyvideo/81588.html

  6. 《小甘罗拜相(大结局)粤语》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/133637.html

  7. 你的文章让我学到了很多知识,非常感谢。 https://www.yonboz.com/video/57087.html

  8. 《小狗之爱2023》爱情片高清在线免费观看:https://www.jgz518.com/xingkong/33057.html

  9. 《罪之声》动作片高清在线免费观看:https://www.jgz518.com/xingkong/60238.html

  10. 你的才华让人惊叹,请继续保持。 https://www.yonboz.com/video/62797.html

添加新评论