一、实验环境: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中新建)等文件
转载于:https://blog.51cto.com/hbgslz/2064576