设为首页 收藏本站
查看: 638|回复: 0

[经验分享] rsync结合inotify实现实时同步

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-10-18 08:16:29 | 显示全部楼层 |阅读模式
背景介绍
中小企业的web应用场景中,web服务器可能是由2台服务器组成,通过DNS的轮询作为负载均衡,此时就需要对2台服务器之间同步的实时性有较高的要求,上一篇文章所介绍的rsync+crontab就不能满足此需求,本章就来介绍使用rsync+inotify完成服务器之间的实时同步
wKiom1gE4E2TjIvKAABwalFgaPY949.jpg
实验说明
操作系统:CentOS6.8,inotify要求内核版本必须为2.6.13以上
源服务器:172.16.10.10/24
目标服务器:172.16.10.20/24
实验目的:将源服务器上的/rsync目录内的内容实时同步到目标服务器/rsync目录下
其他事项:为避免安全机制带来的干扰,源和目标服务器都关闭Selinux和iptables
实验步骤
一、安装rsyncd服务
1、服务器端操作
(1)安装xinetd超级守护进程
yum -y install xinetd       
(2)将rsync设置为开机启动
chkconfig rsync on       
(3)创建rsync配置文件填
vim /etc/rsyncd.conf 并填写下列内容:
# global setting
  log file = /var/log/rsyncd.log        #设置log文件位置
  pid file = /var/run/rsyncd.pid        #设置pid文件位置
  lock file = /var/run/rsyncd.lock        #设置lock文件位置
  uid = rsync        #设置启动时以哪个用户来代替root运行rsync
  gid = rsync       
  list = no        #不允许列出名单
  chroot = no        #不切换根目录
  timeout = 300        #设置超时时间
  ignore errors = yes        #是否忽略错误
  max connections = 10        #最大连接数
# module setting
  [data]        #设定模块名称
  path = /rsync        #指定模块路径
  read only = no        #是否可写
  write only = no        #是否可读
  auth users = rsync_bak #创建允许链接该模块的虚拟用户
  secrets file = /etc/rsyncd.passwd  #账户密码(rsync_bak)的存放文件
  strict modes = yes        #检查secrets file文件的权限是否满足要求
  hosts allow = 172.16.10.20/32   #白名单
  hosts deny = *   #黑名单
(4)创建secrets file文件,并修改其权限
vim /etc/rsyncd.passwd
wKioL1gE4E3yx_iRAAAFv9eVeM8621.jpg
chmod 600 /etc/rsyncdpasswd
(5)创建rsync系统用户
useradd -s /sbin/nologin rsync
(6)创建需要同步的目录并修改其属主和属组
mkdir /rsync
chown -R rsync:rsync /rsync
(7)启动rsyncd服务,并查看873端口是否正常侦听
service xinetd start
netstat -ntl
(8)使用rsync命令将存放rsync_bak帐户名和密码的文件发给客户端 wKioL1gE4E7x2mw8AAAtIDCZRzQ072.jpg
2、客户端操作
(1)查看/etc/rsyncd.passwd是否收到,权限是否为600,再将文件内rsync_bak用户名删除掉,只保留rsync_bak账户的密码
wKiom1gE4E7QITHrAAADL24X0n0369.jpg
(2)再检测rsyncd服务是否可以正常传输,至此rsyncd服务就搭建完成
wKioL1gE4E6DMabFAAAxLnTlk7w634.jpg
二、安装inotify-tools
1、inotify-tools工作机制
inotify更像一个监控进程,它会监视指定的目录或文件,并筛选出信息发生变化的内容,根据这个特性我们可以在rsync客户端安装inotify-tools并将其筛选出来的目录或文件作为输入再通过rsync客户端推送到rsync服务器上以实现两个服务器之间的实时同步
2、安装inotify-tools的2个先决条件
(1)安装inotify-tools的机器内核版本必须是2.6.13及以上
(2)查看机器内核是否支持inotify
wKiom1gE4E_RUfWqAAAmaSzTj4M050.jpg
3、安装inotify-tools操作步骤
(1)从 http://github.com/downloads/rvoi ... y-tools-3.14.tar.gz 下载源码并放到/usr/local/src目录下
(2)解压源码包后进入目录
tar -xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
(3) ./configure --prefix=/usr/local/inotify        #配置configure参数
(4)make && makeinstall        #编译安装
(5)echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh        #添加PATH路径
(6)source /etc/profile.d/inotify.sh        #重读下该文件
(7)ln -sv /usr/local/inotify/include/ /usr/include/inotify #头文件输出
(8)echo "/usr/local/inotify/lib" >> /etc/ld.so.conf.d/inotify.conf #库文件输出
(9)使用ldconfig -v 查看inotify库是否已被加载
wKiom1gE4E_Q1Kf8AAAUk3R2FdA118.jpg
(10)使用vim /etc/man.config,将inotify的man文档输出
wKioL1gE4E_Qt6uRAAAnt65YQJM089.jpg
三、测试inotify的监视功能
1、通过tree可以看到inotify的核心就只有2条命令,可以通过--help查看
wKiom1gE4E_zdvevAAAfP0mYpF4927.jpg
2、mkdir /rsync        #手动创建一个/rsync目录用于inotify的监视
3、inotifywait -mqr --format '%w%f' -e create /rsync 让inotify监视/rsync目录的变化
-q        quite只输出变化信息
-m        monitor监视
-r        recursive递归
--format        指定格式类型
-e        event真实的事件,后面接create,delete等,多个事件间用 , 分隔
4、新开一个终端,在/rsync下创建文件或目录看是否能够被监视到
wKiom1gE4cPhnelhAAAVpNgXcmo533.jpg
四、inotify结合rsync实现实时同步
1、创建存放脚本的目录及脚本文件
mkdir /etc/usr/local/inotify/script
vim /etc/usr/local/inotify/script/rsync.sh
2、填写脚本内容
#!/bin/bash
rsyncSrc=/rsync
rsyncCommand=/usr/local/inotify/bin/inotifywait
$rsyncCommand -mrq --format '%w%f' -e close_write,delete,create $rsyncSrc \
| while read file;do
    cd $rsyncSrc && rsync -az --delete --password-file=/etc/rsyncd.passwd ./  \
rsync_bak@172.16.10.10::data > /dev/null 2>&1
  done
注意:脚本中的./代表同步/rsync目录中的内容而不包括/rsync目录本身,以目录方式执行效率更高
3、给脚本执行权限
chmod +x /usr/local/inotify/script/rsync.sh
4、设置脚本开机自动启动
vim /etc/rc.d/rc.local
sh /usr/local/inotify/script/rsync.sh &
:wq
至此,所有操作完成,重启客户机,开机后使用ps -ef | grep "inotify"查看脚本是否正常启动 wKioL1gE4cPwDN9OAABE40URfWg804.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-287685-1-1.html 上篇帖子: MySQL Replication的主从同步的常用2种配置方式 下篇帖子: rsync+innotify做到同步式更新
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表