Apache+Tomcat部署负载均衡

  1. 下载需要的文件 我用的两个 tomcat8,Apache24,mod_jk.so 1.2.40的
    这个是apache的文件去apache下载
    地址 https://www.apachehaus.com/cgi-bin/download.plx#APACHE24VC14
    下载好解压即可
    这个是 mod_jk下载的文件
    地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/
    下载后解压会有一个 mod_jk.so文件 把他放到D:\SoftWare\Apache24\modules里面

2.先配置好apache服务器 的配置文件
打开D:\SoftWare\Apache24\conf 下面加三个配置文件
在这里插入图片描述

mod_jk.conf 里面的配置

	LoadModule access_compat_module modules/mod_access_compat.so
	LoadModule jk_module modules/mod_jk.so
	<IfModule jk_module>
	    JkWorkersFile conf/workers.properties
	    JkLogFile logs/mod_jk.log
	    JkLogLevel info
	    JkShmFile logs/mod_jk.shm
	    # JkOptions +RejectUnsafeURI
	    # JkStripSession On
	    JkWatchdogInterval 60
	    <Location /jk-status>
	        # Inside Location we can omit the URL in JkMount
	        JkMount jk-status
	        Order deny,allow
	        Deny from all
	        Allow from 127.0.0.1
	    </Location>
	    <Location /jk-manager>
	        # Inside Location we can omit the URL in JkMount
	        JkMount jk-manager
	        Order deny,allow
	        Deny from all
	        Allow from 127.0.0.1
	    </Location>
	    JkMountFile conf/uriworkermap.properties
	JkMount /* balancer
	    # JkUnMount /myapp/static/* *
	    # JkUnMount /myapp/images/* balancer
	    # SetEnvIf REQUEST_URI "\.(htm|html|css|gif|jpg|js)$" no-jk
	    # SetEnvIf Request_URI "/transactions/" JK_REPLY_TIMEOUT=600000
	    # SetEnvIf Request_URI "/reports/" JK_REPLY_TIMEOUT=0
	</IfModule>

Workers.properties

Workers实际上属于Tomcat的链接器(Connector),代表了一个Tomcat实例,这个实例代表了由某种web服务器来执行 servelet程序。举例来说,我们可以使用某个服务器,例如apache 来把servelet请求转递Tomcat进程(worker)来进行后台处理。

这样我们就可以通过配置多个 Worker,让不同的请求能够被不同的Worker处理,这些Worker可以提供不同的开发环境,使得所有开发者可以共享一个服务器而每个人都拥有自己的Worker。

想要提供负载平衡,只要在同一台机器上运行多个Tomcat Worker并且能够在这些Worker之间分布Web请求。

Tomcat Workers都定义在一个叫做workers.properties属性文件之中,并且workers的说明告诉应该如何使用它们。

全局配置项
	指令	默认	说明
	worker.list	ajp13	由逗号分离开的worker名称列表.
	worker.maintain	60	辅助连接池保持间隔,以秒为单位。
	 
链接指令


	可配置一个通用的,然后每个work进行继承。
	
指令	默认	说明
	type	ajp13	指定Tomcat服务器 与Apache之间的通信协议
	host	localhost	Tomcat主机名或 IP 地址。
	port	8009	Tomcat侦听端口号。AJP13的默认端口是8009.
	socket_connect_timeout	socket_timeout*1000	套接字超时时间(毫秒为单位)。
	socket_keepalive	false	在未激活的连接中发送KEEP_ALIVE信息(发送间隔时间依赖于操作系统的设置,一般为120秒)
	ping_mode	-	
	探测tomcat的状态策略。
	
	C(content):链接模式,最后一次链接判断是否超时。connect_timeout定义时间。若未定义使用ping_timeout。
	
	P(prepost):请求模式,通过每次请求判断是否超时。prepost_timeout定义时间。若未定义使用ping_timeout。
	
	I(interval):间隔模式,定期检测链接是否超时。connection_ping_interval间隔时间。ping_timeout超时时间。
	
	A:以上所有的探测策略都将开启。
	
	connection_pool_size	 	JK会维护多个长连接做为一个池。它被用来设置每个WebServer(Apache)子进程的最大连接数。
	connection_pool_minsize	(pool+1)/2	连接池中维护最小的连接数。
	connection_pool_timeout	0	在连连池中维护的非活动连接连续多少秒后被释放。如果为0,则不释放。
	connection_acquire_timeout	retries*retry_interval	获取接连的超时。
	lbfactor	1	负载平衡器权值
	 
	
	 
	
 负载均衡设置
	指令	默认	说明
	balance_workers	 	逗号分隔的worker列表
	sticky_session	true	负载喷发采用Session粘贴机制,按SessionID喷发请求。为了保障同一SessionID的请求被分发到同一台服务器上。
	sticky_session_force	false	如果为True, SessionID并不合法时则返回500错误,否则,丢掉Session并转发到另外的机器上。

workers.properties的配置

		# Define two status worker:
		# - jk-status for read-only use
		# - jk-manager for read/write use
		worker.list=jk-status
		worker.jk-status.type=status
		worker.jk-status.read_only=true
		 
		worker.list=jk-manager
		worker.jk-manager.type=status
		 
		# We define a load balancer worker
		# with name "balancer"
		worker.list=balancer
		worker.balancer.type=lb
		worker.balancer.error_escalation_time=0
		worker.balancer.max_reply_timeouts=10
		worker.balancer.sticky_session=true
		worker.balancer.sticky_session_force=true  
		 
		# Now we add members to the load balancer First member is "tomcat1", most attributes are inherited from the template "worker.template".
		worker.balancer.balance_workers=tomcatA
		worker.tomcatA.reference=worker.template
		worker.tomcatA.host=127.0.0.1
		worker.tomcatA.port=18009
		worker.tomcatA.activation=A
		 
		# Second member is "tomcat2", most attributes are inherited from the template "worker.template".
		worker.balancer.balance_workers=tomcatB
		worker.tomcatB.reference=worker.template
		worker.tomcatB.host=127.0.0.1
		worker.tomcatB.port=28009
		worker.tomcatB.activation=A
		 
		# Finally we put the parameters
		worker.template.type=ajp13
		worker.template.socket_connect_timeout=5000
		worker.template.socket_keepalive=true
		worker.template.ping_mode=A
		worker.template.ping_timeout=10000
		worker.template.connection_pool_minsize=0
		worker.template.connection_pool_timeout=600
		worker.template.reply_timeout=300000
		worker.template.recovery_options=3

uriworkermap.properties 里的配置

			/*.do=balancer
			/*.jsp=balancer
			#/*.gif=balancer
			#/*.jpg=balancer
			#/*.png=balancer
			#/*.css=balancer
			#/*.js=balancer
			#/*.htm=balancer
			#/*.html=balancer
			#/*.txt=balancer
			# Optionally filter out all .jpeg files inside that context
			# For no mapping the url has to start with exclamation (!)
			!/servlets-examples/*.jpeg=lb
			#
			# Mount jkstatus to /jkmanager
			# For production servers you will need to
			# secure the access to the /jkmanager url
			#
			/jk-manager=jk-manager
			/jk-status=jk-status               

http://tomcat.apache.org/connectors-doc/reference/uriworkermap.html

修改 httpd.conf
在这里插入图片描述
这个路径修改成你自己的路径
在这里插入图片描述
确保这个端口是打开的

在这里插入图片描述
文件的最底部添加代码 Include conf/mod_jk.conf

此时 apache就配置好了  常用的命令如下  
httpd.exe -k install  #安装
httpd.exe -k install   #卸载
httpd.exe -k start  #启动
httpd.exe -k restart #重启
httpd.exe -k  stop  #停止  

3.修改 tomcat 配置 两个 tomcat的 端口号都不要一样就好
集群session同步的 兩種方式 一个是 http的 sticky模式 一个是 用ajp的 复制模式

sticky模式

前端balancer可实现sticky模式的session同步功能。利用负载均衡器的sticky模式的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群中各个tomcat节点上,实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。一旦一个节点发生故障,这个节点上所有的session信息全部丢失;同一用户同一session只和一个webServer交互,一旦这个webserver发生故障,本次session将丢失,用户不能继续使用。

复制模式

利用Tomcat session复制的机制使得所有session在所有Tomcat节点中保持一致。当一个节点修改一个session数据的时候,该节点会把这个 session的所有内容序列化,然后广播给所有其它节点。这样当下一个用户请求被负载均衡器分配到另外一个节点的时候,那个节点上有完备的 session信息可以用来服务该请求。这种做法的问题是对session哪怕有一点点修改,也要把整个sessions数据全部序列化 (serialize),还要广播给集群中所有节点,不管该节点到底需不需要这个session。这样很容易会造成大量的网络通信,导致网络阻塞。一般采 用这种方式,当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了;

    <Connector port="9101" protocol="HTTP/1.1"   #修改端口号
               connectionTimeout="20000" redirectPort="8443"
            />
	<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" /> #修改端口号

<Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcat1">下面添加如下,为了集群配置

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                  channelSendOptions="6">
              <Manager className="org.apache.catalina.ha.session.BackupManager"
                    expireSessionsOnShutdown="false"
                    notifyListenersOnReplication="true"
                    mapSendOptions="6"/>
           <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                         bind="127.0.0.1"
                         address="228.0.0.4"
                         port="45564"
                         frequency="500"
                         dropTime="3000"/>
             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                       address="auto"
                       port="4001"
                       selectorTimeout="100"
                       maxThreads="6"/>
             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" timeout="60000"/> 
             </Sender>
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
           </Channel>
           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                  filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    </Cluster>

4.项目的 web.xml 最底部加代码
在这里插入图片描述

此时 启动 分别启动tomcat 启动apache 就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概念: AJP是Apache提供的完成与其它服务器通讯的一种协议。在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后做适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_ajp模块。 配置过程: 1 安装apache 2 测试apache是否安装成功:http://localhost 出现It works! 3 解压、安装tocmat 4 测试tocmat是否安装成功:http://localhost:8080 5 配置tocmat的jdk: 打开startup.bat添加: rem ----------------------------------------------------JDK目录 SET JAVA_HOME=D:\progam\jdk160_05 rem ----------------------------------------------------解压后Tomcat的目录 6 复制tocmat,名字为tomcat2 7 apache 整合tomcat 1)modules目录下添加模块:jk mod_jk-1.2.26-httpd-2.2.4.so 2)修改conf/httpd.conf 最后一行添加: include conf/mod_jk.conf 3)在conf目录下创建mok_jk.conf 内容: #加载mod_jk Module LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so #指定 workers.properties文件路径 JkWorkersFile conf/workers.properties #指定哪些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名 JkMount /*.jsp controller 4)在confi目录下创建workers.properties 内容为: worker.list = controller,tomcat1,tomcat2 #========tomcat1======== worker.tomcat1.port=8009 worker.tomcat1.host=192.168.9.210 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #加权因子 越大执行的请求越多 #========tomcat2======== worker.tomcat2.port=9009 worker.tomcat2.host=192.168.9.210 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #========controller,负载均衡控制器======== worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=1 5 修改tomcat的端口号(3处) <Server port="8005" shutdown="SHUTDOWN"> 改为: <Server port="9005" shutdown="SHUTDOWN"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> 改为: <Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> 改为: <Connector port="9009" protocol="AJP/1.3" redirectPort="8443"/> 注意:该处需要与worker.tomcat2.port=9009对应 6 修改jvmRoute 备注与worker.list = controller,tomcat1,tomcat2的tomcat1或tocmat2对应 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值