JBoss 的 Apache 故障转移

JBoss 的 Apache 故障转移

我正在运行一个托管在 Linux(Debian)上的 JBoss Web 应用程序(AS 6 Final)。我想实施一个故障转移解决方案,这样当 JBoss 发生故障时,就会提供一个静态网页来代替它。

我当前的解决方案是运行 Apache 作为反向代理(描述这里),它允许我从 apache 提供 .php 文件并将所有其他请求转发到 JBoss。但我不确定当 JBoss 宕机时如何让 Apache 介入?

注意。apache 和 jboss 都将在同一个盒子上运行,这是(应用程序故障转移而不是服务器故障转移)以涵盖 JBoss 重新部署等的时间。所以我正在寻找最简单的解决方案

非常感谢

答案1

如果您只想要一个用于故障转移的简单静态页面,那么请为您的 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 应用程序可能会取消部署或崩溃。

答案2

您可能为 apache 创建两个站点并将它们存储在 /etc/apache2/sites-available 上。其中一个是您已经设置的站点。另一个(我们称之为“备份站点”)将包含您的 php 页面和一个用于缺少的 jboss 服务器 URL 的静态站点。

然后,创建一个 cronjob 或任何其他程序。它应该检查 jboss 是否仍然可用。为此,在 jboss 上创建一个页面,并从 cronjob 中调用它。如果检测到 jboss 丢失,则使用您的“备份站点”调用命令“a2ensite”,使用您的正常站点调用命令“a2dissite”。

相同的 cronjob 应该以相反的方式工作:当 jboss 再次上线时,在 apache 中再次交换您的站点。

答案3

这里最简单的解决方案是使用 Varnish 作为 apache 和 Jboss 的反向代理。它不仅可以为您提供此功能,而且还是最佳的缓存服务器,它将大大提高您网站的性能(除非您的网站完全是动态的并且没有任何内容可缓存)。

虽然你可以在互联网上找到很多关于 varnish 的详细信息,但是你正在寻找的具体功能可以这样配置:

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

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

sub vcl_recv { 设置 req.backend = Jboss;

如果 (req.restarts == 1 || !req.backend.healthy) { 设置 req.backend = Apache; } }

通过这些配置,如果 Jboss 关闭,varnish 将把流量发送到 apache 服务器并提供您已配置的页面。

希望这有帮助。

相关内容