Manticore Search 3 впервые нарушает совместимость индексов, и он не может загрузить существующие индексы, созданные в версии 2.x. Это означает, что индексы должны быть подготовлены до обновления searchd до версии 3.x.
Чтобы получить индексы в новом формате, есть два варианта:
- Полностью перестроить индексы. Если ваши индексы не очень большие и не являются RealTime, это простой путь.
- Использовать инструмент
index_converter, который может автоматически преобразовать любой индекс любого типа (plain, percolate, RealTime) из формата Manticore 2 / Sphinx 2 в новый формат
Есть несколько моментов, о которых следует помнить перед началом миграции:
- идентификаторы документов теперь положительные знаковые большие целые числа, а раньше были беззнаковыми
- механизм использования kill-list в индексах значительно изменился
- перед конвертацией RealTime-индекса RAM-чанк должен быть пустым. Если в нём есть данные, их следует записать на диск с помощью FLUSH RAMCHUNK. Эту операцию нужно выполнить на текущей версии 2.x до обновления.
- v3 не ограничивает строковые / json-атрибуты 4 ГБ на индекс. В прошлом иногда индексы приходилось разбивать на множество чанков, лишь бы вместить данные. В v3 такой индекс можно сократить до одного чанка или до более ограниченного количества чанков (если требуется сохранить многопоточный поиск). Ограничение в 4 ГБ также применялось к RT-индексам. Это означало, что OPTIMIZE не мог сократить RT-чанки до одного, если порог в 4 ГБ был достигнут. После конвертации затронутого этим 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 и удалите файлы, чтобы освободить место.
Если у вас есть запасной сервер (например, тестовый или промежуточный), вы можете сначала выполнить обновление индекса и даже установить Manticore 3 для проведения нескольких тестов, а если всё в порядке — скопировать новые файлы индекса на боевой сервер.
Если у вас несколько серверов, которые можно вывести из продакшна, проведите поэтапное обновление (rolling upgrade): выводите их по одному и обновляйте каждый. Для распределённых конфигураций searchd версии 2.x может работать как мастер с узлами версии 3.x, поэтому вы можете сначала обновлять узлы данных, а в конце — мастер-узел.
Конвертер может мигрировать один индекс за раз (с помощью --index), все индексы из указанного конфигурационного файла (с помощью --all) или все индексы из папки (заданной параметром --path). Поскольку конвертер создаёт новую версию существующего индекса, нужно учитывать, что потребуется дополнительное место. Если места мало, индексы следует конвертировать по одному.
Самый простой способ использования конвертера (если вы не используете kill-list) — просто конвертировать всё:
$ 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-list.
Если у вас возникнут какие-либо проблемы, вопросы или комментарии, не стесняйтесь связаться с нами:
- в twitter
- отправив письмо на [email protected]
- разместив сообщение на нашем форуме
- общаясь с нами в нашем сообществе Slack
- через наш трекер ошибок на GitHub
