Apache отказоустойчивости для JBoss

Я использую веб-приложение JBoss (AS 6 Final), размещенное на Linux (Debian). Я хотел бы реализовать решение по отказоустойчивости, чтобы когда JBoss не работал, на его место предоставлялась статическая веб-страница.

Мое текущее решение состоит в том, чтобы запустить Apache в качестве обратного прокси-сервера (описанного здесь), который позволяет мне обслуживать файлы.php из apache и пересылать все остальные запросы в JBoss. Но я не уверен, как заставить Apache вмешаться, когда JBoss не работает?

Заметка. и apache, и jboss будут работать на одном и том же компьютере, это (отказоустойчивость приложения, а не отказоустойчивость сервера), чтобы охватить моменты, когда JBoss выполняет повторное развертывание и т. д. Поэтому я действительно ищу простейшее решение

Большое спасибо

3 ответа

Решение

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

<VirtualHost *:80>
ServerName www.yourdomain.tld
ServerAlias yourdomain.tld

#Most Common errors for proxy
ErrorDocument 500 /demoWeb/errorpage.php 
ErrorDocument 502 /demoWeb/errorpage.php 
ErrorDocument 503 /demoWeb/errorpage.php 

DocumentRoot /var/www/demoWeb
ProxyPassMatch ^/(.*)+\.php !

    ProxyRequests Off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    ProxyPass / http://yourdomain.tld:8080/helloworld/
    ProxyPassReverse / http://yourdomain.tld:8080/helloworld/

    <Location />
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>

Это самый простой способ обработки статической страницы отработки отказа. Но также примите во внимание, чтобы реализовать ту же страницу для других кодов ошибок (404?), Потому что ваш JBOSS может работать, но ваше приложение JBOSS может быть развернуто или аварийно завершено.

Возможно, вы создадите два сайта для apache и сохраните их в /etc/apache2/sites-available. Одним из них является тот, который вы уже настроили. На другом (назовем его "резервным сайтом") будут ваши php-страницы и статический сайт для отсутствующих URL-адресов jboss-сервера.

Затем создайте cronjob или что-то еще. Следует проверить, доступен ли jboss. Для этого создайте страницу на jboss и вызовите ее из cronjob. Если jboss обнаружен как отсутствующий, то вызовите команду "a2ensite" с вашим "сайтом резервного копирования" и "a2dissite" с обычным сайтом.

Тот же cronjob должен работать наоборот: когда jboss снова будет в сети, тогда снова поменяйте местами свои сайты в apache.

Простейшим решением здесь будет использование Varnish в качестве обратного прокси для Apache и Jboss. Он не только предоставит вам эту функциональность, но и будет лучшим сервером кэширования, он значительно улучшит производительность вашего сайта (если ваш сайт не является полностью динамичным и нет ничего для кэширования).

Хотя вы можете найти много подробностей о лаке в Интернете, но конкретную функциональность, которую вы ищете, можно настроить следующим образом:

backend jboss {.host = "127.0.0.1";.port = "8080";.probe = {.url = "/";.timeout = 3 с; .interval = 5 с;.window = 1;.threshold = 1; }}

backend apache {.host = "127.0.0.1";.port = "8010";.probe = {.url = "/";.timeout = 3 с; .interval = 5 с;.window = 2;.threshold = 2; }}

sub vcl_recv {set req.backend = Jboss;

if (req.restarts == 1 ||! req.backend.healthy) {set req.backend = Apache; }}

Этими конфигами, если Jboss не работает, лак будет отправлять трафик на сервер apache и обслуживать страницу, которую вы настроили.

Надеюсь, это помогло.

Другие вопросы по тегам