rsync+inotify构建多服务器同步方案

简介:

rsync+inotify构建多服务器同步方案

测试环境如下:

系统:Centos 6.5 64位

wKiom1bBcwexij-PAAE4gbASIuQ054.jpg

软件安装

rsync安装(每台服务器上都要安装)

rpm -qa |grep rsync        #查看rsync是否已安装

yum -y  install  rsync

inotify-tools安装(更新服务器上安装)

由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持,也可以用如下方法判断,内核是否支持

一、检查系统内核版本

[root@centos6 Music]# uname -rs

Linux 2.6.32-431.el6.x86_64

 

二、检查系统是否支持inotify

[root@centos6 Music]# ll /proc/sys/fs/inotify

总用量 0

-rw-r--r-- 1 root root 0 2月  15 13:38max_queued_events

-rw-r--r-- 1 root root 0 2月  15 13:38max_user_instances

-rw-r--r-- 1 root root 0 2月  15 13:38max_user_watches

有以上三项就代表系统默认是支持的,接着安装inotify-tools

yum -yinstall inotify-tools

rpm -qa |grepinotify

三、查看inotify默认参数

[root@centos6]#sysctl -a | grep max_queued_events

fs.inotify.max_queued_events =16384

[root@centos6]#sysctl -a | grep max_user_watches

fs.inotify.max_user_watches =8192

fs.epoll.max_user_watches =798863

[root@centos6]#sysctl -a | grep max_user_instances

fs.inotify.max_user_instances =128

四、修改inotify参数

4-1、命令临时生效修改

    [root@centos6]# sysctl -w fs.inotify.max_user_instances=130 

    fs.inotify.max_user_instances = 130 

4-2、文件永久生效修改

[root@centos6]#vi /etc/sysctl.conf 

fs.inotify.max_user_instances=130

4-3、参数说明

max_user_instances:每个用户创建inotify实例最大值

max_queued_events:inotify队列最大长度,如果值太小,会出现错误,导致监控文件不准确

max_user_watches:同步的文件包含的目录数

 

五、配置rsync服务端(172.16.251.93、172.16.251.194)

port=8735

logfile=/var/log/rsync.log       #指定rsync的pid存放路径

pidfile=/var/run/rsyncd.pid      指定rsync的日志存放路径

 

[R8]                                #模块配置名称

path=/Data/public/Music            #同步的目录

usechroot=false

maxconnections=4

read only=no

list=no

uid=root

gid=root

auth users=R8            #认证此模块的用户名

secretsfile=/etc/rsyncd/rs.passwd      #指定存放“用户名:密码”格式的文件

hosts allow=172.16.150.150          #白名单,可以访问此模块的主机

注:不同的分布式更新web节点,只需更改模块名称和path路径

rsync --daemon                           #启动rsync守护进程

echo "rsync --daemon" >>/etc/rc.local     #将rsync服务加入到开机自启动文件

5-1、更新服务器(172.16.150.150)上创建同步目录

     mkdir -p /Data/public/Music

5-2、更新服务器上添加inotify脚本:实现数据实时同步到各web节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  #!/bin/bash
src= /Data/public/Music/                         # 需要同步的源路径
des=R8                              # 目标服务器上 rsync --daemon 发布的模块名称。
rsync_passwd_file= /etc/rsyncd . passwd             # rsync验证的密码文件
ip1=172.16.251.194                # 目标服务器1
ip2=172.16.251.93                 # 目标服务器2
user=R8                            # rsync --daemon定义的验证用户名
cd ${src}    
/usr/bin/inotifywait-mrq  -- format   '%Xe %w%f'  -emodify,create,delete,attrib,close_write,move ./ |  while  read  file         
do
INO_EVENT=$( echo  $ file  awk  '{print$1}' )      
         INO_FILE=$( echo  $ file  awk  '{print$2}' )      
         echo "-------------------------------$(date)------------------------------------"
         echo  $ file
if  [[$INO_EVENT =~  'CREATE'  ]] || [[ $INO_EVENT =~  'MODIFY'  ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE'  ]] || [[ $INO_EVENT =~  'MOVED_TO'  ]]         
then
echo  'CREATEor MODIFY or CLOSE_WRITE or MOVED_TO'
  rsync  -avzcR --port 8735--password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip1}::${des} &&        
rsync  -avzcR--port 8735 --password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip2}::${des}
fi
         if  [[ $INO_EVENT =~  'DELETE'  ]] || [[$INO_EVENT =~  'MOVED_FROM'  ]]
         then
                 echo  'DELETE or MOVED_FROM'
