Вы также можете запустить Manticore Search, вызвав searchd (исполняемый файл сервера Manticore Search) напрямую:
searchd [OPTIONS]
Обратите внимание, что без указания пути к файлу конфигурации searchd попытается найти его в нескольких местах в зависимости от операционной системы.
Опции, доступные для searchd во всех операционных системах:
-
--help(-hдля краткости) выводит список всех параметров, которые можно использовать в вашей конкретной сборкеsearchd. -
--version(-vдля краткости) показывает информацию о версии Manticore Search. -
--config <file>(-c <file>для краткости) указываетsearchdиспользовать указанный файл в качестве конфигурации. -
--stopиспользуется для асинхронной остановкиsearchd, используя данные из файла PID, указанного в конфигурационном файле Manticore. Поэтому вам также может понадобиться указатьsearchd, какой конфигурационный файл использовать с помощью опции--config. Пример:$ searchd --config /etc/manticoresearch/manticore.conf --stop -
--stopwaitиспользуется для синхронной остановкиsearchd.--stopпо сути сообщает запущенному экземпляру выйти (отправляя ему SIGTERM) и сразу возвращается.--stopwaitтакже попытается дождаться, пока запущенный экземплярsearchdдействительно завершит остановку (например, сохранит все ожидающие изменения атрибутов) и выйдет. Пример:$ searchd --config /etc/manticoresearch/manticore.conf --stopwaitВозможные коды выхода:
- 0 при успешном завершении
- 1 если не удалось подключиться к запущенному серверу searchd
- 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используется вместе с опциями логирования (должен быть активированquery_logвmanticore.conf), чтобы предоставить более подробную информацию по каждой операции ввода/вывода, выполненной в ходе запроса, с небольшим снижением производительности и увеличением размера логов. Статистика ввода/вывода не включает информацию о операциях ввода/вывода для атрибутов, так как они загружаются с помощью mmap. Для включения можно запуститьsearchdтак:$ searchd --config /etc/manticoresearch/manticore.conf --iostats -
--cpustatsиспользуется для предоставления отчета о фактическом времени работы CPU (в дополнение к реальному времени) как в файле журнала запросов (для каждого запроса), так и в отчете о статусе (агрегированном). Зависит от системного вызова Linuxclock_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 определяется ведущим слэшем. В качестве последнего параметра можно также указать обработчик протокола (listener), который будет использоваться для подключений на этом сокете. Поддерживаемые значения протокола: 'sphinx' и 'mysql' (протокол MySQL, используемый с версии 4.1). -
--force-prereadзапрещает серверу обслуживать любые входящие подключения до завершения предварительной загрузки файлов таблиц. По умолчанию при запуске сервер принимает подключения, пока файлы таблиц лениво загружаются в память. Эта опция расширяет поведение и заставляет ждать, пока файлы не будут загружены. -
--index (--table) <table>(или-i (-t) <table>для краткости) заставляет этот экземплярsearchdобслуживать только указанную таблицу. Как и--portвыше, это обычно используется для отладки; более долгосрочные изменения обычно применяются непосредственно в конфигурационном файле. -
--strip-pathудаляет пути из всех имен файлов, на которые ссылается таблица (стоп-слова, словоформы, исключения и т.д.). Это полезно для использования таблиц, созданных на другой машине с возможно другой структурой путей. -
--replay-flags=<OPTIONS>переключатель можно использовать для указания списка дополнительных опций воспроизведения бинарного лога. Поддерживаемые опции:accept-desc-timestamp, игнорировать убывающие временные метки транзакций и воспроизводить такие транзакции в любом случае (поведение по умолчанию — завершение с ошибкой).ignore-open-errors, игнорировать отсутствующие файлы binlog (поведение по умолчанию — завершение с ошибкой).ignore-trx-errors, игнорировать любые ошибки транзакций и пропускать текущий файл binlog (поведение по умолчанию — завершение с ошибкой).ignore-all-errors, игнорировать любые описанные выше ошибки (поведение по умолчанию — завершение с ошибкой).
Пример:
$ searchd --replay-flags=accept-desc-timestamp -
--coredumpиспользуется для включения сохранения core-файла или минидампа сервера при сбое. По умолчанию отключено для ускорения перезапуска сервера после сбоя. Полезно для целей отладки.$ searchd --config /etc/manticoresearch/manticore.conf --coredump -
--new-clusterинициализирует кластер репликации и делает сервер эталонным узлом с защитой перезапуска кластера. В Linux также можно запуститьmanticore_new_cluster. Он запустит Manticore в режиме--new-clusterчерез systemd. -
--new-cluster-forceинициализирует кластер репликации и делает сервер эталонным узлом, обходя защиту перезапуска кластера. В Linux также можно запуститьmanticore_new_cluster --force. Он запустит Manticore в режиме--new-cluster-forceчерез systemd. -
--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 Management Console (Панель управления / Администрирование / Службы). Любые другие параметры, указанные в командной строке вместе с--install, также будут частью командной строки при последующих запусках службы. Например, при вызовеsearchdвам, вероятно, также потребуется указать конфигурационный файл с помощью--config, и вы сделаете это вместе с--install. После вызова стандартные средства запуска/остановки станут доступны через консоль управления, так что любые методы запуска, остановки и перезапуска служб также применимы кsearchd. Пример:C:\WINDOWS\system32> C:\Manticore\bin\searchd.exe --install --config C:\Manticore\manticore.confЕсли вы хотите получать статистику ввода-вывода каждый раз при запуске
searchd, необходимо указать опцию в той же строке, что и команда--install, следующим образом:C:\WINDOWS\system32> C:\Manticore\bin\searchd.exe --install --config C:\Manticore\manticore.conf --iostats -
--deleteудаляет службу из Microsoft Management Console и других мест, где регистрируются службы, после предыдущей установки с помощью--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 Management Console вsearchdдля запуска его как службы на платформах Windows. Обычно нет необходимости вызывать это напрямую; это обычно вызывается Windows при запуске службы, хотя теоретически вы можете вызвать это как обычную службу из командной строки (в дополнение к--console). -
--safetraceзаставляетsearchdиспользовать только системный вызов backtrace() в отчетах о сбоях. В некоторых (редких) сценариях это может быть «более безопасным» способом получения такого отчета. Это опция для отладки. -
Переключатель
--nodetach(только для Linux) указываетsearchdне отсоединяться в фоновый режим. Это также приведет к выводу записей журнала в консоль. Обработка запросов работает как обычно. Это опция для отладки и может быть полезна при запуске Manticore в контейнере Docker для захвата его вывода.
Manticore использует plugin_dir для хранения и использования плагинов Manticore Buddy. По умолчанию это значение доступно пользователю "manticore" в стандартной установке. Однако, если вы запускаете демон searchd вручную под другим пользователем, демон может не иметь доступа к plugin_dir. Чтобы решить эту проблему, убедитесь, что вы указали plugin_dir в общем разделе, к которому пользователь, запускающий демон searchd, имеет права на запись.
searchd поддерживает ряд сигналов:
SIGTERM— инициирует корректное завершение работы. Новые запросы обрабатываться не будут, но уже начатые запросы не будут принудительно прерваны.SIGHUP— инициирует ротацию таблиц. В зависимости от значения настройки seamless_rotate новые запросы могут быть кратковременно приостановлены; клиенты получат временные ошибки.SIGUSR1— принудительно открывает заново файлы журнала searchd и журнала запросов, что позволяет выполнять ротацию файлов журнала.
MANTICORE_TRACK_DAEMON_SHUTDOWN=1включает подробное логирование при завершении работы searchd. Это полезно в случае проблем с завершением работы, например, когда Manticore слишком долго завершает работу или зависает в процессе завершения.
Образ основан на текущем релизе пакета Manticore.
Конфигурация по умолчанию включает пример таблицы Real-Time и слушает на стандартных портах:
9306для подключений от MySQL клиента9308для подключений через HTTP9312для подключений по бинарному протоколу (например, если вы запускаете кластер)
Образ поставляется с библиотеками для удобного индексирования данных из 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:, если хотите, чтобы порты были доступны для внешних хостов.
Docker-образ Manticore Search поставляется с предустановленными Manticore Columnar Library и Manticore Buddy
Во многих случаях вы можете захотеть использовать Manticore вместе с другими образами, указанными в YAML-файле Docker Compose. Ниже минимальная рекомендуемая конфигурация для Manticore Search в файле docker-compose.yml:
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
Лог запросов можно направить в Docker лог, передав переменную QUERY_LOG_TO_STDOUT=true.
Вот простой 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
Рекомендуется переопределить стандартные ulimits docker для инстанса Manticore:
--ulimit nofile=65536:65536
Для лучшей производительности компоненты таблиц могут быть "mlocked" в память. При запуске 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 search внутри контейнера запускается под пользователем manticore. Операции с файлами таблиц (например, создание или ротация plain таблиц) также должны выполняться под manticore. Иначе файлы будут созданы под root, и демон поиска не сможет их открыть. Например, вот как можно выполнить ротацию всех таблиц:
docker exec -it manticore gosu manticore indexer --all --rotate
Вы также можете задать отдельные настройки searchd и common через переменные окружения Docker.
Настройки должны иметь префикс с именем секции, пример для 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) как псевдоним адреса.
For example -e searchd_listen='9316:http|9307:mysql|$ip:5443:mysql_vip' will add an additional SQL interface on port 9307, an SQL VIP listener on port 5443 running only on the instance's IP, and an HTTP listener on port 9316, in addition to the defaults on 9306 and 9308, respectively.
$ 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
To start Manticore with custom startup flags, specify them as arguments when using docker run. Ensure you do not include the searchd command and include the --nodetach flag. Here's an example:
docker run --name manticore --rm manticoresearch/manticore:latest --replay-flags=ignore-trx-errors --nodetach
By default, the main Manticore process searchd is running under user manticore inside the container, but the script which runs on starting the container is run under your default docker user which in most cases is root. If that's not what you want you can use docker ... --user manticore or user: manticore in docker compose yaml to make everything run under manticore. Read below about possible volume permissions issue you can get and how to solve it.
To build plain tables specified in your custom configuration file, you can use the CREATE_PLAIN_TABLES=1 environment variable. It will execute indexer --all before Manticore starts. This is useful if you don't use volumes, and your tables are easy to recreate.
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
In case you are running Manticore Search docker under non-root (using docker ... --user manticore or user: manticore in docker compose yaml), you can face a permissions issue, for example:
FATAL: directory /var/lib/manticore write error: failed to open /var/lib/manticore/tmp: Permission denied
This can happen because the user which is used to run processes inside the container may have no permissions to modify the directory you have mounted to the container. To fix it you can chown or chmod the mounted directory. If you run the container under user manticore you need to do:
chown -R 999:999 data
since user manticore has ID 999 inside the container.
В 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 и конфигурационный файл в текущем каталоге.