Миграция индексов на версию 3

Manticore Search 3 впервые приносит разрыв в совместимости индексов, и он не может загрузить существующие индексы, созданные с 2.x. Это означает, что индексы должны быть готовы перед обновлением searchd до 3.x.

Чтобы иметь индексы в новом формате, есть два варианта:

  1. Полностью перестроить индексы. Если ваши индексы не очень большие и не являются RealTime, это простой путь.
  2. Использовать инструмент конвертации, который может автоматически конвертировать индекс любого типа (plain, percolate, RealTime) с формата Manticore 2 / Sphinx 2 в новый формат.

Существуют несколько вещей, о которых следует знать перед началом миграции:

  • идентификаторы документов теперь являются положительными знаковыми большими целыми числами, ранее будучи беззнаковыми большими целыми числами
  • механизм индексов с использованием kill-lists значительно изменился
  • перед началом конвертации индекса RealTime, RAM chunk должен быть пустым. Если в нем есть данные, их следует записать на диск с использованием FLUSH RAMCHUNK. Эта операция должна быть выполнена на существующем 2.x, перед выполнением обновления.
  • v3 не ограничивает строковые / json атрибуты 4GB на индекс. В некоторых случаях в прошлом индексы должны были быть распределены по множеству chunk только для того, чтобы уместить данные. В v3 индекс такого типа можно сократить до одного или уменьшенного количества chunk (в случае, если желательно сохранить много-поточное выполнение поиска). Ограничение 4GB также применялось к RT индексам. Это означало, что OPTIMIZE не мог уменьшить RT chunks до одного, если порог в 4GB был достигнут. После конвертации RT, затронутого этим, для нового индекса можно применить OPTIMIZE, чтобы достичь одно-чунктного RT индекса.

Manticore Search 3 поставляется с сопутствующим инструментом, который может конвертировать индексы с формата 2.x на формат 3.x. Инструмент предоставляется в отдельном пакете под названием manticore-converter. Этот пакет не вмешивается и не влияет на существующую установку Manticore, так что его можно установить параллельно.

С помощью инструмента index_converter вы можете создать версии индексов 3.x, и когда все будет готово, вы начнете обновление пакета Manticore.

Если у вас есть один сервер:

  • установите пакет manticore-converter
  • используйте index_converter, чтобы создать новые версии индексов в другой папке, отличной от существующей папки данных (используя опцию –output-dir)
  • остановите существующий Manticore, обновите до 3.0, переместите новые индексы в папку данных, запустите Manticore

Чтобы минимизировать время простоя, вы можете скопировать индексы 2.x, конфигурацию (вам нужно будет отредактировать пути здесь для индексов, журналов и разных портов) и бинарные файлы в отдельное место и запустить это на отдельном порту и указать ваше приложение на него.
После того как обновление выполнено до 3.0 и новый демон запущен, вы можете снова указать приложение на нормальные порты. Если все хорошо, остановите копию 2.x и удалите файлы, чтобы освободить место.

Если у вас есть запасной сервер (например, тестовый или staging-сервер), вы можете сначала выполнить обновление индекса здесь и даже установить Manticore 3 для проведения нескольких тестов, и если все в порядке, скопировать новые файлы индексов на производственный сервер.

Если у вас несколько серверов, которые могут быть отключены от производства, делайте это по одному и выполняйте обновление на каждом. Для распределенных настроек, 2.x searchd может работать как мастер с узлами 3.x, так что вы можете сначала обновить данные на узлах, а в конце мастер-узел.

Инструмент конвертации может мигрировать один индекс за раз (используя --index), все индексы из данного файла конфигурации (используя --all) или все индексы из папки (определяемой --path). Поскольку конвертер создаст новую версию существующего индекса, дополнительное пространство, необходимое для этого, должно быть учтено. Если пространство является проблемой, индексы следует конвертировать по одному.

Самый простой способ использования конвертера (в случае, если вы не используете kill-lists) – это просто конвертировать все:

$ index_converter --config /home/myuser/sphinx.conf --all

По умолчанию индексы v3 записываются в ту же папку, а старые индексы копируются с ‘.old’ в их именах файлов. Новые индексы также могут сохраняться в другой папке, используя опцию –output-dir.

$ index_converter --config /home/myuser/sphinx.conf --index myrtindex --output-dir /new/location

Пожалуйста, обратите внимание, что файл hitlists (.spp) просто перемещается в новую версию (так как он не претерпел никаких изменений) и не включен в резервное копирование старой версии. После завершения тестирования версии 3 и отсутствия проблем, резервная копия старых индексов может быть удалена.

В случае дельта индексов новая опция killlist_target должна быть установлена в конфигурации перед началом конвертации. Конвертер также может установить цели с помощью –killlist-target:

$ index_converter --config /home/myuser/sphinx.conf --index deltaindex --killlist-target mainindex:kl

Третий вариант заключается в том, чтобы конвертировать дельта индекс, загрузить его, использовать ALTER KILLLIST_TARGET для установки целей и (пере)загрузить цели, чтобы применить kill-lists.

В случае, если у вас есть какие-либо проблемы, вопросы или комментарии, не стесняйтесь обращаться к нам:

Установить Manticore Search

Установить Manticore Search