您也可以通过直接调用 searchd(Manticore Search 服务器二进制文件)来启动 Manticore Search:
searchd [OPTIONS]
请注意,如果没有指定配置文件的路径,searchd 将会根据操作系统在几个位置尝试查找它。
在所有操作系统中,searchd 可用的选项包括:
-
--help(简写为-h)列出在您当前构建的searchd中可以使用的所有参数。 -
--version(简写为-v)显示 Manticore Search 的版本信息。 -
--quiet(简写为-q)抑制启动输出,仅显示错误(横幅和预加载消息)。 -
--config <file>(简写为-c <file>)告诉searchd使用指定的文件作为其配置。 -
--stop用于异步停止searchd,使用 Manticore 配置文件中指定的 PID 文件详细信息。因此,您可能还需要通过--config选项向searchd确认要使用的配置文件。示例:$ searchd --config /etc/manticoresearch/manticore.conf --stop -
--stopwait用于同步停止searchd。--stop本质上是告诉正在运行的实例退出(通过发送 SIGTERM),然后立即返回。--stopwait还会尝试等待直到正在运行的searchd实例实际完成关闭(例如,保存所有待处理的属性更改)并退出。示例:$ searchd --config /etc/manticoresearch/manticore.conf --stopwait可能的退出代码如下:
- 成功时为 0
- 如果连接到正在运行的 searchd 服务器失败时为 1
- 如果服务器在关闭期间报告错误时为 2
- 如果服务器在关闭期间崩溃时为 3
-
--status命令用于通过配置文件(可选提供)中的连接详细信息查询正在运行的searchd实例状态。它将尝试使用配置文件中找到的第一个 UNIX 套接字或 TCP 端口连接到正在运行的实例。成功时,它将查询多个状态和性能计数器值并打印出来。您也可以使用 SHOW STATUS 命令通过 SQL 协议访问相同的计数器。示例:$ searchd --status $ searchd --config /etc/manticoresearch/manticore.conf --status -
--pidfile用于显式强制使用 PID 文件(其中存储了searchd进程标识号),即使其他调试选项另有说明(例如,--console)。这是一个调试选项。$ searchd --console --pidfile -
--console用于强制searchd进入控制台模式。通常,Manticore 作为常规服务器应用程序运行,并将信息记录到日志文件中(如配置文件中指定)。但是,当调试配置或服务器本身的问题,或尝试诊断难以追踪的问题时,强制它直接将信息转储到调用它的控制台/命令行可能更方便。在控制台模式下运行还意味着进程不会分叉(因此搜索是顺序进行的),并且不会写入日志。(需要注意的是,控制台模式不是运行searchd的预期方法。)您可以这样调用它:$ searchd --config /etc/manticoresearch/manticore.conf --console -
--logdebug、--logreplication、--logdebugv和--logdebugvv选项用于在服务器日志中启用额外的调试输出。它们的区别在于日志详细程度级别。这些是调试选项,通常不应启用,因为它们可能会大量污染日志。它们可以临时启用以协助复杂的调试会话。 -
--iostats与日志选项(manticore.conf中必须已激活query_log)一起使用,以提供有关查询过程中执行的输入/输出操作的更详细信息,这会带来轻微的性能损失和稍大的日志。IO 统计信息不包括属性的 IO 操作信息,因为这些是通过 mmap 加载的。要启用它,您可以这样启动searchd:$ searchd --config /etc/manticoresearch/manticore.conf --iostats -
--cpustats用于在查询日志文件(每个查询)和状态报告(聚合)中提供实际的 CPU 时间报告(除了墙时间)。它依赖于 Linux 系统调用clock_gettime(),或者在某些系统上回退到较不精确的调用。您可以这样启动searchd:$ searchd --config /etc/manticoresearch/manticore.conf --cpustats -
--port portnumber(简写为-p)用于指定 Manticore 应监听以接受二进制协议请求的端口,通常用于调试目的。这通常默认为 9312,但有时需要在不同的端口上运行。在命令行上指定它将覆盖配置文件中指定的任何内容。有效范围是 0 到 65535,但 1024 及以下的端口通常需要特权账户才能运行。使用示例:
$ searchd --port 9313 -
--listen ( address ":" port | port | path ) [ ":" protocol ](或-l简写)与--port的作用相同,但允许您指定不仅仅是端口,还可以指定完整的路径、IP 地址和端口,或 Unix 域套接字路径,searchd将监听这些。换句话说,您可以指定 IP 地址(或主机名)和端口号,仅端口号,或 Unix 套接字路径。如果您指定了端口号但未指定地址,searchd 将监听所有网络接口。Unix 路径通过前导斜杠标识。作为最后一个参数,您还可以指定用于此套接字连接的协议处理程序(监听器)。支持的协议值为 'sphinx' 和 'mysql'(自 4.1 版本以来使用的 MySQL 协议)。 -
--force-preread禁止服务器在预读取表文件完成之前服务任何传入连接。默认情况下,在启动时,服务器在表文件懒加载到内存时接受连接。这扩展了该行为,并使其等待直到文件加载完成。 -
--index (--table) <table>(或-i (-t) <table>简写)强制此searchd实例仅服务指定的表。与上面的--port一样,这通常用于调试目的;更长期的更改通常会直接应用于配置文件本身。 -
--strip-path从表中引用的所有文件名(停用词、词形变化、例外等)中剥离路径名。这对于拾取在另一台机器上构建的表(路径布局可能不同)非常有用。 -
--replay-flags=<OPTIONS>开关可用于指定额外的二进制日志重放选项列表。支持的选项有:accept-desc-timestamp,忽略递减的事务时间戳并仍然重放这些事务(默认行为是出现错误时退出)。ignore-open-errors,忽略缺失的二进制日志文件(默认行为是出现错误时退出)。ignore-trx-errors,忽略任何事务错误并跳过当前二进制日志文件(默认行为是出现错误时退出)。ignore-all-errors,忽略上述任何错误(默认行为是出现错误时退出)。
例如:
$ searchd --replay-flags=accept-desc-timestamp -
--coredump用于启用在服务器崩溃时保存核心文件或迷你转储。默认禁用以加快服务器崩溃时的重启速度。这对于调试很有用。$ searchd --config /etc/manticoresearch/manticore.conf --coredump -
--new-cluster启动一个复制集群并使服务器成为带有集群重启保护的参考节点。在 Linux 上你还可以运行manticore_new_cluster。它将通过 systemd 以--new-cluster模式启动 Manticore。 -
--new-cluster-force启动一个复制集群并使服务器成为参考节点,绕过集群重启保护。在 Linux 上你还可以运行manticore_new_cluster --force。它将通过 systemd 以--new-cluster-force模式启动 Manticore。 -
--mockstack分析并报告递归表达式求值、模式匹配操作和过滤处理所需的堆栈大小。此调试选项将计算的堆栈需求输出到控制台以进行优化。输出提供了可用于配置不同操作堆栈需求的环境变量。例如:
$ searchd --mockstack Manticore 7.4.7 e90b5afbb@25032706 dev (columnar 4.1.2 15bbcc7@25031206) (secondary 4.1.2 15bbcc7@25031206) (knn 4.1.2 15bbcc7@25031206) Copyright (c) 2001-2016, Andrew Aksyonoff Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com) Copyright (c) 2017-2025, Manticore Software LTD (https://manticoresearch.com) export MANTICORE_KNOWN_CREATE_SIZE=200 export MANTICORE_START_KNOWN_CREATE_SIZE=4504 export MANTICORE_KNOWN_EXPR_SIZE=16 export MANTICORE_START_KNOWN_EXPR_SIZE=200 export MANTICORE_NONE=32 export MANTICORE_START_NONE=104 export MANTICORE_KNOWN_FILTER_SIZE=224 export MANTICORE_START_KNOWN_FILTER_SIZE=11192 export MANTICORE_KNOWN_MATCH_SIZE=320 export MANTICORE_START_KNOWN_MATCH_SIZE=14552 export NO_STACK_CALCULATION=1
searchd 在 Windows 平台上有一些特定的选项,主要是关于作为服务的处理,仅在 Windows 二进制文件上可用。
请注意,Windows 平台上的 searchd 默认使用 --console 模式,除非你将其安装为服务。
-
--install将searchd安装为 Microsoft 管理控制台(控制面板 / 管理工具 / 服务)中的服务。命令行中除--install外指定的其它参数也将成为服务未来启动时命令行的一部分。例如,作为调用searchd的一部分,你可能还需要使用--config指定配置文件,这时也应该与--install一起指定。调用后,可以通过管理控制台使用常规的启动/停止功能,因此任何启动、停止和重启服务的方法也适用于searchd。示例:C:\WINDOWS\system32> C:\Manticore\bin\searchd.exe --install --config C:\Manticore\manticore.conf如果你希望每次启动
searchd都显示 I/O 统计,需要将该选项与--install命令在同一行指定,如下:C:\WINDOWS\system32> C:\Manticore\bin\searchd.exe --install --config C:\Manticore\manticore.conf --iostats -
--delete从 Microsoft 管理控制台及服务注册的其它位置移除该服务,前提是之前使用了--install。注意,这不会卸载软件或删除表。它意味着服务将不会被服务系统调用,也不会在机器下一次启动时启动。如果当前作为服务运行,当前实例不会被终止(直到下一次重启或使用--stop)。如果服务是用自定义名称(通过--servicename)安装的,卸载时也需要使用相同的名称指定--servicename。示例:C:\WINDOWS\system32> C:\Manticore\bin\searchd.exe --delete -
--servicename <name>在安装或删除服务时赋予searchd一个名字,这个名字将显示在管理控制台;默认是 searchd,但如果在多管理员登录的服务器,或有多个searchd实例的系统上部署,可能需要更具描述性的名字。注意,除非与--install或--delete结合使用,否则此选项无效。示例:C:\WINDOWS\system32> C:\Manticore\bin\searchd.exe --install --config C:\Manticore\manticore.conf --servicename ManticoreSearch -
--ntservice是由 Microsoft 管理控制台传递给searchd的选项,用于在 Windows 平台以服务形式调用它。通常不需要直接调用此选项;这是 Windows 启动服务时自动调用的,但理论上你可以作为命令行中的常规服务调用它(作为--console的补充)。 -
--safetrace强制searchd在崩溃报告中仅使用系统的 backtrace() 调用。在某些(罕见)场景中,这可能是获取报告的“更安全”方式。这是一个调试选项。 -
--nodetach开关(仅限 Linux)告诉searchd不要分离到后台。这也会导致日志条目打印到控制台。查询处理照常进行。这是一个调试选项,也可能在你运行 Manticore 容器化时捕获输出时有用。
Manticore 利用 plugin_dir 来存储和使用 Manticore Buddy 插件。默认情况下,该值在标准安装中对 “manticore” 用户可访问。但是,如果你以不同用户手动启动 searchd 守护进程,守护进程可能无法访问 plugin_dir。为解决此问题,请确保在公共配置章节指定一个搜索守护进程运行用户可写的 plugin_dir。
searchd 支持多个信号:
SIGTERM- 初始清理关闭。新查询将不会被处理,但已启动的查询不会被强制中断。SIGHUP- 启动表的旋转。根据 seamless_rotate 设置值,新查询可能会短暂卡住;客户端将收到临时错误。SIGUSR1- 强制重开搜索d日志和查询日志文件,允许日志文件旋转。
MANTICORE_TRACK_DAEMON_SHUTDOWN=1启用详细日志,当搜索d关闭时会记录详细信息。这在某些关闭问题中非常有用,例如当Manticore长时间关闭或在关闭过程中冻结时。
该镜像是基于 Manticore 包的当前版本。
默认配置包括一个示例实时表,并监听默认端口:
9306用于 MySQL 客户端连接9308用于 HTTP 连接9312用于二进制协议连接(例如,如果您运行集群)
该镜像包含用于从 MySQL、PostgreSQL、XML 和 CSV 文件中轻松索引数据的库。
以下是最简单的方法来启动 Manticore 容器并在其中使用 mysql 客户端登录:
docker run --name manticore --rm -d manticoresearch/manticore && echo "Waiting for Manticore docker to start. Consider mapping the data_dir to make it start faster next time" && until docker logs manticore 2>&1 | grep -q "accepting connections"; do sleep 1; echo -n .; done && echo && docker exec -it manticore mysql && docker stop manticore
请注意,退出 mysql 客户端后,Manticore 容器将停止并删除,导致没有保存的数据。有关在生产环境中使用 Manticore 的信息,请参阅以下内容。
该镜像包含一个可以像这样加载的示例表:
mysql> source /sandbox.sql
此外,mysql 客户端中有一些示例查询,您可以在上面的表上运行这些查询,只需在客户端中使用上/下箭头键查看和运行它们即可。
为了数据持久化,/var/lib/manticore/ 文件夹应挂载到本地存储或其他所需的存储引擎。
实例中的配置文件位于 /etc/manticoresearch/manticore.conf。对于自定义设置,应将该文件挂载到您自己的配置文件。
端口为 9306/9308/9312 用于 SQL/HTTP/二进制,根据您如何使用 Manticore 来暴露它们。例如:
docker run --name manticore -v $(pwd)/data:/var/lib/manticore -p 127.0.0.1:9306:9306 -p 127.0.0.1:9308:9308 -d manticoresearch/manticore
或
docker run --name manticore -v $(pwd)/manticore.conf:/etc/manticoresearch/manticore.conf -v $(pwd)/data:/var/lib/manticore/ -p 127.0.0.1:9306:9306 -p 127.0.0.1:9308:9308 -d manticoresearch/manticore
请确保删除 127.0.0.1:,以便端口对外部主机可用。
Manticore Search Docker 镜像预装了 Manticore 列表库 和 Manticore Buddy。
在许多情况下,您可能希望使用 Manticore 与其他指定在 Docker Compose YAML 文件中的镜像一起使用。以下是在 docker-compose.yml 文件中推荐的 Manticore Search 的最小配置:
version: '2.2'
services:
manticore:
container_name: manticore
image: manticoresearch/manticore
restart: always
ports:
- 127.0.0.1:9306:9306
- 127.0.0.1:9308:9308
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
memlock:
soft: -1
hard: -1
volumes:
- ./data:/var/lib/manticore
# - ./manticore.conf:/etc/manticoresearch/manticore.conf # uncomment if you use a custom config
除了使用暴露的端口 9306 和 9308,您还可以通过运行 docker-compose exec manticore mysql 登录实例。
HTTP 协议在端口 9308 上暴露。您可以将端口映射到本地并使用 curl 连接:
docker run --name manticore -p 9308:9308 -d manticoresearch/manticore
创建一个表:
- JSON
POST /cli -d 'CREATE TABLE testrt ( title text, content text, gid integer)'插入一个文档:
- JSON
POST /insert
-d'{"table":"testrt","id":1,"doc":{"title":"Hello","content":"world","gid":1}}'执行一个简单的搜索:
- JSON
POST /search -d '{"table":"testrt","query":{"match":{"*":"hello world"}}}'默认情况下,服务器将日志发送到 /dev/stdout,可以从主机查看:
docker logs manticore
可以通过传递变量 QUERY_LOG_TO_STDOUT=true 将查询日志重定向到 Docker 日志。
以下是一个简单的 docker-compose.yml 文件,用于定义一个两节点集群:
version: '2.2'
services:
manticore-1:
image: manticoresearch/manticore
restart: always
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
memlock:
soft: -1
hard: -1
networks:
- manticore
manticore-2:
image: manticoresearch/manticore
restart: always
ulimits:
nproc: 65535
nofile:
soft: 65535
hard: 65535
memlock:
soft: -1
hard: -1
networks:
- manticore
networks:
manticore:
driver: bridge
- 启动它:
docker-compose up - 创建集群:
$ docker-compose exec manticore-1 mysql mysql> CREATE TABLE testrt ( title text, content text, gid integer); mysql> CREATE CLUSTER posts; Query OK, 0 rows affected (0.24 sec) mysql> ALTER CLUSTER posts ADD testrt; Query OK, 0 rows affected (0.07 sec) MySQL [(none)]> exit Bye - 在第二个实例上加入集群
$ docker-compose exec manticore-2 mysql mysql> JOIN CLUSTER posts AT 'manticore-1:9312'; mysql> INSERT INTO posts:testrt(title,content,gid) VALUES('hello','world',1); Query OK, 1 row affected (0.00 sec) MySQL [(none)]> exit Bye - 如果您现在回到第一个实例,您将看到新的记录:
$ docker-compose exec manticore-1 mysql MySQL [(none)]> select * from testrt; +---------------------+------+-------+---------+ | id | gid | title | content | +---------------------+------+-------+---------+ | 3891565839006040065 | 1 | hello | world | +---------------------+------+-------+---------+ 1 row in set (0.00 sec) MySQL [(none)]> exit Bye
建议为 Manticore 实例覆盖 Docker 的默认 ulimits:
--ulimit nofile=65536:65536
为了获得最佳性能,可以将表组件“锁定”到内存中。当 Manticore 在 Docker 下运行时,实例需要额外的权限以允许内存锁定。运行实例时必须添加以下选项:
--cap-add=IPC_LOCK --ulimit memlock=-1:-1
如果您想使用自定义配置运行 Manticore,该配置包括表定义,您需要将配置挂载到实例中:
docker run --name manticore -v $(pwd)/manticore.conf:/etc/manticoresearch/manticore.conf -v $(pwd)/data/:/var/lib/manticore -p 127.0.0.1:9306:9306 -d manticoresearch/manticore
请注意,Manticore 搜索在容器内以用户 manticore 运行。对表文件(如创建或旋转纯表)的操作也应在 manticore 用户下进行。否则,文件将由 root 创建,搜索守护进程将没有权限打开它们。例如,这里是如何旋转所有表的:
docker exec -it manticore gosu manticore indexer --all --rotate
您还可以使用 Docker 环境变量设置单独的 searchd 和 common 配置设置。
设置必须带有它们的节名前缀,例如对于 mysql_version_string,变量必须命名为 searchd_mysql_version_string:
docker run --name manticore -p 127.0.0.1:9306:9306 -e searchd_mysql_version_string='5.5.0' -d manticoresearch/manticore
对于 listen 指令,可以使用 Docker 变量 searchd_listen 附加新的监听接口,除了默认的接口。可以声明多个接口,用分号(;)分隔。要仅监听网络地址,可以使用 $ip(从 hostname -i 内部检索)作为地址别名。
例如 -e searchd_listen='9316:http|9307:mysql|$ip:5443:mysql_vip' 将添加一个附加的 SQL 接口在端口 9307,一个 SQL VIP 监听器在端口 5443 仅运行在实例的 IP 上,以及一个 HTTP 接口在端口 9316,此外还有默认的 9306 和 9308。
$ docker run --rm -p 1188:9307 -e searchd_mysql_version_string='5.5.0' -e searchd_listen='9316:http|9307:mysql|$ip:5443:mysql_vip' manticore
[Mon Aug 17 07:31:58.719 2020] [1] using config file '/etc/manticoresearch/manticore.conf' (9130 chars)...
listening on all interfaces for http, port=9316
listening on all interfaces for mysql, port=9307
listening on 172.17.0.17:5443 for VIP mysql
listening on all interfaces for mysql, port=9306
listening on UNIX socket /var/run/mysqld/mysqld.sock
listening on 172.17.0.17:9312 for sphinx
listening on all interfaces for http, port=9308
prereading 0 indexes
prereaded 0 indexes in 0.000 sec
accepting connections
要以自定义启动标志启动 Manticore,请在使用 docker run 时指定它们。确保不要包含 searchd 命令,并包含 --nodetach 标志。以下是一个示例:
docker run --name manticore --rm manticoresearch/manticore:latest --replay-flags=ignore-trx-errors --nodetach
默认情况下,主要的 Manticore 进程 searchd 在容器内以用户 manticore 运行,但启动容器的脚本以默认的 Docker 用户运行,大多数情况下是 root。如果您不希望这样,可以使用 docker ... --user manticore 或在 docker compose yaml 中使用 user: manticore 使一切都在 manticore 用户下运行。请参阅以下内容以了解可能遇到的卷权限问题及其解决方案。
要构建自定义配置文件中指定的普通表格,可以使用 CREATE_PLAIN_TABLES=1 环境变量。它将在 Manticore 启动前执行 indexer --all。如果您不使用数据卷,并且表格容易重建,这非常有用。
docker run -e CREATE_PLAIN_TABLES=1 --name manticore -v $(pwd)/manticore.conf:/etc/manticoresearch/manticore.conf -p 9306:9306 -p 9308:9308 -d manticoresearch/manticore
如果您以非 root 用户运行 Manticore Search 容器(使用 docker ... --user manticore 或在 docker compose yaml 中使用 user: manticore),可能会遇到权限问题,例如:
FATAL: directory /var/lib/manticore write error: failed to open /var/lib/manticore/tmp: Permission denied
这可能是因为用于在容器内部运行进程的用户没有权限修改您挂载到容器的目录。要解决此问题,您可以 chown 或 chmod 挂载目录。如果容器是以 manticore 用户运行,您需要执行:
chown -R 999:999 data
因为容器内部 manticore 用户的 ID 是 999。
在 Windows 上,如果您希望 Manticore 在启动时自动运行,可以将其安装为 Windows 服务。您可以按照 Manticore 作为 Windows 服务 指南中的说明,将 Manticore 安装为服务。
一旦 Manticore 被安装为服务,您可以通过控制面板或者使用 sc.exe 命令行工具启动和停止它。
sc.exe start Manticore
sc.exe stop Manticore
或者,如果您没有将 Manticore 安装为 Windows 服务,也可以通过在命令行运行以下命令来启动它:
.\bin\searchd -c manticore.conf
该命令假设您在当前目录中拥有 Manticore 的可执行文件和配置文件。