Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33205
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 151
  • 用 户 组: 普通用户
  • 注册时间: 2017-04-07 23:15
个人简介

一步一个脚印,扎扎实实投资自己。

文章分类

全部博文(14)

文章存档

2017年(14)

我的朋友

分类: 系统运维

2017-10-17 14:56:24

环境准备:
Ubuntu 16.04.1 LTS
    server1:192.168.56.101
    server2:192.168.56.102 
    server3:192.168.56.103
inotify-tools-3.14.tar.gz
rsync服务器自带,配置成服务即可,如果是windows服务器,请先用cygwin安装rsync

备注inotify官网


结构图:



rsync服务器搭建(server2,server3): 
注意:由于1024以下端口必须用root启动,因此rsync服务器用root配置启动就好了,这样同步的时候还可以避免权限方面的大坑。
  1. sudo -i
  2. mkdir /etc/rsyncd
  3. touch /etc/rsyncd/{rsyncd.conf,rsyncd.secrets}
  4. echo "nginx:xixisyncpwd" > /etc/rsyncd/rsyncd.secrets
  5. chmod 600 /etc/rsyncd/rsyncd.secrets
配置/etc/rsyncd/rsyncd.conf
  1. pid file = /var/run/rsyncd.pid
  2. port = 873
  3. address = 0.0.0.0
  4. uid = root    #uid与gid设置成root用户可以减少rsync权限方面的坑
  5. gid = root
  6. #incoming chmod = Du=rwx,Dog=rwx,Fu=rwx,Fgo=rwx    #目标目录、文件权限,不设置就源相同
  7. use chroot = yes
  8. read only = false    #使rsync服务器目录可被写入
  9. hosts allow = *    #允许连接的主机
  10. max connections = 5
  11. #motd file = /etc/rsyncd/rsyncd.motd    #自定义欢迎界面,感兴趣可以去掉注释去画画字符界面
  12. log file = /tmp/rsync.log
  13. transfer logging = yes
  14. log format = %t %a %m %f %b
  15. syslog facility = local3
  16. timeout = 300
  17. [nginxconf]
  18. path = /opt/nginx/conf    #同步目录
  19. list = yes
  20. ignore errors
  21. auth users = nginx    #rsyncd.secrets中定义的用户
  22. secrets file = /etc/rsyncd/rsyncd.secrets
  23. comment = sync nginx configs
启动rsync服务
  1. rsync --daemon --config=/etc/rsyncd/rsyncd.conf
将rsync服务加入开机启动 

正常启动可以通过netstat -ntpl | grep 873与cat /var/run/rsyncd.pid看到端口如下图


inotify-tools监控搭建(server1):
安装inotify-tools:
  1. sudo apt-get install inotify-tools    #这类工具建议apt安装。如果编译安装,需要解决一个头问题,麻烦了点 。
编译安装inotify-tools(用apt-get安装的请掠过):
  1. tar -zxf /tmp/inotify-tools-3.14.tar.gz
  2. cd /tmp/inotify-tools-3.14
  3. ./configure
  4. make
  5. make install
创建监控服务程序/opt/filemonitor.sh,内容如下
  1. #!/bin/bash
  2. BASEDIR=/opt/nginx/conf    #以监控nginx配置文件为例,请根据实际情况设置监控路径
  3. inotifywait -mr --timefmt '%Y-%m-%d %T' --format '%T %Xe %w %f' --exclude "swp|4913|\~" -e create,modify,attrib,move,delete $BASEDIR | while read date time dir file
  4. do
  5. EVENTS=`echo $dir | awk -F '/' '{print $1}'`
  6. if [ -n $EVENTS ] ; then
  7. rsync -avz --delete --password-file=/home/ub/.ssh/rsyncd.secrets $BASEDIR/ nginx@192.168.56.102::nginxconf/
  8. rsync -avz --delete --password-file=/home/ub/.ssh/rsyncd.secrets $BASEDIR/ nginx@192.168.56.103::nginxconf/
  9. fi
  10. done
创建rsync密码文件
  1. touch /home/ub/.ssh/rsyncd.secrets
  2. echo "xixisyncpwd" > /home/ub/.ssh/rsyncd.secrets
  3. chmod 600 /home/ub/.ssh/rsyncd.secrets
后端启动监控
  1. chmod 755 /opt/filemonitor.sh
  2. /opt/filemonitor.sh &
如果前端启动监控会看到下图提示
修改server1上nginx配置文件会看到下图文件同步执行情况


扩展:
      我这里用的同步是整个目录完全用rsync算法进行同步,只适合小批量的及时同步,如果有大量文件的情况下,建议将修改/opt/filemonitor.sh脚本。将获取到的监控文件、目录状态,进行增删改查的判断,然后根据判断情况进行单个文件及路径的rsync同步,这样效率高很多。
阅读(730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~