当我试图备份sphinx索引文件时,备份脚本出现了间歇性问题。备份命令或多或少只是/var/lib/sphinxsearch/data中所有文件的一个/var/lib/sphinxsearch/data命令,有一些排除模式(spl、tmp等.)
但我遇到的问题是,我们运行几乎连续的重新索引,这意味着tar是操作符的文件不断地与新版本一起旋转。我有一个解决这个问题的计划,就是使用狮身人面像锁文件:
.spl文件的锁(希望防止重新索引并发运行).spa、.spd、.sph、.spi、.spk、.spm、.spp、.sps).spl文件的锁
我担心的是,我似乎找不到任何关于锁文件在狮身人面像中的行为的详细文档。这将是一个在较低水平上与狮身人面像的并发性交互的工具,我看到了许多潜在的陷阱(并发性让我害怕)。我在想,如果:
发布于 2013-08-06 16:14:56
AFAIK‘锁文件’-只测试是否存在。文件存在时,searchd正在积极地为索引提供服务。文件不存在,索引是安全的重新创建或删除等。
如果锁文件存在,indexer将拒绝重新索引索引。
但是如果您指定--旋转,它将创建一个全新版本的索引(使用.new )。(在文件名中),它不会关心锁文件是否存在,因为它没有触及存在的索引。
完成后向搜索发出信号。然后,searchd将删除活动索引,重命名索引文件,并为新版本提供服务(这样就不会中断服务--它还会保持锁文件的位置)。
因此,停止索引器(假设您使用--旋转)的唯一方法是创建indexname.new.spl --我认为这可能有效--但从未尝试过。我想它不会注意到如果你咨询锁定了什么东西。
一个更好,但更狡猾的方法,以获得一致的备份,可能是拦截信号从索引器到搜索。如果备份正在进行,请先暂停直到备份完成,然后将消息发送给searchd。
(但是,要使索引器向您的拦截器发送消息,可能需要做一些工作,必须创建一个配置文件,并带有一个假的pid文件。所以这是拦截器的pid而不是搜索)
当然,更大的问题是,如果您的索引可以如此容易地重新创建(您经常重述它们),那么为什么还要支持它们呢?如果迷失了,就可以重新创造。
https://stackoverflow.com/questions/18084674
复制相似问题