当前位置: 首页 > 知识库问答 >
问题:

JBoss集群和Lighttpd负载平衡显示出不一致的行为

李昌勋
2023-03-14

问题

我们在不同的机器上安装了两个JBossAS 4.2.3,它们是集群的。我们还使用Lighttpd作为负载平衡器,它位于Tomcat服务器(Tomcat服务器不是集群服务器)和JBoss服务器之间。一旦所有服务器都启动并运行,应用程序就会完美运行。如果我关闭一台JBoss服务器,请求会像预期的那样重定向到另一台服务器。我的问题在我注销应用程序后开始出现。在尝试重新登录应用程序时,我遇到了一个异常,即Tomcat无法连接到被关闭的服务器。

服务器设置

  1. 机器01-Tomcat7

其他信息

>

server.modules += ( "mod_proxy" )
proxy.balance = "fair"
proxy.server = ( "" => (( "host" => "Machine03", "port" => 1100 ),
                       ( "host" => "Machine04", "port" => 1100 ))

jndi。属性包含以下条目

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=Machine05:80

无法理解为什么在我关闭一台机器并从应用程序注销后,Tomcats不再有对JBoss机器的代理引用。

共有1个答案

田鸿彩
2023-03-14

我现在已经解决了。感谢smallworld为我指明了正确的方向。我们正在缓存从jndi查找中获得的远程接口。据我所知,这个远程接口只指向集群中的一个特定服务器。(我们认为远程接口应该足够智能,可以识别服务器是否已关闭。看起来,当您进行查找时,这种智能与初始上下文有关)。因此,一旦服务器关闭,对远程接口的任何ejb调用都会连接到关闭的服务器。为了解决这个问题,我们停止缓存远程接口,并在每次需要EJB服务时进行查找。如果任何服务器关闭,查找将返回启动并运行的服务器的远程接口。有了它,集群就能完美地工作了!各位,你们的代码应该是这样的:

    // Some where at class level we have the following map declared
    private static final Map remoteEJBHashMap = new HashMap(100, 0.9f);

public static final <T> T getEJBInterface(String jndiLookupName) {
    String jndiName = jndiLookupMap.get(jndiLookupName);
    T ejbInterface = null;
    //T ejbInterface = (T) remoteEJBHashMap.get(jndiLookupName);
    //if (ejbInterface == null) {
        try {
            ejbInterface = (T) ctx.lookup(jndiName);
        } catch (NamingExcepthtml" target="_blank">ion e) {
            throw new RuntimeException(e);
        }
        //remoteEJBHashMap.put(jndiLookupName, ejbInterface);
    //}
    return ejbInterface;
}

注释行是导致问题的行。现在唯一留给我研究的是一个更好的解决方案,如果有的话。

 类似资料:
  • 假设我在一个集群中有3个ActiveMQ Artemis代理: 经纪人_01 在给定的时间点,我有每个经纪人的消费者数量: 经纪人有50名消费者 让我们假设在这个给定的时间点,有70条消息要发送到集群中的一个队列。 我们期望集群完成负载平衡,以便Broker_01将接收50条消息,Broker_0210条消息,Broker_0310条消息,但目前我们正在经历70条消息通过所有3个代理随机分发。 是

  • 我在3个节点上进行了压力测试,但只有一个CPU很高,其他的都很低。Ignite集群使用TCP发现,我有一个jdbc连接,例如:jdbc:Ignite:Thin://172.16.14.15、172.16.14.16、172.16.14.17/

  • 我必须手动在MS Azure中创建Kubernetes群集,而不是使用AKS。因此: > 我在一个可用性集中创建了2个VM:一个用于k8s master,第二个用于k8s节点。 我创建了外部负载均衡器并将2个VM添加到后端池。 我使用kubes祈祷创建了k8s集群。 我创建了部署和负载均衡器服务: 但LoadBalancer服务外部IP始终处于挂起状态: 此外,telnet azure\u loa

  • 包含负载均衡集群及节点。 云联壹云 平台提供的本地IDC的负载均衡功能需要管理员先部署负载均衡集群和LBAgent转发节点。 云联壹云 支持负载均衡多集群功能,用户可根据需求配置负载均衡集群以及集群下的转发节点LBAgent,部署集群和转发节点后才可以部署负载均衡实例等。 集群为一组LBAgent转发节点的集合,同一时刻集群中只有一个转发节点处于MASTER,用于监控负载监控实例配置的IP地址和端

  • 我按照此处找到的指南设置了一个 4 节点 Kubernetes 集群:https://www.tecmint.com/install-a-kubernetes-cluster-on-centos-8/ 它有一个主节点和3个工作节点。 我正在运行一个名为“hello world”的部署,它基于bashofmann/rancher演示映像,有20个副本。我还创建了一个名为hello world的nod

  • 如何使用MySQL NDB集群数据库来配置应用程序,以满足高可用性和负载平衡的要求。据我所知,我们可以通过适当配置数据库连接url,分别拥有这两个功能,如下所示。 JDBC:MySQL:LoadBalance://[host1][:port],[host2][:port][,[host3][:port]]...[/[database]]][?PropertyName1=PropertyValue1