Служба приложений Azure - запуск Solr на Jetty - LockObtainFailedException после обслуживания Azure - PullRequest
0 голосов
/ 20 декабря 2018

Я запускаю один (немасштабированный) экземпляр solr в службе приложений Azure.Служба приложений работает на Java 8 и контейнере Jetty 9.3.

Все работает очень хорошо, но когда Azure решает переключиться на другую виртуальную машину, иногда JVM, похоже, не завершает работу корректно, и мы сталкиваемся с проблемами.

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

Во избежание простоя Azure раскручивает новое приложение, а когда оно будет готово, оно переключается на новое приложение.Вроде бы нормально, но, похоже, это плохо работает с механизмом блокировки solr.

Мы используем нативный по умолчанию lockType, что должно быть хорошо, так как мы запускаем только один экземпляр.Solr должен удалить файл write.lock во время завершения работы, но, похоже, это происходит не всегда.

Инструменты диагностики Azure четко показывают, что это событие происходит: enter image description here

И использование памяти показывает оба приложения: enter image description here

Во время запуска второго экземпляра solr пытается заблокировать индекс, но это невозможно, поскольку первоевсе еще использует его (он также имеет файл write.lock).Иногда первый не удаляет файл write.lock, и это - то, с чего начинаются проблемы.Второй экземпляр solr никогда не будет работать правильно без ручного вмешательства (удаление файла write.lock вручную).

Журналы solr:

Caused by: org.apache.solr.common.SolrException: Index dir 'D:\home\site\wwwroot\server\solr\****\data\index/' of core '*****' is already locked. The most likely cause is another Solr server (or another solr core in this server) also configured to use this directory; other possible causes may be specific to lockType: native

и

org.apache.lucene.store.LockObtainFailedException

Что можно сделать по этому поводу?Я думал об изменении lockType на блокировку на основе памяти, но я не уверен, сработает ли это, потому что оба экземпляра живы одновременно в течение короткого периода времени.

1 Ответ

0 голосов
/ 28 декабря 2018

Если вы хотите запустить Solr без каких-либо блокировок, вы можете сделать это, указав в solrconfig.xml вместо обычного <lockType>native</lockType>, вы можете использовать <lockType>none</lockType>.

Очевидно, что вы должны быть осторожны с этим механизмом, поскольку разные экземпляры Solr могут одновременно пытаться изменить индекс, что может привести к потенциальным повреждениям.

Перечислены все доступные типы блокировок есть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...