在尝试备份sphinx索引文件时,我遇到了备份脚本的间歇性问题。备份命令或多或少仅是tar
中/var/lib/sphinxsearch/data
的所有文件的spl
命令,其中包含一些排除模式(tmp
,.spl
等等。)
但我遇到的问题是我们运行几乎连续的重新索引,这意味着tar操作员的文件不断被新版本旋转。我有计划处理这个问题,即使用sphinx lockfile:
.spa
文件的锁定(希望阻止reindex同时运行).spd
,.sph
,.spi
,.spk
,.spm
,.spp
,.sps
,{ {1}}).spl
文件我担心的是,我似乎无法找到关于完全锁定文件如何在sphinx中表现的详细文档。这将是一个与低级别的sphinx并发交互的工具,我看到了很多潜在的陷阱(并发性让我害怕)。我想知道是否:
答案 0 :(得分:1)
AFAIK'lockfile' - 仅测试是否存在。该文件存在,searchd正在为索引提供服务。文件不存在,索引可以安全地重新创建或删除等。
如果锁存文件存在,索引器将拒绝重新索引索引。
但是如果指定--rotate,它将创建索引的全新版本(文件名中包含.new。),它不关心是否存在锁定文件,因为它没有触及现有索引。
当完成信号搜索时。然后,searchd将删除活动索引,重命名索引文件,并提供新版本(以不中断服务的方式 - 并且还保持锁定文件到位)
所以从那里起停止索引器(假设你使用--rotate)的唯一方法是创建indexname.new.spl - 我认为这可能有效 - 但从未尝试过。我不认为如果你建议锁定一些东西它会注意到。
获得一致性备份的更好但更狡猾的方法可能是拦截从索引器到searchd的信号。有一个进程从索引器监听sighup,如果备份正在进行暂停直到完成,然后将sighup发送到searchd。
(但是可能需要做一些工作才能让索引器将sighub发送到您的截取者,必须创建一个配置文件,带有假的pid文件。所以它的拦截器的pid没有被搜索)
当然更大的问题是,如果您的索引可以如此轻松地重新创建(无论如何经常重新编写它们),为什么要打扰它们呢?如果丢失则可以重新创建。