SolrCloud: невозможно создать коллекцию, проблемы с блокировкой

Я пытался реализовать SolrCloud, и все работает нормально, пока я не попытаюсь создать коллекцию из 6 осколков. Моя установка выглядит следующим образом:

  • 5 виртуальных серверов под управлением Ubuntu 14.04, размещенных одной компанией в разных центрах обработки данных
  • 3 сервера под управлением ZooKeeper 3.4.6 для ансамбля
  • 2 сервера, на каждом из которых работает сервер Solr 5.1.0 (Jetty)
  • Каждый экземпляр Solr имеет дополнительный диск ext4 емкостью 2 ТБ для индексов, смонтированный в / solrData / Indexes. Я установил это значение в solrconfig.xml через <dataDir>/solrData/Indexes</dataDir> и загрузил его в ансамбль ZooKeeper. Обратите внимание, что эти вторичные диски не являются ни NAS, ни NFS, что, как я знаю, может вызвать проблемы. Пользователь solr владеет /solrData.

Вся внутрисерверная связь осуществляется через частный IP-адрес, поскольку все они размещаются в одной компании. Я использую iptables для брандмауэра, порты открыты, и все серверы успешно обмениваются данными. Загрузка конфигурации в ZooKeeper прошла успешно, и я вижу через интерфейс администратора Solr, что доступны оба узла.

Проблема начинается, когда я пытаюсь создать коллекцию с помощью следующей команды:

http://xxx.xxx.xxx.xxx:8983/solr/admin/collections?action=CREATE&name=coll1&maxShardsPerNode=6&router.name=implicit&shards=shard1,shard2,shard3,shard4,shard5,shard6&router.field=shard&async=4444

Через ведение журнала пользовательского интерфейса Solr я вижу, что несколько команд создания индекса выполняются одновременно, например:

6/25/2015, 7:55:45 AM WARN SolrCore [coll1_shard2_replica1] Solr index directory '/solrData/Indexes/index' doesn't exist. Creating new index...
6/25/2015, 7:55:45 AM WARN SolrCore [coll1_shard1_replica2] Solr index directory '/solrData/Indexes/index' doesn't exist. Creating new index...

В конечном итоге задача сообщается как завершенная, но в журнале есть ошибки блокировки:

Error creating core [coll1_shard2_replica1]: Lock obtain timed out: SimpleFSLock@/solrData/Indexes/index/write.lock
SolrIndexWriter was not closed prior to finalize(),​ indicates a bug -- POSSIBLE RESOURCE LEAK!!!
Error closing IndexWriter

Если я посмотрю на облачный граф, возможно, пара шардов будет создана, другие закрыты или восстанавливаются, и если я перезапущу Solr, ни одно из ядер не сможет запуститься.

Теперь я знаю, что вы собираетесь сказать: следите за этим сообщением SO и измените solrconfig.xml настройки блокировки на следующие:

<unlockOnStartup>true</unlockOnStartup>
<lockType>simple</lockType>

Я сделал это, , и это ни на что не повлияло. Отсюда вопрос. Мне вот-вот придется выпустить в производство единственный экземпляр Solr, чего я ненавижу. Кто-нибудь знает, как это исправить?


person LandonC    schedule 25.06.2015    source источник
comment
Итак, вы пытаетесь создать 6 шардов на двух серверах? Я не уверен, что вы используете правильную команду. Можете ли вы вместо этого попробовать этот запрос и посмотреть, работает ли он. 1.1.1.1:8983/solr/admin/ Я не вижу в вашей команде параметра createNodeSet, который используется для указания, по каким серверам распределить осколки.   -  person jay    schedule 26.06.2015
comment
@jay Спасибо, но не повезло: все исключения одинаковы.   -  person LandonC    schedule 28.06.2015


Ответы (1)


Судя по введенной вами записи журнала, похоже, что Solr может создавать каталог данных (индекс) для КАЖДОГО осколка в одной и той же папке.

 Solr index directory '/solrData/Indexes/index' doesn't exist. Creating new index...

Это сообщение было показано для двух разных коллекций и ссылается на одно и то же место. Что я обычно делаю, так это меняю свой Solr Home на другой каталог, в котором будут создаваться все "экземпляры" коллекции. Затем я вручную редактирую core.properties для каждого шарда, чтобы указать расположение данных индекса.

person nick_v1    schedule 26.06.2015
comment
Я уверен, что вы правы насчет того, что все шарды используют один и тот же каталог, но я никогда не видел в документации ничего, что указывало бы на то, что каждый шард должен иметь свой собственный каталог. Ты это говоришь? Похоже, это идет вразрез с файлом solrconfig.xml, который хранится в ZooKeeper, имеющем единственное свойство dataDir. - person LandonC; 28.06.2015
comment
Конфиги будут храниться в zookeeper, но вам все равно понадобится instanceDir. Кроме того, каталоги данных должны быть разными для каждого шарда. - person nick_v1; 29.06.2015
comment
Хорошо, я полностью пропустил это. Есть ли в документации ссылка на instanceDir и понятие каталога / шарда? Я хочу быть уверенным, что могу направить своих коллег в нужное место в мое отсутствие. Спасибо! - person LandonC; 29.06.2015
comment
Если этот ответ был полезен, отметьте его как ответ. Спасибо - person nick_v1; 29.06.2015
comment
Редактирование core.properties вручную и установка каждого шарда в его собственный каталог данных - это ответ, несмотря на то, что эта информация не предоставляется нигде в документации Solr. - person LandonC; 08.07.2015