3

我刚刚将我们的 Sphinx 服务器从 1.10-beta 更新到 2.0.6-release,现在我遇到了一些searchd. 以前我们可以searchd通过指定两个不同的配置文件来运行两个相邻的实例,即:

searchd --config /etc/sphinx/sphinx.conf
searchd --config /etc/sphinx/sphinx.staging.conf

sphinx.conf 监听9306:mysql41, 和9312, 而 sphinx.staging.conf 监听9307:mysql419313

然而,在我们更新到 2.0.6 之后,第二个实例永远不会启动。或者更确切地说.. 输出使它看起来像是开始了,并且创建了一个 pid 文件等。但由于某种原因,只有第一个 searchd 实例继续运行,第二个似乎立即关闭。因此,当尝试运行searchd --config /etc/sphinx/sphinx.conf两次(如果这是第一个启动的)抱怨 pid 文件正在使用中,尝试运行searchd --config /etc/sphinx/sphinx.staging.conf(如果这是第二个启动的实例)一次又一次地“启动”守护进程,只有没有新进程已创建.. 请注意,如果我在第一次创建进程时切换这些命令,那么sphinx.conf实例并没有真正启动。

我已经检查并重新检查了这些端口仅由searchd.

有人知道我接下来可以做什么/尝试吗?我已经在 ubuntu 10.04 LTS 上从源代码安装了它:

./configure --prefix /etc/sphinx --with-mysql --enable-id64 --with-libstemmer
make -j4 install
4

1 回答 1

6

自我注意:检查日志!

RT 索引使用二进制日志来启用崩溃恢复。由于我的旧配置文件没有指定存储这些文件的路径,因此两个实例都searchd尝试写入相同的二进制日志。最后启动的实例当然不允许操作这些文件,因此以致命错误退出:

[Fri Nov  2 17:13:32.262 2012] [ 5346] FATAL: failed to lock
    '/etc/sphinx/var/data/binlog.lock': 11 'Resource temporarily unavailable'
[Fri Nov  2 17:13:32.264 2012] [ 5345] Child process 5346 has been finished, 
    exit code 1. Watchdog finishes also. Good bye!

解决方案很简单,确保在每个配置文件binlog_pathsearchd配置部分中指定一个:

searchd
{
[...]
   binlog_path = /path/to/writable/directory
[...]
}
于 2012-11-02T16:35:06.727 回答