首页 > 代码库 > 网站文件的同步

网站文件的同步

一个网站,除了有数据库,还有很多别的文件,比如用户上传的图片,你的网站代码之类,光有数据库而没有这些文件你的网站也没法跑起来。

和数据库比起来,网站文件要大得多,而且文件数目也多得多,要做到实时同步必须考虑“增量文件同步”,一般传统的方法是使用  inotify + rsync 写脚本来操作。

我们这里采用  Sersync (https://code.google.com/p/sersync/) 来做网站数据同步  。

 配置 Slave 上的 WWW 同步

采用 Rsync 做数据同步


uid=root
gid=root
use chroot=no
max connections=10
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
munge symlinks = no
hosts allow=这里填写 Master 的 IP 地址
hosts deny=*
list=false
read only=no
ignore errors

[WWW]
path=/var/WWW   ## 网站数据所在的位置


启动 rsync 服务:  rsync –daemon

启动 Master 上的 Sersync2 做数据同步

同步目录的配置 www.xml 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="false"/>
    <filter start="true">
    <exclude expression="^BZFSHOP/Asset/*"></exclude>
    <exclude expression="^BZFSHOP/Runtime/*"></exclude>
    <exclude expression="^BZFSHOP/Trash/*"></exclude>
    <exclude expression="^BZFSHOP/Data/cache/*"></exclude>
    <exclude expression="^BZFSHOP/Data/temp/*"></exclude>
    </filter>
    <inotify>
    <delete start="true"/>
    <createFolder start="true"/>
    <createFile start="true"/>
    <closeWrite start="true"/>
    <moveFrom start="true"/>
    <moveTo start="true"/>
    <attrib start="false"/>
    <modify start="false"/>
    </inotify>
 
    <sersync>
    <localpath watch="/var/WWW">
        <remote ip="Slave的IP" name="WWW"/>
    </localpath>
    <rsync>
        <commonParams params="-artu"/>
        <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
        <userDefinedPort start="false" port="874"/><!-- port=874 -->
        <timeout start="false" time="100"/><!-- timeout=100 -->
        <ssh start="false"/>
    </rsync>
    <failLog path="/tmp/www_rsync_fail_log.sh" timeToExecute="3"/><!--default every 3mins execute once-->
    <crontab start="false" schedule="600"><!--600mins-->
        <crontabfilter start="false">
        <exclude expression="*.php"></exclude>
        <exclude expression="info/*"></exclude>
        </crontabfilter>
    </crontab>
    <plugin start="false" name="command"/>
    </sersync>
 
</head>


启动文件监控同步

## 第一次启动加上 -r 参数做首次同步,之后就不要再加  -r 参数了

./sersync2 -n 2 -d -r -o www.xml


后记

完整的对 数据库 和 所有文件 做了实时同步之后,我们的业务就有了保障。一旦主机房出现严重问题,我们可以使用备份数据立即继续中断的业务,最重要的是,业务数据几乎没有任何的丢失。

不像之前,每天一个备份,如果发生严重故障,只能从“昨天”开始了,中间数据丢失会带来巨大的麻烦。

如果需要更加安全,可以考虑 3 备份或者 N 备份,在 N 个城市同时做实时备份数据,一旦发生多点灾难一样可以迅速恢复业务,当然需要的成本也更高。