Linux篇(六)------Centos7.0下使用rsync+inotify实现文件双向实时同步

青旅半醒 2024-04-18 12:42 172阅读 0赞

一、背景

两台centos7 服务器,主机A上搭建了nginx服务,实现了两台服务器直接的负载均衡,现在需要将两台服务器之间的文件进行同步,即保障两台服务器上文件一致。
























主机 类型 安装软件 共享目录路径
主机A:172.16.25.126 web服务器、nginx服务器 rsync+inotify www/static
主机B:172.16.25.127 web服务器 rsync+inotify www/static

二、rsync软件的下载与安装

rsync安装有两种方式,一种是yum在线,一种是离线安装

2.1、rsync下载

1、yum方式:

  1. yum install -y rsync

2、源码方式:(官网:http://rsync.samba.org/)

#进入user/local目录

  1. cd /usr/local

#下载rsync源码包(本地上传也行)

  1. wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz

#解压压缩包

  1. tar -zxvf rsync-3.1.2.tar.gz

#删除压缩包

  1. rm -rf rsync-3.1.2.tar.gz

#进入解压文件目录

  1. cd rsync-3.1.2

#安装到指定目录下

  1. ./configure --prefix=/usr/local/rsync
  2. make
  3. make install

2.2、建立rsync密码认证文件

两台主机的rsync用户名和密码建议配置一样,方便配置且不容易搞错

1、yum方式:

  1. vi /etc/rsyncd.passwd #内容格式 用户名:密码 rsync:123456
  2. vi /root/rsyncd.passwd #内容格式 密码 123456

2、源码方式:

  1. vi /usr/local/rsync/rsyncd.passwd #内容格式 用户名:密码 rsync:123456
  2. vi /root/rsyncd.passwd #内容格式 密码 123456

2.3、配置rsync

编辑rsync配置文件

1、yum方式:

  1. vi /etc/rsyncd.conf

2、源码方式:

  1. vi /usr/local/rsync/rsyncd.conf

rsyncd.conf配置文件内容

  1. uid = root
  2. gid = root
  3. use chroot = 0
  4. #post rsync使用的端口号
  5. port = 873
  6. #允许A主机的ip访问,这里我直接配置为全网段,同理在主机B上,这里要配置位主机A的ip
  7. # hosts allow = 172.16.25.127
  8. hosts allow = *
  9. max connections = 0
  10. timeout = 300
  11. pid file = /var/run/rsyncd.pid
  12. ock file = /var/run/rsyncd.lock
  13. log file = /var/log/rsyncd.log
  14. log format = %t %a %m %f %b
  15. transfer logging = yes
  16. syslog facility = local3
  17. #方括号中为模块声明,对应命名,这里module_webA对应主机A的配置,配置主机B的时候,可以输入module_webB
  18. [module_webA]
  19. #指定当前模块在rsync服务器上的同步路径
  20. path = /www/static/
  21. #注释,可以同模块名一样 ,,配置主机B的时候,可以输入module_webB
  22. comment = module_webA
  23. ignore errors
  24. #是否允许客户端上传文件
  25. read only = no
  26. list = no
  27. #指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块
  28. auth users = rsync
  29. #保存密码和用户名文件,需要自己生成;这里需要根据自己rsync配置方式来选择,如果是yum方式,则选择 /etc/rsyncd.passwd,如果是源码包的方式则选择/usr/local/rsync/rsyncd.passwd
  30. secrets file = /etc/rsyncd.passwd
  31. #secrets file = /usr/local/rsync/rsyncd.passwd

2.4、rsync密码文件赋600权限

1、yum方式:

  1. chmod 600 /etc/rsyncd.passwd
  2. chmod 600 /root/rsyncd.passwd

2、源码方式:

  1. chmod 600 /usr/local/rsync/rsyncd.passwd
  2. chmod 600 /root/rsyncd.passwd

2.5、运行rsync,并且开机启动

1、yum方式:

  1. #以守护进程方式启动rsync服务
  2. /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
  3. #开机启动
  4. echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf">>/etc/rc.local

2、源码方式:

  1. #以守护进程方式启动rsync服务
  2. /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
  3. #开机启动
  4. echo " /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf ">>/etc/rc.local

2.6、验证rsync是否配置成功

主机A 向 主机B 进行同步

  1. rsync -vzrtopg --delete --progress /www/static/ rsync@172.16.25.127::module_webB --password-file=/root/rsyncd.passwd

主机B 向 主机A 进行同步

  1. rsync -vzrtopg --delete --progress /www/static/ rsync@172.16.25.126::module_webA --password-file=/root/rsyncd.passwd

三、inotify软件的下载与安装

3.1、inotify下载

#进入user/local目录

  1. cd /usr/local

#下载inotify压缩包

  1. wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate
  2. tar -zxvf inotify-tools-3.14.tar.gz

#进入user/local/inotify-tools-3.14目录

  1. cd inotify-tools-3.14

#安装inotify

  1. ./configure --prefix=/usr/local/inotify
  2. make && make install

#查看是否安装成功

  1. ls -alh /usr/local/inotify/bin/inotify*

#建立软连接

  1. ln -s /usr/local/inotify/bin/inotifywait /usr/bin/inotifywait
  2. ln -s /usr/local/inotify/bin/inotifywatch /usr/bin/inotifywatch

3.2、配置inotify_back.sh同步监控脚本

inotify已经安装好了,需要写一段脚本来自动监控两台服务器文件

  1. vi /usr/local/inotify/inotify_back.sh

#172.16.25.126 主机A配置文件内容:

  1. #!/bin/bash
  2. src=/www/static/
  3. /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file
  4. do
  5. rsync -vzrtopg --delete --progress /www/static/ rsync@172.16.25.127::module_webB --password-file=/root/rsyncd.passwd
  6. echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
  7. done

#172.16.25.1267主机B配置文件内容:

  1. #!/bin/bash
  2. src=/www/static/
  3. /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file
  4. do
  5. rsync -vzrtopg --delete --progress /www/static/ rsync@172.16.25.126::module_webA --password-file=/root/rsyncd.passwd
  6. echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
  7. done

3.3、给inotify_back.sh脚本赋可执行权限

  1. cd /usr/local/inotify/
  2. chmod +x inotify_back.sh

3.4、后台自动运行,并且开机自动启动

运行这个脚本

  1. nohup /usr/local/inotify/inotify_back.sh &

开机自动启动

  1. echo "nohup /usr/local/inotify/inotify_back.sh &" >> /etc/rc.local

3.5、重启服务器服务没有自动启动

前面我们已经配置rsync自动启动服务,和inotify自动启动脚本

  1. echo " /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf ">>/etc/rc.local
  2. echo "nohup /usr/local/inotify/inotify_back.sh &" >> /etc/rc.local
  3. vi /etc/rc.local

发现文件里面有下面两行代码

  1. /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf
  2. nohup /usr/local/inotify/inotify_back.sh &

但是我重启服务器发现,rsync服务没有自动重启。

原因:查看rc.local,会发现这只是一个软连接,真实的文件是/etc/rc.d/rc.local ,并且在文件中有一行注释:

  1. #Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure

由于/etc/rc.local是/etc/rc.d/rc.local的软连接,所以必须确保/etc/rc.local和/etc/rc.d/rc.local都有x权限(可执行)

所以还需要执行命令

  1. chmod +x /etc/rc.d/rc.local

最后重启服务器,发现成功!

四、重启rsync服务

4.1、查看rsync进程

  1. ps -ef | grep rsync
  2. 如果启动,会显示如下
  3. root XXX 1 0 ? 00:00:00 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

4.2、关闭rsync服务

  1. kill -9 XXX

4.2、重启rsync服务

  1. /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

执行一般会报错:提示

  1. failed to create pid file /var/run/rsyncd.pid: File exists
  2. #删除再执行
  3. rm -rf /var/run/rsyncd.pid
  4. /usr/bin/rsync --daemon --config=/etc/rsyncd.conf

发表评论

表情:
评论列表 (有 0 条评论,172人围观)

还没有评论,来说两句吧...

相关阅读