Apache - 两个VirtualHosts给不同的工作者

时间:2015-10-04 21:45:28

标签: apache virtualhost mod-jk

我有一个在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的名称。但这似乎也不起作用。

有关如何实现我想要做的事情的任何建议?

提前感谢您的时间!

1 个答案:

答案 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,您基本上只使用两个域名访问您的应用程序,并且每个域名都有自己的后端工作者

如果您遇到问题,请告诉我。

干杯,