Это может не относиться к вам, ребята, но я предложу свой подход к этой проблеме.
Наша установка Solr в настоящее время является одним ядром. В будущем мы будем добавлять больше ядер, но подавляющее большинство данных записывается в одно ядро.
Имея это в виду, шардинг не был действительно применим к нам. Я посмотрел на распределенные поиски - разрезание данных и запуск их на разных серверах. Мне казалось, что это слишком усложняло ситуацию. Это усложнит резервное копирование / восстановление, и вы потеряете некоторые функции при выполнении распределенного поиска.
Подход, который мы в итоге сделали, заключался в очень простой кластерной установке master / slave.
Каждый кластер состоит из базы данных master и двух подчиненных solr, которые сбалансированы по нагрузке. Все новые данные записываются в базу данных master, а ведомые устройства настроены на синхронизацию новых данных каждые 5 минут. В нормальных условиях это очень хорошая настройка. Операции переиндексации выполняются на ведущем устройстве, и пока это происходит, ведомые устройства все еще могут считываться.
Когда происходит основная операция переиндексации, я удаляю одного ведомого из балансировщика нагрузки и отключаю опрос другого. Таким образом, клиентская база данных Solr теперь не синхронизируется с главной, а другая обновляется. После завершения переиндексации и синхронизации автономной ведомой базы данных я добавляю ее обратно в балансировщик нагрузки, удаляю другую подчиненную базу данных из балансировщика нагрузки и перенастраиваю ее для синхронизации с ведущим.
Пока это работает очень хорошо. В настоящее время в нашей базе данных содержится около 5 миллионов документов, и это число будет значительно выше в нескольких кластерах.
Надеюсь, это поможет!