Manticore Search 3 впервые нарушает совместимость индексов, и он не может загрузить существующие индексы, созданные в версии 2.x. Это означает, что индексы должны быть подготовлены до обновления searchd до версии 3.x.
Чтобы получить индексы в новом формате, есть два варианта:
- Полностью перестроить индексы. Если ваши индексы не очень большие и не являются RealTime, это простой путь.
- Использовать инструмент конвертера, который может автоматически преобразовать любой индекс любого типа (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 для проведения нескольких тестов, а если всё в порядке — скопировать новые файлы индекса на боевой сервер.
Если у вас несколько серверов, которые можно вывести из продакшна, делайте это поочерёдно, обновляя каждый из них. Для распределённых конфигураций 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