Inotify+Rsync实时同步文件并轮流重启多台Apache服务

一、实验环境:CentOS7

       图片.png




二、实验目标:

          Web_001到Web_N所有的服务器/var/www/html/目录下的数据一致,当该目录下的数据发生变化时,依次重启Apache服务。

                        (应用场景:用于发布tomcat或Apache等根目录下的项目)


三、实验步骤:

    1.登录到每台服务器,修改主机名、IP地址、DNS、并关闭firewalld和selinux防火墙等(改完需要重启电脑才可生效),并安装rsync、httpd、inotify-tools软件等

        (1)主机名称、防火墙等相关修改

        图片.png


        (2)安装rsync、httpd软件

                yum install rsync httpd -y

       

            至此,就可以使用rsync同步目录或者是文件,使用方法和scp类似,再配合计划任务就可以作为日常的周期性数据备份。但需要注意的是,scp只能用于复制小的目录,他的工作原理是需要遍历所有文件后才执行复制数据的动作。

                        例如:/usr/bin/rsync -aqzP --delete /tmp/hbgslz/ [email protected]:/tmp/hbgslz/

                                        192.168.1.45为远程服务器

-l  --links         保留软链结 
-p  --perms         保持文件权限
-o  --owner         保持文件属主信息
-g  --group         保持文件属组信息
-D  --devices      
保持设备文件信息
-P              显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
-q  --quiet      忽略错误信息的输出
-a --archive     归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
-r --recursive    递
归到目录中去。
-t --times      保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新检查出mtime不同从而导致增量传输无效。
-z          在传输过程中压缩文件数据
--delete        以SRC为主
,对DEST进行镜像同步。多则删之,少则补之,注意"--delete"是在接收端DEST上执行的
          

    (3)安装inotify-tools软件(从kernel 2.6.13开始正式并入内核)

               

                wget -c http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

                tar -zxf inotify-tools-3.14.tar.gz

                cd inotify-tools-3.14

                 ./configure --prefix=/usr/local/inotify/

                 make 

                make install

    (4)修改/proc/sys/fs/inotify/目录下max_queued_events、max_user_instances、max_user_watches 的默认值

            下图为默认的参数值:

        图片.png

        

       以max_user_watches为例,修改/etc/sysctl.conf下的内核参数:

            文件路径:/proc/sys/fs/inotify/max_user_watches

            /etc/sysctl.conf添加内容:fs.inotify.max_user_watches = 999999999

            将文件路径红色区域的内容复制到/etc/sysctl.conf里面,并将“/”改为“.”,修改完内核参数后,必须执行sysctl -p 使其立即生效         

        图片.png

        图片.png


    2.登录到Web_N服务器,创建免秘钥登录证书,并复制该秘钥证书到远程服务器Web_001~Web_N台服务器(若服务器数量比较多,可以使用脚本操作,可参考下面重新启动Apache服务的脚本)

                    注意:因为脚本是使用的SSH远程访问后执行命令,所以就算是Web_N本地也需要执行ssh-copy-id [email protected]

            图片.png

            图片.png

    3.数据同步和远程重启Apache服务脚本:

            inotify_rsync_data.sh:用于数据同步

#!/bin/bash
SRC=/var/www/html/
[email protected]:/var/www/html/
/usr/local/inotify/bin/inotifywait -mrq -e access,modify,attrib,close_write,close_nowrite,close,open,moved_to,moved_from,move,create,delete,delete_self,unmount ${SRC} | while read A B C
do
        chmod 755 -R $SRC
        /usr/bin/rsync -aqzP --delete $SRC $DEST
     
done

             inotify_rsync_service.sh:用于数据同步完后重启Apache服务

#!/bin/bash
SRC=/var/www/html/
/usr/local/inotify/bin/inotifywait -mrq -e access,modify,attrib,close_write,close_nowrite,close,open,moved_to,moved_from,move,create,delete,delete_self,unmount ${SRC} | while read A B C
do
      
        #远程登录指定的服务器执行重启Apache的服务,注意配置SSH免秘钥登录 
                for n in {104,45};do
                        ssh 192.168.1.$n "/usr/bin/systemctl restart httpd.service"
                        done
            
done

  

    4.将脚本放置到开机启动文件内,并且后台运行。


                图片.png



    注意事项:

                注意观察文件传输时间。

        图片.png

        图片.png


        

        附:rsync亦可以使用匿名同步,但需要配置/etc/rsyncd.conf、/etc/rsyncd.passwd(该文件需手动在DEST中新建)、/etc/rsyncd.motd(该文件需手动在DEST中新建)等文件

                图片.png

                图片.png

                图片.png

                图片.png

                图片.png

                图片.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章