2013-04-02 5 views
3

Каждый раз, когда я копирую OpenGrok/dist/source.war в /var/tomcat/webapps/, tomcat генерирует пустые страницы ошибок с ошибками 404 Not Found для моих пользователей в течение нескольких секунд сразу после такого копирования.Избегайте временных ошибок 404 во время развертывания с tomcat

HTTP/1.1 404 Not Found 
Server: Apache-Coyote/1.1 
Content-Length: 0 
Date: Tue, 02 Apr 2013 19:00:14 GMT 
Connection: close 

Это неприемлемо. Не правильно ли я развертываю, вручную копируя файл .war в каталог tomcat или это ошибка в OpenGrok? Как я могу гарантировать, что во время процесса развертывания не будет ни одного посетителя, который будет получать излишний 404?

+0

Если вам нужно 100% времени бесперебойной работы на вы можете посмотреть в loadbalancer и по крайней мере, 2 узла tomcat. Затем вы можете обновить его, в то время как другой обрабатывает запросы, а после первого правильного обновления вы можете переключиться на него и обновить второй. –

+0

@ LeonardBrünings, вы должны шутить! Я, очевидно, не ищу 100% времени безотказной работы, но я не знал, что tomcat - это любительский час, требующий необоснованного многосекундного простоя при нормальном использовании. Я был бы очень рад прорвать tomcat7, если это действительно единственный способ обойти это; рекомендации достойных альтернатив очень приветствуются (я использую только tomcat для запуска OpenGrok). – cnst

+0

У вас есть unpackWars установлен в true? Насколько велика ваша заявка, выполняете ли вы дорогостоящие действия по запуску? –

ответ

1

Tomcat 7 имеет функцию параллельного развертывания. С помощью этой функции можно использовать несколько экземпляров приложения под одним и тем же контентом.

Этот блог объясняет это красиво: http://www.javacodegeeks.com/2011/06/zero-downtime-deployment-and-rollback.html

Резюмируя вам нужно версия ваши войны вручную, когда вы добавляете их в свой appBase.

cp foo##001.war apache-tomcat-7/webapps/ 
cp foo##002.war apache-tomcat-7/webapps/ 

Вы можете установить undeployOldVersions и autoDeploy истину, так что кот автоматически разворачивает приложение и удаляет старую версию, если он больше не нужен. Для получения дополнительной информации о конфигурации tomcat обратитесь к https://tomcat.apache.org/tomcat-7.0-doc/config/host.html.

Версия после ## должна быть сопоставимой по строкам, поэтому вы можете использовать, например. номер сборки из вашей CI-системы, но вам, возможно, придется наносить ее на ноль.

Есть несколько вещей, которые нужно посмотреть:

  • Внешние ресурсы должны быть разделяемыми, если вы используете базу данных, но ваши новые версии нуждается в новой схеме вы столкнетесь с проблемами. Или, если вы открываете прослушиватель TCP на определенном порту, он также не доступен для совместного использования.
  • кэшей, если ваше приложение использует внутренние кэши они должны написать через и заканчивается быстро
  • Приложение должно быть undeployable
+0

opengrok открывает прослушивающий TCP-сокет для обновлений конфигурации. поэтому ваш ответ не является окончательным в отношении того, как это относится к opengrok. – cnst

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