`

负载均衡

阅读更多
所谓负载均衡(loadbalance)所指的是,在服务器端短时间内获得大量的请求,单一服务器无法在一个较短的时间内响应这些请求, 
此时服务器需要一个机制,请求按照多个服务器不同的负载能力,把这些请求合理的分配。 
集群(cluster)的作用则是在多个服务器之间共享用户信息,资源等。

关于集群的优点不多说了,直接开始主题,怎样配置一个tomcat的集群.

apache2.2以上的版本对ajp的链接器而且性能比原来的jk有的大的提升所以推荐使用ajp

先下载安装apache2.2.3(目前最新版),httpd.conf增加如下配置,去掉注释就行了

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配置下面增加如下的配置

ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3  
ProxyPassReverse / balancer://tomcatcluster/   
  
<Proxy balancer://tomcatcluster>  
BalancerMember ajp://localhost:8209 route=tomcat1  
BalancerMember ajp://localhost:8409 route=tomcat2 
</Proxy> 

注意我这里的localhost:8209,localhost:8409 是两个我本地两个tomcat的运行端口tomcat1,tomcat2是我本地tomcat的jvmRoute的配置下面我会说明,在修改配置的时候tomcat有4个端口需要修改分别是主server运行端口,http服务运行端口,ajp运行端口,集群接受session运行端口.

下载安装各个tomcat,我是本机运行了多个tomcat也可以分多个机器每个运行一到多个tomcat.

在tomcat的配置文件/conf/server.xml中去掉Cluster节点的注释(这个Cluster是用来做session同步的保证多个tomcat能达到session同步),这里注意一下,如果是一台机器运行多个tomcat请更改下

<Receiver 
                className="org.apache.catalina.cluster.tcp.ReplicationListener"
                tcpListenAddress="auto"
                tcpListenPort="4004"
                tcpSelectorTimeout="100"
                tcpThreadCount="6"/>

的tcpListenPort端口保证tomcat接受数据运行在不同的端口.

下面的节点请不要修改:

            <Membership 
                className="org.apache.catalina.cluster.mcast.McastService"
                mcastAddr="228.0.0.4"
                mcastPort="45564"
                mcastFrequency="500"
                mcastDropTime="3000"/>

如果你需要配置不同的集群,比如tomcat1,tomcat2运行为一个集群,tomcat3,tomcat4运行在第二个集群请修改mcastAddr和mcastPort只要这两个参数一样会被认为在同个集群下,session会被同步.

tomcat的session同步集群配置最后一点配置就是在需要session同步的web应用的配置文件web.xml中增加如下的配置(红色部分)例子:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat1
  </description>
  <distributable/>

</web-app>

剩下的就是让apache与tomcat通信的ajp的配置了:

去掉<Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1"> 这行的注释将原来的<Engine name="Catalina" defaultHost="localhost">这行注释起来.

    <!-- You should set jvmRoute to support load-balancing via AJP ie :-->

 

<script></script>

   <Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2"> 

将jvmRoute不同的tomcat给不同的名字这个名字将在apache中被使用来ajp的通信.(例如我的例子中tomcat1,tomcat2)

最后去掉这行的注释:

<Connector port="8009" 
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

上面的配置就完成了,然后你就可以在两个tomcat做测试:

首先给tomcat1,tomcat2下面分别访问一个test应用程序分别放一个写session的jsp文件,和读取session的jsp文件.

然后依次启动tomcat1,tomcat2(这两个不需要严格启动次序),apache.

再访问http://localhost:8209/test/SetSession.jsp

然后访问http://localhost:8209/test/ReadSession.jsp, http://localhost:8409/test/ReadSession.jsp

访问的结果应该一样,就可以说明tomcat1,tomcat2的session同步成功.

继续测试负载均衡,将readSession.jsp文件的显示样式分别改成红色和蓝色背景.

访问http://localhost:8080/test/ReadSession.jsp

多刷新几次,应该可以看到不同的现实背景,说明负载均衡成功.

然后随便关闭一个tomcat,访问上面的地址应该也成功,然后启动关闭的tomcat集群应该也可以热挂载成功!

如果你在配置中遇到什么问题,或配置好后遇到问题,可以和我联系zhdf@msn.com,或者直接留言,如上面文章有什么错误之处请指正,谢谢!

 补充一点,在linux下的安装:

root登录后顺序执行下列命令
1.解压
tar xvzf httpd-2.2.6.tar.gz
cd httpd-2.2.6

2.安装apr
cd srclib/apr
./configure --prefix=/data/httpd/apr
make
make install

3.安装apr-util
# cd ../apr-util/
# ./configure --prefix=/data/httpd/apr-util --with-apr=/data/httpd/apr
# make
# make install
# cd ../../

4.安装apache
编译为插件模式:{#./configure --prefix=/data/httpd/apache --enable-so --enable-mods-shared="proxy proxy_http proxy_ftp proxy_connect headers"}
编译到内核(目前采用这个)
#./configure --prefix=/data/httpd/apache --enable-so --enable-rewrite=share  --enable-proxy=share  --enable-proxy-ajp=share \
 --enable-proxy-balancer=share --with-apr=/data/httpd/apr  --with-apr-util=/data/httpd/apr-util 
# make
# make install 

#/data/httpd/apache/bin/httpd -l //看看是否有proxy.c,proxy-ajp.c,proxy-balancer.c这3个模块
如果有这3个模块证明proxy-ajp模块安装成功,可以进行与tomcat的结合了

 可以进行与tomcat的结合了。
# vi /data/httpd/apache/conf/httpd.conf
把"#include conf/extra/httpd-vhosts.conf" 前面的"#"去掉然后编辑
vi  /usr/local/apache/conf/extra/httpd-vhosts.conf

<VirtualHost 192.168.101.3:8111>    
   ServerAdmin zhdf@msn.com
      ServerName localhost:8111
      ServerAlias www.rymall.cn
      ErrorLog logs/rymall.cn-error_log
      CustomLog logs/rymall.cn-access_log common
  <Proxy balancer://tomcatcluster>  
   BalancerMember ajp://127.0.0.1:8009 route=tomcat1
   BalancerMember ajp://127.0.0.1:8019 route=tomcat2
   BalancerMember ajp://127.0.0.1:8029 route=tomcat3
  </Proxy> 
  <Location />
      ProxyPass  balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3  
   ProxyPassReverse  balancer://tomcatcluster/   
     </Location>  
</VirtualHost> 

然后先启动tomcat,再启动apache 

# /data/tomcat..../bin/startup.sh
# /data/httpd/apache/bin/apachctl start

 

 

注意编码问题在tomcat server.xml 加上 URIEncoding="GBK"
具体如下

<Connector port="8007" 
 enableLookups="false" redirectPort="8443" debug="0"
 protocol="AJP/1.3" URIEncoding="GBK" />

 

 

ProxyPass / balancer://tomcatcluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3 
ProxyPassReverse / balancer://tomcatcluster/ 
 
<Proxy balancer://tomcatcluster> 
BalancerMember ajp://localhost:8007 route=tomcat1 loadfactor=1 
BalancerMember ajp://192.168.1.145:8009 route=tomcat2 loadfactor=1 
</Proxy>

分享到:
评论

相关推荐

    天融信负载均衡配置手册

    天融信负载均衡配置手册 一、负载均衡的概念 在讨论天融信负载均衡系统之前,我们需要了解什么是负载均衡。负载均衡是指将incoming网络流量分布到多个服务器上,以提高服务器的可用性、可靠性和灵活性。负载均衡...

    Nginx实现负载均衡 web均衡负载 webservice负载均衡 Nginx实现负载均衡配制全说明

    Nginx实现负载均衡 web均衡负载 webservice负载均衡 Nginx实现负载均衡配制全说明 为了多台后台的web、webservice服务能均衡负载,可以使用nginx进行处理 1)配置文件全配制ok 2)有两个完整的web服务做例子,可以...

    深信服负载均衡服务开发设计API接口文档.docx

    深信服负载均衡服务开发设计 API 接口文档 深信服负载均衡服务开发设计 API 接口文档是深信服公司提供的一份关于负载均衡服务开发设计的 API 接口文档。该文档旨在为开发者提供详细的 API 接口信息,以便更好地使用...

    c#源码 Socket 负载均衡 实例

    在IT行业中,Socket编程是网络通信的基础,而负载均衡则是优化系统性能、提高服务可用性的重要技术。本实例聚焦于C#语言中的Socket编程与负载均衡的结合,为开发者提供了一个实用的参考模板。 首先,我们需要理解...

    导致内部负载均衡器间歇性丢包或负载不均衡的常见因素-Bing1

    在IT领域,尤其是在云服务和网络架构中,负载均衡器是一个关键组件,它负责分散流入的网络流量到多个后端服务器,以确保高可用性和性能。然而,有时可能会遇到内部负载均衡器出现间歇性丢包或负载不均衡的问题。以下...

    opensips与两台freeswitch负载均衡

    在构建大型VoIP系统时,负载均衡是至关重要的,它能确保服务的高可用性和可扩展性。"opensips与两台freeswitch负载均衡"的主题聚焦于如何使用OpenSIPS作为负载均衡器来管理两台Freeswitch服务器,以实现Freeswitch的...

    负载均衡器技术Nginx和F5的优缺点对比

     目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高网络层负载均衡,以及链路聚合技术。  我们使用的是软负载均衡器Nginx,而农行用的是F5硬负载均衡器,这里...

    a10负载均衡器简明运维操作手册.doc

    A10 负载均衡器运维操作手册 A10 负载均衡器是一种高性能的服务器负载均衡器,旨在提供高可用性和高性能的网络服务。为了确保 A10 负载均衡器的顺利运营,需要了解其基本硬件信息、登录方式、系统配置和维护等方面...

    win7 双网络负载均衡

    在Windows 7操作系统中,实现双网络负载均衡是一项高级网络配置技术,旨在提高网络连接的稳定性和效率。负载均衡可以通过将网络流量分散到多个网络接口上来优化带宽使用,提高系统的可用性,防止单个网络接口过载,...

    5G核心网的负载均衡策略.docx

    "5G核心网的负载均衡策略" 在 5G 核心网中,负载均衡策略是一个关键因素,可以提高网络运营效率和服务质量。基于服务化架构和接口的网元是 5G 核心网和 4G 的主要区别之一。因此,在分析 5G 核心网的负载均衡策略时...

    H3C 负载均衡设备典型配置案例集手册.pdf

    《H3C 负载均衡设备典型配置案例集手册》是一本专为网络规划人员、现场技术支持与维护人员以及网络管理员设计的手册,旨在提供H3C负载均衡产品的典型配置案例。手册涵盖了多种型号的H3C负载均衡设备,如L5030、L5060...

    基于SQL Server Alwayson技术的负载均衡研究.pdf

    这项技术结合了故障转移群集实例(FCI)和数据库镜像的优点,同时引入了新的功能,如读写分离和负载均衡,以优化资源利用率和提高服务性能。本文将深入探讨基于SQL Server Always On技术的负载均衡研究,以及如何...

    流媒体服务器集群的负载均衡

    流媒体服务器(Streaming Media Server 简写MS)集群系统能够用相对较为廉价的方式提供较强的可扩展性和良好的吞吐性能,然而要使系统资源得到充分利用却面临着许多技术上的挑战,负载均衡技术就是其中之一。...

    弘积负载均衡简易运维手册

    3.2、弘积负载均衡 3.2.1、配置节点(类似F5 poolmembers) 3.2.2、配置定义健康检查 延伸:不同poolmember采用不同健康检查(与F5类似) 目录 3.2.3、配置虚拟服务(类似F5 poolmembers) 3 3.2.4、...

    案例_共建共享场景下跨运营商负载均衡方案.pdf

    本文档讲述了共建共享场景下跨运营商负载均衡方案的研究。随着网络应用和服务的快速增长,资源需求也随之增加,导致资源短缺成为普遍问题。同时,由于用户移动与业务分布在区域上具有不均衡性,导致资源局部紧张,...

    nginx+redis负载均衡、session共享

    在构建高性能、高可用的Web服务时,"nginx+redis负载均衡、session共享"是一个常见的解决方案。这个方案结合了Nginx的反向代理和负载均衡能力,以及Redis的内存数据存储和分布式特性,用于处理高并发场景下的HTTP...

    负载均衡技术文档

    负载均衡技术是网络服务中的关键组成部分,它在大型分布式系统中扮演着至关重要的角色,确保了高可用性和可扩展性。本技术文档集合涵盖了多个负载均衡的方面,旨在帮助学习者深入理解其原理、实现方式以及应用实践。...

    一台三层交换机做双链路负载均衡(20210906110707).pdf

    关于一台三层交换机做双链路负载均衡的解决方案 在讨论中,提出了使用一台三层交换机来实现双链路负载均衡的问题。该问题的主要目的是为了解决局域网内两个网段的用户可以同时通过两条Internet线路上网,并且在一条...

    H3C Comware V5 LB多运营商不等带宽出方向链路负载均衡特性.pdf

    "H3C Comware V5 LB多运营商不等带宽出方向链路负载均衡特性" 了解链路负载均衡的重要性是网络管理员的基本素质。链路负载均衡是一种网络技术,旨在提高网络可用性、可靠性和性能。H3C Comware V5 LB提供了多运营商...

Global site tag (gtag.js) - Google Analytics