我刚刚将我们的Sphinx服务器从1.10-beta更新到2.0.6版本,现在我遇到了searchd
的一些问题。以前我们可以通过指定两个不同的配置文件来运行两个searchd
的实例,即:
searchd --config /etc/sphinx/sphinx.conf
searchd --config /etc/sphinx/sphinx.staging.conf
sphinx.conf侦听9306:mysql41
和9312
,而sphinx.staging.conf侦听9307:mysql41
和9313
。
然而,在我们更新到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
答案 0 :(得分:5)
自我注意:检查日志!
RT-indices使用二进制日志来启用崩溃恢复。由于我的旧配置文件未指定应存储这些文件的路径,因此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_path
配置部分中指定searchd
:
searchd
{
[...]
binlog_path = /path/to/writable/directory
[...]
}