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

[经验分享] 企业案例rsync+inotify同步web数据

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-6 09:34:30 | 显示全部楼层 |阅读模式
应用场景:
公司后端有两台nginx服务器,因还在测试阶段。故开发经常需要更新web程序,而每次更新都需要上传两次。现在两台web服务器还好。如果以后随着业务量的增长,4、5台的时候还需要挨个上传就有点苦逼了。故我打算使用rsync+inotify组合来实现服务器的数据时时同步。

rsync介绍:
rsync是linux/UNIX系统下的文件同步和数据传输工具,采用rsync算法使一个客户机和远程文件服务器之间的文件同步。通过rsync可以将同一个服务器的数据从一个分区备份到另一个分区,也可以将本地系统的数据通过网络传输方式备份到任何一个远程主机上,rsync可以在中断之后恢复传输,只传输源文件和目标文件之间不一致的部分,可以执行完整备份或增量备份。rsync有shell(本地模式)、远程shell、查询(列表,与ls命令实现的功能类似)、和服务器模式。

rsync的功能特性:
可以镜像保存整个目录树和文件系统。
可以增量同步数据,文件传输效率高,因此同步时间很短
可以保持原有文件的权限、时间等属性
加密传输数据,保证数据的安全性
可以使用rcp、ssh等方式来传输文件,也可以直接通过Socket连接传输文件
支持匿名传输

一、rsync的安装:
我需要两台web服务器之间的数据时时同步,10.171.22.124向10.172.186.241同步。因此,124称为客户端,241称为服务端。

1.1    服务端安装:
使用yum安装和源码安装都可,我选择源码。
cd /usr/local/src

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

tar -zxvf rsync-3.0.4.tar.gz
cd rsync-3.0.4
./configure --prefix=/usr/local/rsync
make  && make install
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf                      #rsync安装之后要手动创建配置文件和验证密码文件
touch /etc/rsyncd/rsyncd.secrets                  

chmod 600 /etc/rsyncd/rsyncd.conf             #密码文件的权限要设置成600,如果不设置成600,那么客户端连接验证密码时将会提示验证失败。这里一定要注意。到这里安装完成。下面是配置。

1.2    配置服务端:

vim /etc/rsyncd/rsyncd.conf                          #编辑rsync主配置文件

pid file = /var/run/rsyncd.pid
uid = root
gid = root
use chroot = yes   ##是否限制在指定目录,为了安装,一般需要启用
read only = no
hosts allow = 10.171.22.124
max connections = 5
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[web1]
path = /data/wwwroot
list=yes
ignore errors
auth users = webuser
secrets file = /etc/rsyncd/rsyncd.secrets
comment = web home

vim /etc/rsyncd/rsyncd.secrets                     #编辑密码文件
webuser:123456                                            #服务端的密码文件格式是用户名:密码

加入开机启动
echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf" >>/etc/rc.local

1.3    创建同步用的帐号并设置密码
useradd webuser
passwd webuser

1.4    启动rsync
/usr/local/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
ps -elf |grep rsync       #验证是否启动成功
5 S root     15707     1  0  80   0 - 26905 poll_s 11:06 ?        00:00:00 rsync --daemon --config=/etc/rsyncd/rsyncd.conf

至此,服务端的配置就结束了。下面安装配置客户端
传统的rsync是通过crontab定时执行rsync命令来进行同步的,这样就不能保证数据的实时性,因此,必须借助inotify这个软件来监控客户端上的文件变化,只要inotify监测到了客户端文件的变化,那么就执行rsync来进行同步。

一、安装rsync与inotify-tools

rsync和服务端的安装一样,这里就不写了。直接安装inotify并配置。只不过rsync不需要写配置文件了。因为inotify是通过脚本来调用rsync命令连接到服务端同步。由于inotify的特性需要linux内核的支持,在安装inotify-tools前要先确认linux系统内核是否是2.6.13版本以上。
uname -r                 #显示核心版本号
ls -l /proc/sys/fs/inotify

total 0
-rw-r--r-- 1 root root 0 Jun 30 12:41 max_queued_events
-rw-r--r-- 1 root root 0 Jun 30 12:41 max_user_instances
-rw-r--r-- 1 root root 0 Jun 30 12:41 max_user_watches
#有上面这三项输出则表示当前内核支持inotify


tar -zxvf

wget http://sourceforge.net/projects/ ... y-tools-3.13.tar.gz

tar -zxvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure
make && make install

#安装完成后会在/usr/local/bin目录下生成inotifywait和inotifywatch两个命令。inotifywait可以监控任何文件和目录设置,并且可以递归的监控整个目录树,inotifywatch用于收集被监控的文件系统的统计数据。比如每个inotify事件发生多少次等信息。

ls -l /usr/local/bin/inotify*
-rwxr-xr-x 1 root root 38598 Jul  2 17:48 /usr/local/bin/inotifywait
-rwxr-xr-x 1 root root 40361 Jul  2 17:48 /usr/local/bin/inotifywatch
安装完成

二、配置inotify

2.1编辑密码文件
vim /etc/rsyncd/rsync.secrets                            #输入服务端同步的用户密码即可。
chmod 600 /etc/rsyncd/rsync.secrets                #设置权限

2.2
编辑脚本文件
vim /data/wwwroot/inotifyscript.sh                   #脚本放到要同步的目录下。

#!/bin/bash
host=10.172.186.241

src=/data/wwwroot/
dst=web1
user=webuser

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files
        do
        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.secrets $src $user@$host::$dst
                echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
        done



下面对脚本内容简单讲解
host是服务端的IP地址,如果有多个,依次写上。
src是客户端要同步给服务端的目录。
dfs是服务端rsyncd.conf中配置的web1段。
user是服务端rsyncd.conf中配置的同步用户
--timefmt指定时间的输出格式。
--format指定变化文件的详细信息。
这个脚本的作用就是通过inotify监控文件目录的变化,发现文件有变化,进而出发rsync进行同步操作。

2.2    给脚本可执行的权限并加入开机启动
chmod +x /data/wwwroot/inotifyscript.sh
echo "/data/wwwroot/inotifyscript.sh $" >>/etc/rc.local

至此,inotify就配置好了。现在可以进行同步验证了。你可以分别创建文件和目录,修改文件内容、属性权限等。然后观察服务端目录下的文件是否同步。

运维网声明 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-83682-1-1.html 上篇帖子: Centos5.6 VNC安装配置 下篇帖子: linux解决xhost: unable to open display ""
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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