1

我正在尝试使用 ModCluster 对某些服务器进行负载平衡。我们有一个 EAR,需要由不同的 DNS 进行负载平衡。

我们有这种情况。由于向后兼容性,我们需要维护相同的上下文“system1”

  • 用于 urla.com.br/system1/ 的 4 个服务器
  • urlb.com.br/system1/ 的 2 个服务器

在域模式下使用 Wildfly 10.1.0,它们由两个服务器组分隔:URLAURLB。它们共享相同的配置文件 (URL-HA) 和套接字绑定 (URL-HA-SOCKET)。

我有一个带有 mod_cluster 且配置最少的 Apache。

LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so


Listen 10.90.0.13:7777

<VirtualHost 10.90.0.13:7777>

  <Directory />
      Require all granted
  </Directory>

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

  ManagerBalancerName mybalancer
  ServerAdvertise on
  EnableMCPMReceive On

  <Location /mod_cluster-manager>
    SetHandler mod_cluster-manager
    Order deny,allow
    Allow from all
  </Location>
</VirtualHost>

当我访问http://10.90.0.13:7777/mod_cluster-manager时,我看到 6 个服务器注册了 context system1/。顺便说一下,它们使用相同的 EAR 文件。

但这对我们来说不是理想的情况。访问 urla.com.br/system1/ 的用户不能使用 urlb.com.br/system1/ 的机器,反之亦然。

我能找到的唯一方法(我尚未测试...)是为每个服务器组创建一个配置文件,因此我可以在以下位置配置不同的负载平衡组:

配置文件 > URLA-HA / URLB-HA > 子系统 > ModCluster。

但在这种情况下,我们复制了配置文件中存在的所有配置(DataSources、Queues、MailSession 等)。这是痛苦的维护。

那么,就我而言,我们有哪些选择?谢谢!

4

1 回答 1

1

我只使用一个 Wildfly 的个人资料就找到了解决问题的方法。

为此,我使用了两个平衡器并使用 ProxyPass 来使用特定的平衡器。


Wildfly:在域控制器的控制台管理 url 上,转到:

配置:配置文件配置文件:URL-HA 子系统:ModCluster

在 Advertising 选项卡上,更改 Balancer 值:

${projectcluster.modcluster.balancer:mybalancer}

将系统属性添加到两个服务器组

运行时 -> 服务器组 -> URLA -> 查看

在系统属性选项卡上,添加:

Key 'projectcluster.modcluster.balancer' value 'first'

Key 'jboss.modcluster.multicast.address' value '224.0.2.108'

运行时 -> 服务器组 -> URLB -> 查看

在系统属性选项卡上,添加:

Key 'projectcluster.modcluster.balancer' value 'second'

Key 'jboss.modcluster.multicast.address' value '224.0.2.108'

在此之后,重新启动您的服务器组 URLA 和 URLB


Apache 在问题上使用示例 Apache conf:

...  
...

  ManagerBalancerName mybalancer
  ServerAdvertise on
  EnableMCPMReceive On
  # Defined on Wildfly
  AdvertiseGroup 224.0.2.108:23364

  <Location /mod_cluster-manager>
    SetHandler mod_cluster-manager
    Order deny,allow
    Allow from all
  </Location>
</VirtualHost>

Listen 10.90.0.13:8001

<VirtualHost 10.90.0.13:8001>
  ProxyPass        / balancer://first stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://first
</VirtualHost>

Listen 10.90.0.13:8002

<VirtualHost 10.90.0.13:8002>
  ProxyPass        / balancer://second stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse / balancer://second
</VirtualHost>

10.90.0.13:8001/system1 上的所有请求都将发送到第一个平衡器,10.90.0.13:8002/system1 上的所有请求都将发送到第二个平衡器

就是这样。

于 2018-01-12T12:58:54.077 回答