Нет /solr/home в JNDI, хотя он установлен в Catalina/localhost/solr.xml

У меня есть solr-4.5.0, настроенный для работы с tomcat7 и zookeeper 3.3.5 (из пакета debian). Согласно многим руководствам, которые я создал в следующем файле Catalina/localhost/solr.xml

<Context allowlinking="true" crosscontext="true" debug="1" docBase="/var/lib/tomcat7/webapps/solr.war" priviledged="true">
 <Environment name="solr/home" override="true" type="java.lang.String" value="/opt/solr/webapps/solr1" />
</Context>

Я настроил solr на 2 машинах для работы в облаке (используя zookeeper для сохранения конфигурации). На обеих машинах при запуске tomcat7 я вижу следующую ошибку в catalina.out:

11693 [localhost-startStop-1] INFO  org.apache.solr.core.SolrResourceLoader  – No /solr/home in JNDI
....
12529 [coreLoadExecutor-3-thread-1] ERROR org.apache.solr.core.CoreContainer  – Failed to load file /var/lib/tomcat7/solr/collection1/solrconfig.xml
12532 [coreLoadExecutor-3-thread-1] ERROR org.apache.solr.core.CoreContainer  – Unable to create core: collection1
org.apache.solr.common.SolrException: Could not load config file /var/lib/tomcat7/solr/collection1/solrconfig.xml

Интересно то, что в начале этого файла я вижу:

64   [localhost-startStop-1] INFO  org.apache.solr.core.SolrResourceLoader  – Using JNDI solr.home: /opt/solr/webapps/solr1
71   [localhost-startStop-1] INFO  org.apache.solr.core.SolrResourceLoader  – new SolrResourceLoader for directory: '/opt/solr/webapps/solr1/'

Конечно, я хотел бы настроить solr/home в JNDI, а не в solr.war. Есть идеи, что может быть не так?

PS: этот вопрос не является дубликатом таких вопросов: Как установить solr/home в ОС Linux? и это: deploy war в Tomcat Разница в том, что я определяю solr/home, но, похоже, это не работает.


person running.t    schedule 31.10.2013    source источник
comment
Есть ли случайно два разных экземпляра solr на одном и том же коте? (например, webapps/solr.war и webapps/solr1/ ‹, где solr1 — это экстрактор solr.war)?   -  person rchukh    schedule 03.11.2013
comment
Кроме того, можете ли вы показать следующие несколько строк после 71 [localhost-startStop-1] INFO org.apache.solr.core.SolrResourceLoader – new SolrResourceLoader for directory: '/opt/solr/webapps/solr1/'?   -  person rchukh    schedule 03.11.2013
comment
И еще одно — согласно документации по tomcat 7.0 некоторые из параметров Context не должны быть полностью строчными (например, allowlinking => allowLinking, crosscontext => crossContext), в priviledged есть опечатка (должно быть привилегированным), и нет такой опции, как отладка.   -  person rchukh    schedule 03.11.2013
comment
@rchukh: Это была проблема. Я создал резервный каталог в /var/lib/tomcat7/webaps/solr.backup. При этом solr/home не поднимался, пока: Развертывание каталога веб-приложений /var/lib/tomcat7/webapps/solr.backup   -  person running.t    schedule 06.11.2013
comment
#rchuk: вы можете написать этот комментарий в качестве ответа, чтобы получить награду.   -  person running.t    schedule 06.11.2013


Ответы (1)


Проблема связана с тем, что на одном коте есть два разных развертывания solr, одно из которых знает о solr.home, а другое — нет.

Если в логах есть строка:

org.apache.solr.core.SolrResourceLoader  – Using JNDI solr.home: /opt/solr/webapps/solr1

то на самом деле это означает, что какой-то экземпляр solr нашел параметр solr.home.

Но если есть несколько развертываний (например, для тестирования сегментирования) и solr.home задан для каждого развертывания, а не для всего сервера (например, -Dsolr.solr.home=/some/dir), то некоторые развертывания могут не запуститься.

Чтобы избежать таких проблем (или, по крайней мере, сделать его более удобным для отладки), можно записывать каждый экземпляр Solr в свой собственный файл журнала.

person rchukh    schedule 05.11.2013