rsync  -avzcR--port 8735 --password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip1}::${des} &&   
rsync  -avzcR--port 8735 --password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip2}::${des}
   fi
   if  [[ $INO_EVENT =~  'ATTRIB'  ]]
   then
        echo 'ATTRIB'
        if  [ ! -d  "$INO_FILE"  ]                
        then
rsync  -avzcR--port 8735 --password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip1}::${des} &&   
rsync  -avzcR --port 8735--password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip2}::${des}
      fi
         fi
done


5-3、设置inotify脚本执行权限:

chmod a+x /rsync.sh

5-4、把脚本加入到开机自动启动文件

echo "/root/rsync.sh &">> /etc/rc.local

5-5、inotifywait 参数说明

inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;

inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事件发生多少次等信息

从上面可知inotifywait是一个监控事件,可以配合shell脚本使用它。与它相关的参数:

语法格式:inotifywait[-hcmrq][-e][-t][--format][-timefmt][...]

-m: 即“--monitor”   表示始终保持事件监听状态。

-r: 即“--recursive” 表示递归查询目录

-q: 即“--quiet”     表示打印出监控事件

-o: 即“--outfile”   输出事情到一个文件而不是标准输出

-s:  即“--syslog”    输入错误信息到系统日志

-e: 即“--event”,   通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等,监控系统事件:创建,移动,删除,修改

-format: 指定输出格式;常用的格式符如:%w:表示发生事件的目录  %f:表示发生事件的文件  %e:表示发生的事件  %T:使用由-timefmt定义的时间格式

-timefmt:指定时间格式,用于-format选项中的%T格式

inotifywatch是收集数据的指令,它的相关参数:

语法格式:inotifywatch[-hvzrqf][-e][-t][-a][-d][...]

-fromfile:从文件中读取需要监控的文件或排除的文件,一个文件一行,排除的文件以"@"开头

-z:  即“-zero”          输出表格的行和列,即使元素为空

-r:  即“-recursive”     监视一个目录下的所有子目录

-t:  即“-timeout”       设置超时时间

-e:   即“-event”         只监听指定的事件

参考资料:http://www.ttlsa.com/web/let-infotify-rsync-fast/

          http://www.it165.net/admin/html/201307/1556.html



rsync+inotify构建多服务器同步方案

测试环境如下:

系统:Centos 6.5 64位

wKiom1bBcwexij-PAAE4gbASIuQ054.jpg

软件安装

rsync安装(每台服务器上都要安装)

rpm -qa |grep rsync        #查看rsync是否已安装

yum -y  install  rsync

inotify-tools安装(更新服务器上安装)

由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持,也可以用如下方法判断,内核是否支持

一、检查系统内核版本

[root@centos6 Music]# uname -rs

Linux 2.6.32-431.el6.x86_64

 

二、检查系统是否支持inotify

[root@centos6 Music]# ll /proc/sys/fs/inotify

总用量 0

-rw-r--r-- 1 root root 0 2月  15 13:38max_queued_events

-rw-r--r-- 1 root root 0 2月  15 13:38max_user_instances

-rw-r--r-- 1 root root 0 2月  15 13:38max_user_watches

有以上三项就代表系统默认是支持的,接着安装inotify-tools

yum -yinstall inotify-tools

rpm -qa |grepinotify

三、查看inotify默认参数

[root@centos6]#sysctl -a | grep max_queued_events

fs.inotify.max_queued_events =16384

[root@centos6]#sysctl -a | grep max_user_watches

fs.inotify.max_user_watches =8192

fs.epoll.max_user_watches =798863

[root@centos6]#sysctl -a | grep max_user_instances

fs.inotify.max_user_instances =128

四、修改inotify参数

4-1、命令临时生效修改

    [root@centos6]# sysctl -w fs.inotify.max_user_instances=130 

    fs.inotify.max_user_instances = 130 

4-2、文件永久生效修改

[root@centos6]#vi /etc/sysctl.conf 

fs.inotify.max_user_instances=130

4-3、参数说明

max_user_instances:每个用户创建inotify实例最大值

