2013-04-05 2 views
15

У меня есть настройка SolrCloud с использованием автономного zookeeper. Но теперь я хочу внести некоторые изменения в свой Schema.xml и перезагрузить ядро. Проблема в том, что когда я запускаю один сервер Solr (no solrcloud), загружается новая схема, но я не знаю, как перезагрузить схему на всем сервере репликации. Я попытался перезагрузить схему на одном из серверов без какого-либо эффекта. Есть ли способ, в котором я могу перезагрузить мой schema.xml в Solr в распределенной настройке репликации, которая использует zookeeper.Перезагрузка Zookeeper solr conf (schema.xml)

ответ

25

Только что нашел решение, необходимое для изменения измененной конфигурации на ансамбль zookeeper.

Просто используйте

sh zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -collection collection1 -confname myconf -solrhome ../solr -confdir ../solr/collection1/conf 

zkcli.sh присутствует в примере/облако-скрипты

+1

Вы '-confdir ../ Solr/collection1/conf' дважды. – zengr

+0

@zengr: Fixed :) –

+0

Это все? Вам не нужно перезагружать узлы или коллекцию? Как только он загружается, он используется во всей коллекции? – johnnyboy

1

Ниже команды для Windows,

будет почти то же самое в Unix мы просто должны изменить путь к Solr lib и разделителю класса-пути ; & : Так как его java-команда так должна работать и в Unix.

java -Dlog4j.configuration="file:E:/solr-5.5.1/server/scripts/cloud-scripts/log4j.properties" -classpath .;E:/solr-5.5.1/server/solr-webapp/webapp/WEB-INF/lib/*;E:/solr-5.5.1/server/lib/ext/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.42.13:2787 -confdir E:/New_Solor_Conf -confname Solor_conf 

Краткие сведения о команде следующим образом:

Конфигурация log4j для ведения журнала.

  • -Dlog4j.configuration = "Файл: E: /solr-5.5.1/server/scripts/cloud-scripts/log4j.properties путь

класса для запуска" org.apache .. .solr.cloud.ZkCLI» класс

убедитесь, UNIX и Windows, будут иметь разные: (Unix Seperator); (Windows Separator)

  • -classpath. E: /solr-5.5.1/server/solr-webapp/webapp/WEB-INF/lib/ ; E: /solr-5.5.1/server/lib/ext/
  • -zkhost 192.168.42.13 : 2787 (Удаленный хост и порт, где Solr Zookeeper работает)
  • -confdir E: (. Локальный каталог, что нам нужно, чтобы загрузить)/New_Solor_Conf
  • -confname Solor_conf Удаленное имя экземпляра.

Если вы не будете использовать правильный путь класса вы получите ошибку, как:

Error: Could not find or load main class org.apache.solr.cloud.ZkCLI 

или

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFacto 
    ry 
      at org.apache.solr.common.cloud.SolrZkClient.<clinit>(SolrZkClient.java: 
    71) 
      at org.apache.solr.cloud.ZkCLI.main(ZkCLI.java:183) 
    Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
      at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
      at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 

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

1

Ответ, помеченный как правильный, неверен. Вы должны использовать Solr Collection API

Solr Collection API указаны для SolrCloud, и перезагрузка конфигурации будет распространена во всем кластере. Насколько мне известно, Solr Collection API доступен, по крайней мере, от Solr 4.8.

Процедура несколько отличается, и с помощью этих API вы можете перезагрузить конфигурацию всего кластера только одним вызовом API.

Загрузите обновленную конфигурацию утилитой Solr zkcli.sh. Обратите внимание, чтобы не путать Solr zkcli.sh с Zookeeper zkCli.sh, у них есть одно и то же имя, но совершенно другое назначение. Так как сказал использование Solr zkcli.sh:

./zkcli.sh -cmd upconfig -zkhost 127.0.0.1:2181 -collection collection1 -confname myconf -confdir path/to/solr/collection1/conf 

Затем вы можете перезагрузить конфигурацию:

http://server1:8983/solr/admin/collections?action=RELOAD&name=collection1 

Весь кластер будет обновляться.

+0

И в чем разница с принятым ответом Global Warrior? –

+0

@JackMiller Вопрос связан с SolrCloud (возможно, с кластером).Учитывая, что термин «ядро» используется для обозначения одного индекса в экземпляре Solr, а с другой стороны, «коллекция» является полным логическим индексом в кластере SolrCloud. Используя [Solr Collection API] (https://cwiki.apache.org/confluence/display/solr/Collections+API), перезагрузка конфигурации будет распространяться по всему кластеру, а не только в текущем экземпляре. Поэтому всегда используйте API коллекций, независимо от того, насколько велика ваша архитектура Solr (например, с несколькими осколками и/или репликами). – freedev

+0

Хорошо, наконец-то нашел: это должны быть * коллекции * в URL вместо * core *. Да, это важная разница, но вы могли бы уточнить, где фактическая разница в вашем ответе. Первая часть * zkcli ... upconfig * полностью идентична. –

1

Это работает для меня:

bin/solr zk -upconfig -n collectionName -d pathto/Conf_directory -z localhost:2181/solr 
+0

С перезагрузкой ядер, как кажется, становится ненужным. Невозможно найти документацию об этом. –

Смежные вопросы