Apache 基于域名的多项目负载均衡

大飞哥哥 发布于 2011/09/24 00:37
阅读 726
收藏 0
我现在有3台服务器:
服务器A : IP地址例如:192.168.1.1
服务器B : IP地址例如:192.168.1.2
服务器C : IP地址例如:192.168.1.3

服务器A是用来做请求分发的,安装了个Apache
服务器B有两个Tomcat,分别是Tomcat1(放置了项目A)、Tomcat2(放置了项目B)
服务器C也有两个Tomcat,分别是Tomcat1(放置了项目A)、Tomcat2(放置了项目B)

我现在要 访问   abc.com 访问的是项目A,是服务器B和服务器C中的Tomcat1做负载
访问  aaa.com 访问的是项目B,是服务器B和服务器C中的Tomcat2做负载

1个Apache ,2个项目,3台linux服务器 ,4个Tomcat容器

请教了

我目前是这样配置的可是不行,

#############Apache的httd.conf##########

AddDefaultCharset off
LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile conf/workers.properties

NameVirtualHost *:80

<VirtualHost www.aa.com:80>
    ServerAdmin aa@163.com
    ServerName www.aa.com
    ServerAlias aa.com
    JkMount /* controller
 </VirtualHost>

<VirtualHost tuan.aa.com:80>
    ServerAdmin tuan.aa.com 
    ServerName tuan.aa.com
    ServerAlias tuan.aa.com 
   JkMount /* controller

</VirtualHost>

#########workers.properties的配置##################

worker.list = controller,tomcat1,tomcat2,tomcatEpass1,tomcatEpass2
#server 列表
#========tomcat1========
worker.tomcat1.port=8009       #ajp13 端口号,在tomcat下server.xml配置,默认8088
worker.tomcat1.host=192.168.1.2 #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1   #server的加权比重,值越高,分得的请求越多


#========tomcat2========
worker.tomcat2.port=8009   
worker.tomcat2.host=192.168.1.3

worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 

#========tomcatEpass1========
worker.tomcatEpass1.port=8010   
worker.tomcatEpass1.host=192.168.1.2
worker.tomcatEpass1.type=ajp13
worker.tomcatEpass1.lbfactor = 1

#========tomcatEpass2========
worker.tomcatEpass2.port=8010   
worker.tomcatEpass2.host=192.168.1.3

worker.tomcatEpass2.type=ajp13
worker.tomcatEpass2.lbfactor = 1

#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2,tomcatEpass1,tomcatEpass2   #指定分担请求的tomcat

worker.controller.sticky_session=True
worker.controller.sticky_session_force=False

 

可是我这样配置不行啊,因为域名aa.com和tuan.aa.com是两个项目,可是这样,我访问aa.com会访问到tuan.aa.com指 定的项目。也就是说,aa.com和tuan.aa.com共用的一个controller,本来应该访问aa.com指定到后面的tomcat1和 tomcat2;

访问tuan.aa.com指定到后面的tomcatEpass1和tomcatEpass2;

可是现在访问aa.com也有可能,会出现指定到tomcatEpass1

加载中
0
G.
G.
何不试试 Nginx ?
0
yuzhouliu
yuzhouliu
1. apache config
   httpd.conf:
   #----------begin httpd config-----------------#
   Include conf/mod-jk.conf
   #========abc.com============#
   NameVirtualHost *:80
   <VirtualHost *:80>
        #DirectoryIndex index.html
        ServerName abc.com
        DocumentRoot htdocs/abc
        ErrorLog logs/abc_error.log
        TransferLog logs/abc_access.log
        JkMount /A/* balancer
   </VirtualHost>

   #========aaa.com============#
   <VirtualHost *:80>
        #DirectoryIndex index.html
        ServerName aaa.com
        DocumentRoot htdocs/aaa
        ErrorLog logs/aaa_error.log
        TransferLog logs/aaa_access.log
        JkMount /B/* balancer
   </VirtualHost>
   #----------end httpd config-----------------#

   mod-jk.conf:
   #----------begin mod-jk config-----------------#
   LoadModule jk_module modules/mod_jk.so
   JkWorkersFile conf/workers.properties
   JkLogFile logs/mod_jk.log

   #JkMount /examples/servlets/* first
   #JkMount /examples/jsp/* second

   JkMount /A/* balancer
   JkMount /B/* balancer

   #JkMount /docs/* balancer
   #----------end mod-jk config-----------------#

   workers.properties:
   #----------begin workers -----------------#
   worker.list=balancer,jkstatus
   worker.ids1.host=服务器B的地址
   worker.ids1.port=8009
   worker.ids1.type=ajp13
   worker.ids1.lbfactor=1

   #worker.ids2.host=服务器C的地址
   #worker.ids2.port=8009
   #worker.ids2.type=ajp13
   #worker.ids2.lbfactor=1

   worker.balancer.type=lb
   worker.balancer.balance_workers=ids1,ids2
   worker.balancer.sticky_session=1
   #worker.balancer.balance_workers=ids2
   #
   # Define status worker
   #
   worker.jkstatus.type=status
   #----------end workers -----------------#


2.服务器B tomcat config
  server.xml
  <Engine name="Catalina" defaultHost="服务器B地址" jvmRoute="ids1">
 

3.服务器C tomcat config
  server.xml
  <Engine name="Catalina" defaultHost="服务器C地址" jvmRoute="ids2">



 


0
yuzhouliu
yuzhouliu

JkMount /* controller  改写为:

JkMount /A/* controller

or

JkMount /B/* controller

 

0
yuzhouliu
yuzhouliu
另外,你不需要在B,C机器上都安装两个Tomcat, 把两个项目装载到一个tomcat里就行.这样B,C机器就只有一个tomcat了,简单些.
返回顶部
顶部