爱她吗 发表于 2018-11-18 07:13:34

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

  一、实验环境:CentOS7


  二、实验目标:
   Web_001到Web_N所有的服务器/var/www/html/目录下的数据一致,当该目录下的数据发生变化时,依次重启Apache服务。
   (应用场景:用于发布tomcat或Apache等根目录下的项目)

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

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


  (2)安装rsync、httpd软件
  yum install rsync httpd -y

  

  至此,就可以使用rsync同步目录或者是文件,使用方法和scp类似,再配合计划任务就可以作为日常的周期性数据备份。但需要注意的是,scp只能用于复制小的目录,他的工作原理是需要遍历所有文件后才执行复制数据的动作。
  例如:/usr/bin/rsync -aqzP --delete /tmp/hbgslz/ root@192.168.1.45:/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 的默认值

  下图为默认的参数值:

  以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 使其立即生效         



  2.登录到Web_N服务器,创建免秘钥登录证书,并复制该秘钥证书到远程服务器Web_001~Web_N台服务器(若服务器数量比较多,可以使用脚本操作,可参考下面重新启动Apache服务的脚本)
  注意:因为脚本是使用的SSH远程访问后执行命令,所以就算是Web_N本地也需要执行ssh-copy-id root@192.168.1.45



  3.数据同步和远程重启Apache服务脚本:
  inotify_rsync_data.sh:用于数据同步
#!/bin/bash
SRC=/var/www/html/
DEST=root@192.168.1.45:/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.将脚本放置到开机启动文件内,并且后台运行。

  注意事项:
  注意观察文件传输时间。



  

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








页: [1]
查看完整版本: Inotify+Rsync实时同步文件并轮流重启多台Apache服务