Solr safe dataimport and core swap on high-traffic website

Здравствуйте, коллеги-технари,

Предположим, у нас есть сайт (PHP) с миллионами посетителей в месяц и мы запускаем индекс SolR на сайте с 4 миллионами размещенных документов. Solr работает на 4 отдельных серверах, где один сервер является главным, а другие 3 сервера реплицированы.

Там можно вставлять тысячи документов в Solr каждые 5 минут. И кроме того, пользователь может обновить свой аккаунт, что также должно вызвать обновление Solr.

Я ищу безопасную стратегию, чтобы перестроить индекс быстро и безопасно, не пропуская ни одного документа. И иметь безопасную стратегию дельты/обновления. Я обдумал стратегию и хочу поделиться ею с экспертами здесь, чтобы услышать их мнение о том, стоит ли мне придерживаться этого подхода или они могут посоветовать что-то (совершенно) другое.

Solr DataImport

Для всех операций я хочу использовать один обработчик импорта данных. Я хочу смешать данные и дельта-импорт в одном конфигурационном файле, как DataImportHandlerDeltaQueryViaFullImport. В качестве источника данных мы используем базу данных MySQL.

Восстановление индекса

Для восстановления индекса я придумал следующее: мы создаем новое ядро под названием 'reindex' рядом с 'живым' ядром. С помощью dataimporthandler мы полностью перестраиваем весь набор документов (4 миллиона документов), что занимает в общей сложности около 1-2 часов. В живом индексе по-прежнему каждую минуту происходят некоторые обновления, вставки и удаления.

После перестройки, которая заняла около 1-2 часов, новый индекс все еще не совсем актуален. Чтобы сделать задержку меньше, мы делаем один 'дельта' импорт в новое ядро, чтобы зафиксировать все изменения за последние 1-2 часа. После этого мы делаем замену ядра. Обычный обработчик импорта 'delta', который выполняется каждую минуту, подхватит это новое ядро.

Коммитинг обновлений в живое ядро

Чтобы поддерживать наше живое ядро в рабочем состоянии, мы запускаем дельта-импорт каждую минуту. Из-за замены ядра ядро реиндекса (которое теперь является живым ядром) будет отслеживаться и поддерживаться в актуальном состоянии. Я полагаю, что не должно быть проблемой, если этот индекс задержится на несколько минут, потому что dataimport.properties также будет заменен? Дельта-импорт будет обгонять эти минуты задержки, но это должно быть возможно.

Надеюсь, вы понимаете мою ситуацию и мою стратегию и можете посоветовать, правильно ли я поступаю с вашей точки зрения. Также я хотел бы знать, есть ли узкие места, о которых я не подумал? Мы используем Solr версии 1.4.

У меня есть один вопрос: как насчет репликации? Если мастер-сервер поменяет ядро, как с этим справится Solr?

И есть ли риски потери документов при замене и т.д.?

Заранее спасибо!

9
задан Kees Schepers 27 February 2012 в 08:32
поделиться