SolrCloud и обновления, требующие перестроения индекса и/или изменения кода

SolrCloud, благодаря интеграции с ZooKeeper, имеет несколько полезных утилит для управление и перезагрузка конфигурации ядра/коллекции.

Однако это полностью охватывает только случай тривиальных обновлений, но есть и нетривиальные обновления. Нетривиальный в данном случае означает приводящий к некоторым изменениям, которые делают обновленный узел и/или его ядра несовместимыми с некоторым предыдущим состоянием.

В частности, на ум приходят следующие подслучаи:

  1. Обновление кода, требующее перезапуска базового экземпляра Solr.
  2. Изменение схемы, требующее полной перестройки ядра.

У меня вопрос: как можно использовать SolrCloud и связанные с ним службы Zookeeper, чтобы упростить такие обновления, сделать их более надежными и/или обеспечить более высокую доступность?

Примечание. Я надеялся, что некоторые API/функциональные возможности «понимают» такие обновления. На данный момент наиболее примечательной вещью, которую я обнаружил, является псевдоним коллекций в CoreAdmin, который позволил бы более плавный переход между «старой» и «новой» версиями — немного разочаровывающий, учитывая вышеупомянутые надежды.


person mikołak    schedule 10.12.2013    source источник


Ответы (1)


Я не уверен, что вы имеете в виду под

A code update necessitating a restart of an underlying Solr instance.

Вы имеете в виду, что код Solr изменился? (например, в более новой версии) Или что изменилось приложение, обращающееся к экземпляру Solr? (например, в вашей кодовой базе)

В первом сценарии достаточно просто создать новый экземпляр и добавить его в ZooKeeper, даже если версия отличается.

Во втором случае действительно не имеет значения, что происходит с приложением, обращающимся к данным, верно?

Затем вы упоминаете то, что я считаю наиболее «распространенным» сценарием.

Изменение схемы, требующее полной перестройки ядра.

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

Я думаю, что лучшим подходом здесь было бы попытаться определить глубину изменений и либо перезагрузить обновленную структуру в новый индекс, а затем внести необходимые изменения кода в ваше приложение, чтобы оно запрашивало эти новые структуры, или если окно простоя разрешено, просто удалите и перестройте все это (хотя этот вид атакует ваше требование «обеспечения более высокой доступности»)

Я думаю, что это будет то же самое, что и горячее обновление таблицы БД в SQL, и наличие двух версий приложения, использующих как старую, так и новую структуры, это можно сделать с особой осторожностью, и вам будет лучше разделите их на части, если сможете...

Не уверен, что это поможет, ура,

Майк.

person migueldiab    schedule 19.12.2013
comment
Обновление кода: 1. Я имел в виду изменение в пользовательском коде, специфичном для службы, в экземпляре Solr, но обновление версии является допустимым подвидом. 2. Следует? Вы знаете это факт или это ваше предположение? Запрос на повторную перестройку: я ценю вашу готовность помочь, но вы понимаете, что я уже включил ручное решение в свой вопрос в последнем абзаце? Этот вопрос касается не общих решений этих проблем, а есть ли у SolrCloud/Zookeeper дополнительные средства, которые помогают в их решении, и если да, то как. Извините, но на данный момент у меня есть чтобы понизить ваш ответ. - person mikołak; 20.12.2013
comment
Извините, что я не был вам полезен... Тем не менее, не думайте, что это потребовало отрицательного ответа, так как это может оказаться полезным, если кто-то не найдет конкретный способ сделать то, что вы просите :( Ваш вопрос в его нынешнем виде задает Solr /ZK чтобы понять нетривиальное обновление индекса ядра, этого боюсь не может.Про новую версию Solr работающую на том же ZK, да я знаю, что на факт Ваше ручное решение настолько хорошо, насколько возможно, если вы не хотите что-то закодировать, чтобы предотвратить это (добавление поля codeVersion и запрос для этого или что-то в этом роде) - person migueldiab; 06.01.2014
comment
Нет, это не призывал к отрицательному голосованию, потому что это не наказание и не репрессии; и как спрашивающий, я считаю, что имею право на некоторое мнение о том, полезен ответ или нет (тем более, что в то время была постоянная награда) ;). Наконец, если ваш ответ основан на фактах, отредактируйте его, чтобы объяснить/сослаться на них. - person mikołak; 16.01.2014