Здравствуйте коллеги-специалисты,
Предположим, у нас есть (PHP) веб-сайт с миллионами посетителей в месяц, и мы запускаем индекс SolR на веб-сайте с 4 миллионами размещенных документов. Solr работает на 4 отдельных серверах, один из которых является главным, а остальные 3 реплицированы.
Там можно вставлять тысячи документов в Solr каждые 5 минут. Кроме того, пользователь может обновить свою учетную запись, что также должно вызвать обновление solr.
Я ищу безопасную стратегию для перестройки индекса fast и safe без пропуска какого-либо документа. И иметь стратегию safe delta / update. Я подумал о стратегии и хочу поделиться ею с экспертами здесь, чтобы услышать их мнение о том, стоит ли мне придерживаться такого подхода или если они могут посоветовать что-то (совершенно) другое.
Solr DataImport
Для всех операций я хочу использовать один обработчик импорта данных. Я хочу смешать данные и дельта-импорт в один файл конфигурации, например DataImportHandlerDeltaQueryViaFullImport . В качестве источника данных мы используем базу данных MySQL.
Индекс перестройки
Для восстановления индекса я имею в виду следующее; мы создаем новое ядро с именем 'reindex' рядом с 'живым' ядром. С помощью dataimporthandler мы полностью перестраиваем весь набор документов (4 миллиона документов), что в общей сложности занимает около 1-2 часов. В живом индексе по-прежнему каждую минуту появляются обновления, вставки и удаления.
После восстановления, которое заняло около 1-2 часов, новый индекс по-прежнему не очень актуален. Чтобы уменьшить задержку, мы делаем один «дельта» импорт для нового ядра, чтобы зафиксировать все изменения за последние 1-2 часа. Когда это будет сделано, сделайте замену ядра. Обычный обработчик импорта delta, который запускается каждую минуту, поднимет это новое ядро.
Передача обновлений для живого ядра
Чтобы сохранить работоспособность ядра, мы запускаем дельта-импорт каждую минуту. Из-за замены ядра ядро reindex (которое теперь является активным ядром) будет отслеживаться и обновляться. Я предполагаю, что это не должно быть проблемой, если этот индекс задерживается на несколько минут, потому что dataimport.properties также будет поменяться местами? Дельта-импорт превысил эти минуты задержки, но это должно быть возможно.
Я надеюсь, что вы понимаете мою ситуацию и мою стратегию и могли бы посоветовать, правильно ли я делаю это в ваших глазах. Также я хотел бы знать, есть ли какие-либо узкие места, о которых я не думал? Мы работаем с Solr версии 1.4.
У меня есть вопрос: а как насчет репликации? Если главный сервер меняет ядро, как salves справляется с этим?
И есть ли риск потери документов при обмене и т. Д.?
Заранее спасибо!