Solr Инкрементное резервное копирование в системе реального времени с большим индексом - PullRequest
6 голосов
/ 21 июня 2010

Я реализую поисковую систему с solr, которая импортирует минимум 2 миллиона документов в день. Пользователь должен искать в импортированном документе как можно скорее (почти в режиме реального времени).

Я использую 2 выделенных Windows x64 с tomcat 6 (режим шарда Solr). для каждого сервера индексируйте около 120 миллионов документов и около 220 ГБ (всего 500 ГБ).

Я хочу получить инкрементную резервную копию из файла индекса solr во время обновления или поиска.
после поиска найдите инструменты rsync для UNIX и DeltaCopy для окон (графический интерфейс rsync для окон). но получить ошибку (исчезла) во время обновления.

как решить эту проблему.

Примечание 1: Копирование файла очень медленное, когда размер файла очень большой. поэтому я не могу использовать этот способ.

Примечание 2. Могу ли я предотвратить повреждение файлов индекса во время обновления, в случае сбоя Windows, сброса оборудования или других проблем?

Ответы [ 2 ]

15 голосов
/ 10 января 2013

Вы можете сделать горячее резервное копирование (т. Е. Во время записи в индекс), используя ReplicationHandler, чтобы скопировать каталог данных Solr в другом месте в локальной системе. Тогда делай что хочешь с этим каталогом. Вы можете запустить резервное копирование в любое время, перейдя по следующему URL-адресу:

http://host:8080/solr/replication?command=backup&location=/home/jboss/backup

Очевидно, что вы можете написать это с помощью wget + cron.

Более подробную информацию можно найти здесь:

http://wiki.apache.org/solr/SolrReplication

В книге Lucene in Action есть раздел, посвященный горячему резервному копированию с Lucene, и мне кажется, что код в Solr's ReplicationHandler использует ту же стратегию, что и описанная там. Один из авторов этой книги даже подробно рассказал о том, как она работает в , другой ответ StackOverflow .

8 голосов
/ 21 июня 2010

Не запускать резервное копирование при обновлении индекса. Вы, вероятно, получите поврежденную (поэтому бесполезную) резервную копию.

Некоторые идеи, чтобы обойти это:

  • Пакетируйте обновления, то есть вместо того, чтобы постоянно добавлять / обновлять документы, добавляйте / обновляйте каждые n минут. Это позволит вам выполнить резервное копирование между этими n минут. Минусы: свежесть документа нарушена.
  • Используйте второе пассивное ядро ​​Solr: установите два ядра на один шард, одно активное и одно пассивное. Все запросы выдаются против активного ядра. Используйте replication , чтобы поддерживать пассивное ядро ​​в актуальном состоянии. Запустите резервное копирование на пассивном ядре. Вам нужно было бы отключить репликацию при выполнении резервного копирования. Минусы: сложные, более подвижные детали, требующие двойного дискового пространства для поддержки пассивного ядра.
...