我有一个在4个后端JBoss服务器上运行的应用程序。这些服务器位于Apache Web服务器之后。目前,我用my.app1.com调用我的应用程序(只是一个例子),请求转到其中一个后端服务器。
我想做的是将我的应用程序调用另一个域名,例如my.app2.com。这是我正在努力实现的棘手部分 - 当我使用my.app1.com调用应用程序时,我希望请求转到两个第一个后端服务器(或由两个工作人员提供服务) ,当我用my.app2.com调用它时,我希望请求转到其他两个后端服务器(或由其他两个工作人员服务)。
我认为我可以通过创建两个不同的VirtualHost部分来实现这一点,在每个部分中,我将使用VirtualHost中的属性JkWorkersFile path/to/workers.properties
调用不同的workers.properties文件。但是在重新加载配置之后,我发现JkWorkersFile不能在VirtualHost中使用。并举例说明我所做的事情:
我的VirtualHost
部分如下所示:
<VirtualHost *:80>
ServerName my.app1.com
<....Other configuration here....>
JkWorkersFile path/to/workers1.properties
</VirtualHost>
<VirtualHost *:80>
ServerName my.app2.com
<....Other configuration here....>
JkWorkersFile path/to/workers2.properties
</VirtualHost>
我的workers1.properties文件如下所示:
worker.instance1.reference=worker.template
worker.instance1.host=localhost
worker.instance1=10109
worker.instance1.domain=group1
worker.instance2.reference=worker.template
worker.instance2.host=localhost
worker.instance2=10109
worker.instance2.domain=group1
我的workers2.properties文件如下:
worker.instance3.reference=worker.template
worker.instance3.host=localhost
worker.instance3=10109
worker.instance3.domain=group2
worker.instance4.reference=worker.template
worker.instance4.host=localhost
worker.instance4=10109
worker.instance4.domain=group2
但正如我上面所写,在VirtualHost中使用JkWorkersFile不起作用。
我在其他一些论坛上读过,可以使用JkMount(因为它可以多次使用),并将其作为参数/值提供给worker的名称。但这似乎也不起作用。
有关如何实现我想要做的事情的任何建议?
提前感谢您的时间!
答案 0 :(得分:0)
我想出了如何做到这一点。如果有人遇到相同的请求,请在此处发布答案。
因此,需要创建第二个loadbalancer worker并为其分配所需的后端实例。在workers.properties(不需要多个worker.properties文件)以及其他配置中,我对两个loadbalancer工作者有以下内容(注意,负载均衡器工作者是另一回事,后端工作者是另一回事,我来了实现):
worker.list=loadbalancer1,loadbalance2,status
(以下4取决于你想要使用的方法)
worker.loadbalancer1.method=B
worker.loadbalancer1.lock=P
worker.loadbalancer2.method=B
worker.loadbalancer2.lock=P
.....here goes the list of backend workers as stated above....
首先是关键部分:
worker.loadbalancer1.type=lb
worker.loadbalancer1.balance_workers=LIST1_OF_BACKEND_WORKERS_YOU_WANT_TO_ASSIGN
worker.loadbalancer1.sticky_session=True
worker.loadbalancer1.retries=1
worker.loadbalancer2.type=lb
worker.loadbalancer2.balance_workers=LIST2_OF_BACKEND_WORKERS_YOU_WANT_TO_ASSIGN
worker.loadbalancer2.sticky_session=True
worker.loadbalancer2.retries=1
worker.status.type=status
然后在conf.di下有一个名为uriworkermap.properties的文件,其中我有以下内容,它告诉两个loadbalancer工作程序中的每一个将请求发送到后端(即分配给它们的实例)
/*=loadbalancer1;
/*=loadbalancer2;
我配置了两个VirtualHost,每个都在不同的域名上监听(如上所示):
<VirtualHost *:80>
ServerName my.app1.com
<....Other configuration here....>
JkMount /* loadbalancer1
</VirtualHost>
<VirtualHost *:80>
ServerName my.app2.com
<....Other configuration here....>
JkMount /* loadbalancer2
</VirtualHost>
简单来说,行JkMount /* loadbalancer{N}
告诉每个VirtualHost将所有请求发送到指定的负载均衡器,而负载均衡器又将请求转发给分配给它的后端工作者。
那就是它!重新加载您的Apache,您基本上只使用两个域名访问您的应用程序,并且每个域名都有自己的后端工作者
如果您遇到问题,请告诉我。
干杯,