max_queued_events:inotify队列最大长度,如果值太小,会出现错误,导致监控文件不准确

max_user_watches:同步的文件包含的目录数

 

五、配置rsync服务端(172.16.251.93、172.16.251.194)

port=8735

logfile=/var/log/rsync.log       #指定rsync的pid存放路径

pidfile=/var/run/rsyncd.pid      指定rsync的日志存放路径

 

[R8]                                #模块配置名称

path=/Data/public/Music            #同步的目录

usechroot=false

maxconnections=4

read only=no

list=no

uid=root

gid=root

auth users=R8            #认证此模块的用户名

secretsfile=/etc/rsyncd/rs.passwd      #指定存放“用户名:密码”格式的文件

hosts allow=172.16.150.150          #白名单,可以访问此模块的主机

注:不同的分布式更新web节点,只需更改模块名称和path路径

rsync --daemon                           #启动rsync守护进程

echo "rsync --daemon" >>/etc/rc.local     #将rsync服务加入到开机自启动文件

5-1、更新服务器(172.16.150.150)上创建同步目录

     mkdir -p /Data/public/Music

5-2、更新服务器上添加inotify脚本:实现数据实时同步到各web节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  #!/bin/bash
src= /Data/public/Music/                         # 需要同步的源路径
des=R8                              # 目标服务器上 rsync --daemon 发布的模块名称。
rsync_passwd_file= /etc/rsyncd . passwd             # rsync验证的密码文件
ip1=172.16.251.194                # 目标服务器1
ip2=172.16.251.93                 # 目标服务器2
user=R8                            # rsync --daemon定义的验证用户名
cd ${src}    
/usr/bin/inotifywait-mrq  -- format   '%Xe %w%f'  -emodify,create,delete,attrib,close_write,move ./ |  while  read  file         
do
INO_EVENT=$( echo  $ file  awk  '{print$1}' )      
         INO_FILE=$( echo  $ file  awk  '{print$2}' )      
         echo "-------------------------------$(date)------------------------------------"
         echo  $ file
if  [[$INO_EVENT =~  'CREATE'  ]] || [[ $INO_EVENT =~  'MODIFY'  ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE'  ]] || [[ $INO_EVENT =~  'MOVED_TO'  ]]         
then
echo  'CREATEor MODIFY or CLOSE_WRITE or MOVED_TO'
  rsync  -avzcR --port 8735--password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip1}::${des} &&        
rsync  -avzcR--port 8735 --password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip2}::${des}
fi
         if  [[ $INO_EVENT =~  'DELETE'  ]] || [[$INO_EVENT =~  'MOVED_FROM'  ]]
         then
                 echo  'DELETE or MOVED_FROM'
rsync  -avzcR--port 8735 --password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip1}::${des} &&   
rsync  -avzcR--port 8735 --password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip2}::${des}
   fi
   if  [[ $INO_EVENT =~  'ATTRIB'  ]]
   then
        echo 'ATTRIB'
        if  [ ! -d  "$INO_FILE"  ]                
        then
rsync  -avzcR--port 8735 --password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip1}::${des} &&   
rsync  -avzcR --port 8735--password- file =${rsync_passwd_file} $( dirname  ${INO_FILE})${user}@${ip2}::${des}
      fi
         fi
done


5-3、设置inotify脚本执行权限:

chmod a+x /rsync.sh

5-4、把脚本加入到开机自动启动文件

echo "/root/rsync.sh &">> /etc/rc.local

5-5、inotifywait 参数说明

inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;

inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事件发生多少次等信息

从上面可知inotifywait是一个监控事件,可以配合shell脚本使用它。与它相关的参数:

语法格式:inotifywait[-hcmrq][-e][-t][--format][-timefmt][...]

-m: 即“--monitor”   表示始终保持事件监听状态。

-r: 即“--recursive” 表示递归查询目录

-q: 即“--quiet”     表示打印出监控事件

-o: 即“--outfile”   输出事情到一个文件而不是标准输出

-s:  即“--syslog”    输入错误信息到系统日志

-e: 即“--event”,   通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等,监控系统事件:创建,移动,删除,修改

-format: 指定输出格式;常用的格式符如:%w:表示发生事件的目录  %f:表示发生事件的文件  %e:表示发生的事件  %T:使用由-timefmt定义的时间格式

