我们在做双机热备份的情况下,两台服务器分别工作在Master-Slave 模式, 使用Mysql Database Replication实现数据同步。
例如,我们Java系统中有个student表,需要按name做查询关键字,搜索出系统中所有带"lucy" 关键字的students. 这时我们会使用hibernate search来实现,hibernate search结合了lucense实现了full text search, 所以hibernate的Create/Update/Delete操作都会将新数据的index 更新到lucense的索引库,但在Slave Server上通过Mysql同步数据后,并没有进行hibernate的Create/Update/Delete操作,导致没有index生成到lucense的索引库, 从而无法在Slave Server上搜索出新建的并同步到slave server上的students。
为了Slave Server上也能搜索出新建的并同步的数据,需要将lucense的index文件目录也要进行同步。文件同步我们使用了lsyncd来实现,在master server上安装lsyncd, 并修改/etc/lsyncd.conf 文件:
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/tmp/lsyncd.stat",
statusInterval = 1,
insist=true,
}
sync{
default.rsync,
source="/opt/lucene_indexes",
target="<IP>:/opt/lucene_indexes",
rsync={rsh="/usr/bin/ssh -l gate-user -p 50123 -i /home/gate-user/.ssh/id_rsa -o StrictHostKeyChecking=no",}
}
sync 中指定同步lucene_indexes目录,这样只要该目录达到了同步,slave断就能search到同步的数据了。