`
toplchx
  • 浏览: 339160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat与Apache或Nginx连接和集群配置

    博客分类:
  • web
阅读更多
一、Tomcat的连接方式:

Tomcat与Web服务器的连接方式有两种:

  • HTTP
HTTP连接器是Tomcat默认的方式,并且已经被使用。这种方式具有最低的延迟和最佳的整体性能。对于集群,需要一个支持粘性会话的web服务器在Tomcat前端。Tomcat支持mod_porxy(被默认包含在Apache HTTP Server 2.2)作为负载平衡器。值得注意的是,通常情况下HTTP proxy的性能低于AJP的性能,所以集群时AJP是优选。
 
  • AJP
单个服务器,一个本地WEB服务器和一个Tomcat实例连接的效率通常低于单个Tomcat使用其默认的HTTP连接的方式,即使web应用大部分都是静态内容。如果为了某种原因,你需要整合一个本地WEB服务器,那么AJP连接将提供更好的效率。对于Tomcat集群,AJP连接是最有效的,其他功能和HTTP集群一样。
Tomcat7所支持的本地连接:
JK 1.2 .x 
mod_proxy (Apache HTTP Server 2.2默认包含)
其他AJP连接器可能可以工作,但不再维护。
 
二、Tomcat 与 Apache HTTP Server2.4连接
  • HTTP连接
从上面的说明可以看出,如果你只需要一个Tomcat,那就直接用就好了,不用和Apache HTTP Server连接。如果需要多个Tomcat集群,就是AJP连接。所以用HTTP连接Apache和Tomcat这种情况应该不多,简单说明一下怎么连接:
取消两个module的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
在httpd.conf文件中添加以下两行:
ProxyPass /webappname http://ip:8080/webappname
ProxyPassReverse /webappname http://ip:8080/webappname
ip、端口号和webappname根据实际情况修改
说明:上述写法可能有安全隐患。不要使用ProxyRequests启用代理,除非对代理做了权限控制。否则对你的网络和互联网都是很大的危险。默认ProxyRequests为off。参考:http://httpd.apache.org/docs/2.4/mod/mod_proxy.html#access
 
  • AJP连接
AJP连接官方支持两种方式JK 1.2.x和mod_proxy。
JK是老牌连接器,被广泛使用和验证,值得信任,但是配置比较复杂。
mod_proxy是Apache2.2以后的默认设置,配置简单,但是因为比较新,所以没有经过大范围的验证。
网上JK的文档比较多,这里我们介绍一下mod_proxy的写法。其实跟HTTP的方式一样,只是把http://修改为ajp://就可以了。
取消两个module的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
在httpd.conf文件中添加以下两行:
ProxyPass /webappname ajp://ip:8009/webappname
ip、端口号和webappname根据实际情况修改
AJP连接通常不需要设置ProxyPassReverse。
 
三、Apache HTTP Server2.4集群配置
如文章开始所述,Apache Http Server和Tomcat集群要用AJP方式连接
1、modules
同样集群可以用JK和mod_proxy两种方式,这里介绍mod_proxy的方式:
取消五个module的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
根据负载均衡调度策略的不同,取消如下module的注释
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
2、示例配置:
<Proxy balancer://mycluster>
    BalancerMember ajp://ip:8019 loadfactor=1 route=tomcat7_a
    BalancerMember ajp://ip:8029 loadfactor=2 route=tomcat7_b
    BalancerMember ajp://ip:8009 status=+H
    ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass /examples  balancer://mycluster/examples
说明:
<Proxy balancer://mycluster>
 定义一个集群,起个名字。
BalancerMember ajp://ip:8019 loadfactor=1 route=tomcat7_a
BalancerMember ajp://ip:8029 loadfactor=2 route=tomcat7_b
定义集群成员。loadfactor是权重,数值越大权重越大被分配的请求约多。route和Tomcat中配置的jvmRoute一至
还有一些参数可以添加,比如:max=20 ttl=120 retry=300 timeout=15
 
BalancerMember ajp://ip:8009 status=+H
热备服务器,只有在上面的BalancerMember都坏掉之后才会被启用。
 
ProxySet lbmethod=bytraffic
现有3种负载均衡调度策略
byrequests:请求计数(Request Counting)
bytraffic:流量加权计数(Weighted Traffic Counting)
bybusyness:挂起请求计数(Pending Request Counting)
默认是byrequests
 
ProxyPass /examples  balancer://mycluster/examples
设置代理连接。
 
3、负载均衡器的粘性
当一个请求被代理到某个节点,接下来同一个用户的请求都将被代理到相同的节点。很多均衡器通过一张记录客户端ip和节点的关系表来实现这个特性。这种方式对客户端和节点都是透明的,但是存在一些问题:如果客户端藏在某些代理之后将导致负载分布不均,当客户端使用动态IP地址,并在请求间变更,将失去粘性,关系表溢出将导致错误等问题。
mod_proxy_balancer通过两种方式实现粘性:cookies和URL encoding。cookie可以被Apache服务器和节点使用,URL encoding通常在节点中使用。
 
下面的例子使用mod_headers提供负载均衡粘性,即使节点服务器没有设置合适的session cookie。
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
 ......
</Proxy>
ProxyPass /test balancer://mycluster
 
以下配置同时支持cookies和URL encoding
ProxyPass /test balacer://mycluuster stickysession=JSESSIONID|jsessionid scolonpathdelim=On
<Proxy balancer://mycluster>
    BlancerMember http://192.168.1.50:80 route=node1
    BlancerMember http://192.168.1.51:80 route=node2
</Proxy>
  
4、Log
LogFormat "%v %h %l %u %t \"%r\" %{Set-Cookie}o %{BALANCER_SESSION_STICKY}e %{BALANCER_SESSION_ROUTE}e %{BALANCER_WORKER_ROUTE}e %>s %b" balance_common
CustomLog logs/balance_log balance_common
将集群的日志写到Apache服务器目录下的logs/balance_log文件中。
 
5、均衡器管理界面
需要mod_status。管理页面可以动态更新集群成员,修改平衡器的属性和特定成员或使之离线。
<Location /balancer-manager>
    SetHandler balancer-manager
    Require ip 192.168
</Location>
你可以通过http://your.server.name/balancer-manager访问管理页面。
注意,只有balancers在<Location ...>之外定义,才能使用管理页面。
 
四、Tomcat 与 Nginx连接
  • HTTP连接
    server {
        listen       82;
        server_name  localhost;

        location / {
            proxy_pass http://ip:8080;
        }
    }
在nginx.conf文件中添加一个server{},listen设置端口,server_name设置域名,location设置目录。
proxy_pass是http代理,指向tomcat地址。
修改后conf后,nginx -s reload就可以热更新了,很方便。

  • AJP连接
关于AJP连接,有一种说法是Nginx采用连接池,所以HTTP方式的连接不比AJP方式差。
有人的测试结果是Nginx通过HTTP连接Tomcat 性能略强于Apache通过AJP连接Tomcat。
Nginx本身并不支持AJP连接,但有人写了一个nginx_ajp_module来支持ajp。由于是第三方控件,所以请在充分测试后使用。
1、下载地址
 
2、安装
$ cd nginx_dir/
$ patch -p1 < /tools/nginx_ajp_module/ajp.patch
$ ./configure --prefix=/usr/nginx1.5.3 --add-module=/tools/nginx_ajp_module
$ make
$ make install
先到nginx安装文件的目录下,打ajp补丁,重新配置configure,编辑,安装。
 
3、配置nginx.conf文件
    server {
        listen       82;
        server_name  localhost;
        
        location / {
            ajp_keep_conn on;
            ajp_pass ajp://ip:8009;
        }
    }
ajp_keep_conn设置是否保持连接
ajp_pass这是Tomcat ajp连接地址和端口。
 
五、Nginx集群配置
  • HTTP
   upstream tomcat_http {
        ip_hash;
        server 192.168.50.65:8090 weight=2;
        server 192.168.50.65:8091 max_fails=3 fail_timeout=30s;

        keepalive 10;
    }

    server {
        listen       82;
        server_name  localhost;

        location / {
            proxy_pass http://tomcat_http;
        }
    }
在nginx.conf文件中配置。用upstream定义一组服务器。
ip_hash通过记录客户端ip实现粘性session。有一个第三方的module可以用cookie实现粘性:https://code.google.com/p/nginx-sticky-module/
通过server定义多个服务器。
weight是权重,默认为1。
max_fails和fail_timeout配合使用,在fail_timeout时间内通信失败达到max_fails的次数后,此服务器在fail_timeout时间内被认为不可用。
keepalive为连接开启缓存,并设置缓存连接的最大数量。
将proxy_pass后的服务器地址,变为upstream的名字。
 
  • AJP
    upstream tomcat_ajp {
        server 192.168.50.65:8019 srun_id=tomcat7_a weight=2;
        server 192.168.50.65:8029 srun_id=tomcat7_b;
        
        jvm_route $cookie_JSESSIONID reverse;
        keepalive 10;
    }   
    
    server {
        listen       82;
        server_name  localhost;
        
        location / {
            ajp_keep_conn on;
            ajp_pass tomcat_ajp;
        }
    }
upstream定义一组服务器
srun_id同Tomcat配置中Engine的jvmRoute。
jvm_route $cookie_JSESSIONID reverse是用cookie方式实现粘性session
ajp_pass指定连接到哪个upstream上
分享到:
评论
1 楼 Aceslup 2015-09-09  
非常感谢分享。

相关推荐

    Nginx_Tomcat集群案例

    windowXP下搭建nginx-1.7.10和apache-tomcat-8.0.18的集群 已经配置好,下载后直接启动三个tomcat和nginx,然后访问http://localhost/即可。

    tomcat+linux负载均衡集群配置

    tomcat+apache+linux负载均衡集群配置反向代理

    Tomcat集群部署方案

    ApacheTomcat集群部署配置整合方案

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip Introduction ==== 1.搭建一个最简洁,模块划分最明确的ssm+swargger+shiro+redis+nginx整合项目,采用maven作为构建工具,在有新项目开发时...

    Apache+Tomcat集群和负载均衡及Session绑定

    配置apache+tomcat负载均衡和session复制,并且解决了tomcat报2009-6-5 10:10:12 org.apache.jk.common.ChannelSocket processConnection 警告: processCallbacks status 2 的问题

    NGINX和tomcat配置

    Nginx+tomcat配置集群负载均衡,了解了二者之间的区别于应用场景,对于搭建服务帮助很大。nginx配置简单,不想apache配置那么复杂

    nginx+tomcat高可用、高性能jsp集群

    #apr 与 tomcat-native 提供更好的伸缩性、性能和集成到本地服务器技术,如果没有apr技术,启动tomcat 时出现如下提示 #INFO: The APR based Apache Tomcat Native library which allows optimal performance in ...

    Nginx+Tomcat负载均衡

    3.这里只需要修改Nginx的配置,让它通过tomcat来转发,所以我们在这一步只需要在nginx.conf中添加几行代码就行。 如果看不懂 。建议直接拿我替来用。 Copy下面的内容 替换 你的nginx.conf注意黄色端口要改为你的。 ...

    性能调优 海量并发 系统架构

    基于nginx的tomcat负载均衡和集群 实现多服务器负载均衡 系统性能优化 数据库 Nginx+Squid负载均衡 配置好的集群 总共三十个文档"&gt;Apache+Tomcat+Session+Memcache 高性能群集搭建 J2EE性能调优 Jboss的优化配置 ...

    Nginx+Tomcat搭建高性能负载均衡集群的实现方法

    2、然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apache-tomcat-6.0.33-2: 3、然后修改这两个Tomcat的启动端口,分别为18080和28080,下面以修改第一台Tomcat为例,打开Tomcat的conf目录下的server.xml...

    Nginx与Tomcat实现动静态分离和负载均衡

    本文介绍了Nginx与Tomcat实现动静态分离和负载均衡,所谓动静分离就是通过nginx(或apache等)来处理用户端请求的图片、html等静态的文件,tomcat(或weblogic)处理jsp、do等动态文件,从而达到动静页面访问时通过...

    Nginx+Tomcat高性能负载均衡集群搭建教程

    Nginx是一个高性能的HTTP服务器/反向代理服务器及电子邮件(IMAP/POP3...在这里我们采用集群部署方式,使用多个Tomcat,反向代理使用Nginx。 架构如下: 准备工作 apache-tomcat-7.0.61 nginx-1.12.2 Redis-x64-3.2.10

    tomcat6_apache2.2_ajp 负载均衡加集群实战分享

    tomcat服务器:均配置相同的应用。 1.集群名:balancer://tomcatcluster 2.三台集群服务器ip: IP_1:192.168.1.31 IP_2:192.168.1.32 IP_3:192.168.1.33 3.测试应用程序test文件夹放在tomcat6的webapps目录下 操作...

    Apache2.2以上版本与Tomcat整合配置及负载均衡实现

    今天技术总监叫实现Apache和Tomacat整合,在网上找了很多资料,结果发现还是这个最方便! 下面是实现2个tomcat实现负载均衡,如果只有一个则可删除一个 apache2.2以上版本,无需使用jk_mod来集成tomcat,直接使用ajp...

    用apache和tomcat搭建集群(负载均衡)

     集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。集群系统...

    nginx+tomcat实现Windows系统下的负载均衡搭建教程

    刚入行没多久就听过‘负载均衡’的大名,到现在因为工作接触的少,所以没什么太多的认识。但自己又对其非常的好奇,所以前两天通过查资料,在...下载地址:https://tomcat.apache.org/download-80.cgi (这是8.0版本

    Ubuntu10和VirtualBox4实用总结-常用Java Web应用软件 (LNMJ,LAMJ)安装

    本文主要总结了在Ubuntu10下常用Java Web应用软件的安装,特别是LNMJ Web(Linux+Nginx+Mysql+Java Tomcat)架构和LAMJ Web(Linux+Apache+Mysql+Java Tomcat)架构下的软件安装。为进一步配置和实现LNMJ和LAMJ架构(负载...

    高性能WEB开发 nginx HTTP服务器篇

    HTTP服务器 因tomcat处理静态资源的速度比较慢,所以首先想到的就是把所有静态资源(JS,CSS,image,swf) 提到单独的服务器,用更加快速的HTTP服务器,这里选择了nginx了,nginx相比apache,更加轻量级, 配置更加简单...

    2023国赛 网络建设与运维正式赛卷

    还包括对DFS服务、ASP服务、打印服务、Nginx和Tomcat服务、Samba服务、iSCSI服务等多种IT基础设施的服务搭建和安全管理,以及Linux服务器的CA认证、Ansible自动化运维、Apache和IIS web服务器配置、Samba和NFS共享...

    架构设计方案

    即通过apache或是Nginx 将客户请求均衡的分给tomcat1,tomcat2....去处理。 2.1.2WEB应用开发架构思路 1)应用开发实现MVC架构三层架构进行web应用开发 2)页面尽可能静态化以减少动态数据访问,如果是资讯类的网站可以...

Global site tag (gtag.js) - Google Analytics