-timefmt:指定时间格式,用于-format选项中的%T格式

inotifywatch是收集数据的指令,它的相关参数:

语法格式:inotifywatch[-hvzrqf][-e][-t][-a][-d][...]

-fromfile:从文件中读取需要监控的文件或排除的文件,一个文件一行,排除的文件以"@"开头

-z:  即“-zero”          输出表格的行和列,即使元素为空

-r:  即“-recursive”     监视一个目录下的所有子目录

-t:  即“-timeout”       设置超时时间

-e:   即“-event”         只监听指定的事件

参考资料:http://www.ttlsa.com/web/let-infotify-rsync-fast/

          http://www.it165.net/admin/html/201307/1556.html



本文转自 boy461205160 51CTO博客,原文链接:http://blog.51cto.com/461205160/1742110


相关文章
|
2月前
|
定位技术
GPS北斗卫星同步时钟(时间同步服务器)建设施工部署方案
GPS北斗卫星同步时钟(时间同步服务器)建设施工部署方案
GPS北斗卫星同步时钟(时间同步服务器)建设施工部署方案
|
2月前
|
监控 容灾 定位技术
云服务器的容灾方案
云服务器的容灾方案
|
12天前
|
前端开发 数据处理 API
后端开发:构建稳健与高效的服务器逻辑
后端开发:构建稳健与高效的服务器逻辑
|
7天前
|
Prometheus 监控 Cloud Native
构建高效可靠的Linux服务器监控体系
【4月更文挑战第30天】 在维护企业级Linux服务器的稳定性和性能方面,一个周全的监控体系是至关重要的。本文将探讨如何利用开源工具和实践构建一个高效、灵活且用户友好的监控系统。我们将重点讨论核心组件的选择、配置、报警机制以及数据分析方法,旨在帮助读者打造一个能够实时响应并预防潜在问题的监控环境。
|
8天前
|
存储 安全 网络协议
游戏服务器:构建与运行的艺术
游戏服务器:构建与运行的艺术
21 1
|
9天前
|
中间件 Go API
Golang深入浅出之-Go语言标准库net/http:构建Web服务器
【4月更文挑战第25天】Go语言的`net/http`包是构建高性能Web服务器的核心,提供创建服务器和发起请求的功能。本文讨论了使用中的常见问题和解决方案,包括:使用第三方路由库改进路由设计、引入中间件处理通用逻辑、设置合适的超时和连接管理以防止资源泄露。通过基础服务器和中间件的代码示例,展示了如何有效运用`net/http`包。掌握这些最佳实践,有助于开发出高效、易维护的Web服务。
25 1
|
2月前
|
消息中间件 关系型数据库 MySQL
Flink CDC产品常见问题之把flink cdc同步的数据写入到目标服务器失败如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
2月前
|
存储 数据挖掘
服务器数据恢复—raid5热备盘同步失败的数据恢复案例
一台存储上有一组由多块硬盘组建的raid5阵列,该raid5阵列中的一块硬盘掉线,热备盘自动上线同步数据的过程中,raid阵列中又有一块硬盘掉线,热备盘的数据同步被中断,raid5阵列失效,卷挂载不上,存储瘫痪。 这类raid故障比较常见,服务器raid中的硬盘大多数情况下都是一个批次的同品牌同型号的硬盘,一旦有硬盘出现故障掉线,那么其他硬盘也随时有出故障掉线的可能。
|
6天前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置详细指南,如何选择合适云服务器配置?
阿里云服务器配置选择涉及CPU、内存、公网带宽和磁盘。个人开发者或中小企业推荐使用轻量应用服务器或ECS经济型e实例,如2核2G3M配置,适合低流量网站。企业用户则应选择企业级独享型ECS,如通用算力型u1、计算型c7或通用型g7,至少2核4G配置,公网带宽建议5M,系统盘可选SSD或ESSD云盘。选择时考虑实际应用需求和性能稳定性。
103 6
|
8天前
|
域名解析 弹性计算 Linux
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
本文为大家介绍了2024年购买阿里云服务器和注册域名,绑定以及备案的教程,适合需要在阿里云购买云服务器、注册域名并备案的用户参考,新手用户可通过此文您了解在从购买云服务器到完成备案的流程。
阿里云购买云服务器、注册域名、备案及绑定图文教程参考