参考:
http://limingnihao.iteye.com/blog/1934548
http://xiaolu123456.iteye.com/blog/825841
非mod_jk2 模式的 粘性会话,http://snowolf.iteye.com/blog/743611 这偏文章不同于本偏文章的实现,可以参考。
2.1 Tomcat链接方式
首先我们先介绍一下为什么要让http server与Tomcat之间进行连接。事实上Tomcat本身已经提供了HTTP服务,该服务默认的端口是8080,装好tomcat后通过8080端口可以直接使用Tomcat所运行的应用程序,你也可以将该端口改为80。既然Tomcat本身已经可以提供这样的服务,我们为什么还要引入Apache或者其他的一些专门的HTTP服务器呢?原因有下面几个:
1. 提升对静态文件的处理性能。
2. 利用Web服务器来做负载均衡以及容错。
3. 无缝的升级应用程序。
这三点对一个web网站来说是非常之重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因为某个Tomcat宕机或者是升级程序导致用户访问不了,而能完成这几个功能的、最好的HTTP服务器也就只有apache的http server了,它跟tomcat的结合是最紧密和可靠的。
默认情况下,Tomcat在server.xml中配置了两种连接器:
第一个连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
第二个连接器监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。
两种端口可以同时开,也可以开一个。例如我们使用apache通过ajp进行负载均衡配置时,可以关掉tomcat的http8080端口以防止可以被单独访问。
Web客户访问Tomcat服务器上JSP组件的两种方式如图:
使用http方式,配置文件
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
使用ajp方式,配置文件
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
2.2 mod_proxy
mod_proxy_balancer是apache httpd自带的负载平衡支持。其优点可以根据实际的运行时机器的环境来决定负载均衡的策略。实现Session在node上进行共享传递。
2.2.1 加载so库
#mod_proxy_blancer
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#mod_proxy_blancer LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
2.2.2 http方式
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080 loadfactor=3
BalancerMember http://127.0.0.1:7080 loadfactor=3
ProxySet lbmethod=byrequests
</Proxy>
ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse /test balancer://mycluster/
<Proxy balancer://mycluster> BalancerMember http://127.0.0.1:8080 loadfactor=3 BalancerMember http://127.0.0.1:7080 loadfactor=3 ProxySet lbmethod=byrequests </Proxy> ProxyRequests Off ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off ProxyPassReverse /test balancer://mycluster/
实现负载均衡的原理为:假设Apache接收到http://127.0.0.1 /test请求,由于该请求满足ProxyPass条件(其URL前缀为“/"),该请求会 被分发到后台某一个BalancerMember。譬如该请求可能会转发到http://127.0.0.1:8080/进行处理。当第二个满足条件的URL请求过来时,该请求可能会被分发到另外一台BalancerMember,譬如,可能会转发到 http://127.0.0.1:7080/如此循环反复,便实现了负载均衡的机制。
loadfactor表示:后台服务器负载到由Apache发送请求的权值,该值默认为1,可以将该值设置为1到100之间的任何值。以上面的配置为例,进行4此请求时,则有3次连续的这样请求被负载到BalancerMember为http://127.0.0.1:8080/的服务器;有1次被负载到BalancerMember为http://127.0.0.1:7080/的服务器。
lbmethod表示:负载载均衡策略。
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)
ProxyPass表示:所有的test请求都会重定向到balancer://mycluster/处理。balancer是内置负载。
ProxyPassReverse表示:反向代理,也就是将所有的请求反向代理到负载均衡后的应用url路径中。
stickysession表示:进行Session复制使用。
2.2.3 AJP方式
tomcat提供了ajp协议和httpd通信。当不想tomcat的8080端口开放时,可以使用此方式,配置文件:
<Proxy balancer://mycluster>
BalancerMember ajp://127.0.0.1:8009 loadfactor=2 route=tomcat1
BalancerMember ajp://127.0.0.1:7009 loadfactor=2 route=tomcat2
ProxySet lbmethod=byrequests
</Proxy>
ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse /test balancer://mycluster/
<Proxy balancer://mycluster> BalancerMember ajp://127.0.0.1:8009 loadfactor=2 route=tomcat1 BalancerMember ajp://127.0.0.1:7009 loadfactor=2 route=tomcat2 ProxySet lbmethod=byrequests </Proxy> ProxyRequests Off ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off ProxyPassReverse /test balancer://mycluster/
2.2.4 热备份
热备份的实现很简单,只需添加 status=+H 属性,就可以把某台服务器指定为备份服务器:
此时请求总是流向 8080这个url ,一旦8080挂掉, Apache会检测到错误并把请求分流给7080。Apache会每隔几分钟检测一下8080的状况,如果8080恢复,就继续使用8080。
<Proxy balancer://mycluster>
BalancerMember http://127.0.0.1:8080
BalancerMember http://127.0.0.1:7080 status=+H
ProxySet lbmethod=byrequests
</Proxy>
ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse /test balancer://mycluster/
<Proxy balancer://mycluster> BalancerMember http://127.0.0.1:8080 BalancerMember http://127.0.0.1:7080 status=+H ProxySet lbmethod=byrequests </Proxy> ProxyRequests Off ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off ProxyPassReverse /test balancer://mycluster/
2.2.5 虚拟主机
配置文件
<VirtualHost *:80>
ServerAdmin limingnihao@iteye.com
ServerName localhost
ServerAlias localhost
<Proxy balancer://mycluster>
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomcat1
BalancerMember ajp://127.0.0.1:7009 loadfactor=1 route=tomcat2
ProxySet lbmethod=bytraffic
</Proxy>
ProxyRequests Off
ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off
ProxyPassReverse /test balancer://mycluster/
ErrorLog "logs/error.log"
CustomLog "logs/access.log" common
</VirtualHost>
<VirtualHost *:80> ServerAdmin limingnihao@iteye.com ServerName localhost ServerAlias localhost <Proxy balancer://mycluster> BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=tomcat1 BalancerMember ajp://127.0.0.1:7009 loadfactor=1 route=tomcat2 ProxySet lbmethod=bytraffic </Proxy> ProxyRequests Off ProxyPass /test balancer://mycluster/ stickysession=JSESSIONID nofailover=Off ProxyPassReverse /test balancer://mycluster/ ErrorLog "logs/error.log" CustomLog "logs/access.log" common </VirtualHost>
2.2.6 监控功能
可添加以下配置,可以查看监控页面。通过访问:http://127.0.0.1/balancer-manager。
配置文件
<Location /balancer-manager>
SetHandler balancer-manager
Order Allow,Deny
Allow from all
</Location>
<Location /balancer-manager> SetHandler balancer-manager Order Allow,Deny Allow from all </Location>
2.3 mod_jk
Tomcat提供了专门的JK插件来负责Tomcat和HTTP服务器的通信。应该把JK插件安置在对方的HTTP服务器上。当HTTP服务器接收到客户请求时,它会通过JK插件来过滤URL,JK插件根据预先配置好的URL映射信息,决定是否要把客户请求转发给Tomcat服务器处理。例如预先配置好所有"/*.jsp"形式的URL都由Tomcat服务器来处理
Tomcat提供了不同的JK插件的实现模块。常用的JK插件有:
与Apache HTTPD服务器集成:mod_jk.so
与Windows IIS服务器集成:isapi_redirect.dll
2.3.1 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的说明告诉应该如何使用它们。
2.3.1.1 全局配置项
指令 | 默认 | 说明 |
worker.list | ajp13 | 由逗号分离开的worker名称列表. |
worker.maintain | 60 | 辅助连接池保持间隔,以秒为单位。 |
2.3.1.2 链接指令
可配置一个通用的,然后每个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 | 负载平衡器权值 |
2.3.1.3 负载均衡设置
指令 | 默认 | 说明 |
balance_workers | 逗号分隔的worker列表 | |
sticky_session | true | 负载喷发采用Session粘贴机制,按SessionID喷发请求。为了保障同一SessionID的请求被分发到同一台服务器上。 |
sticky_session_force | false | 如果为True, SessionID并不合法时则返回500错误,否则,丢掉Session并转发到另外的机器上。 |
2.3.1.4 实例
# 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=tomcat1
worker.tomcat1.reference=worker.template
worker.tomcat1.host=127.0.0.1
worker.tomcat1.port=8009
worker.tomcat1.activation=A
# Second member is "tomcat2", most attributes are inherited from the template "worker.template".
worker.balancer.balance_workers=tomcat2
worker.tomcat2.reference=worker.template
worker.tomcat2.host=127.0.0.1
worker.tomcat2.port=7009
worker.tomcat2.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
# 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=tomcat1 worker.tomcat1.reference=worker.template worker.tomcat1.host=127.0.0.1 worker.tomcat1.port=8009 worker.tomcat1.activation=A # Second member is "tomcat2", most attributes are inherited from the template "worker.template". worker.balancer.balance_workers=tomcat2 worker.tomcat2.reference=worker.template worker.tomcat2.host=127.0.0.1 worker.tomcat2.port=7009 worker.tomcat2.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
2.3.2 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
/*.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
2.3.3 httpd.conf
需要在中添加httpd的配置文件中加载jk的配置文件。
# 加载jk配置文件
#Include conf/mod_jk.conf
# 加载jk配置文件 #Include conf/mod_jk.conf
2.3.4 mod_jk.conf
# a versioned file name.
LoadModule jk_module modules/mod_jk_2.2_32.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>
# a versioned file name. LoadModule jk_module modules/mod_jk_2.2_32.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>
2.3.5 编译Linux版本JK
在linux自行编译jk时,需要以下步骤:
1.解压tomcat-connectors-1.2.37-src.tar.gz
2.指定httpd的apxs文件。他会自动将mod_jk.do生成到httpd的modules下。
./configure --with-apxs=/opt/apache/httpd/bin/apxs
./configure --with-apxs=/opt/apache/httpd/bin/apxs
2.4 Session同步方式
2.4.1 sticky模式
前端balancer可实现sticky模式的session同步功能。利用负载均衡器的sticky模式的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群中各个tomcat节点上,实现负载均衡的能力。这样做的缺点是没有灾难恢复的能力。一旦一个节点发生故障,这个节点上所有的session信息全部丢失;同一用户同一session只和一个webServer交互,一旦这个webserver发生故障,本次session将丢失,用户不能继续使用。
2.4.2 复制模式
利用Tomcat session复制的机制使得所有session在所有Tomcat节点中保持一致。当一个节点修改一个session数据的时候,该节点会把这个 session的所有内容序列化,然后广播给所有其它节点。这样当下一个用户请求被负载均衡器分配到另外一个节点的时候,那个节点上有完备的 session信息可以用来服务该请求。这种做法的问题是对session哪怕有一点点修改,也要把整个sessions数据全部序列化 (serialize),还要广播给集群中所有节点,不管该节点到底需不需要这个session。这样很容易会造成大量的网络通信,导致网络阻塞。一般采 用这种方式,当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了;
此方式是通过tomcat本身提供的功能,只需要修改server.xml文件
(1)修改Engine节点信息: <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
(2)去掉<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 的注释符
(3)web.xml中增加 <distributable/>
2.5 Linux部署常见问题
1.Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
加载mod_slotmem_shm.so就可以了。
2.BalancerMember Can't find 'byrequests' lb method
三种模式,需要加载三个so:
mod_lbmethod_bybusyness.so
mod_lbmethod_byrequests.so
mod_lbmethod_bytraffic.so
我在项目组实际的配置是:
vim httpd.conf 在最后添加:
jk软件是:tomcat-connectors-1.2.40-src.tar.gz 版本下载地址http://tomcat.apache.org/download-connectors.cgi
Include /usr/local/apache/conf/mod_jk.conf
如下图
mon_dk.conf 、uriworkermap.properties和workers.properties 共3个文件
mok_jk.conf 的配置如下:
LoadModule jk_module /usr/local/apache/modules/mod_jk.so
#加载集群中的workers
JkWorkersFile /usr/local/apache/conf/workers.properties
#加载workers的请求处理分配文件
JkMountFile /usr/local/apache/conf/uriworkermap.properties
#指定jk的日志输出文件
JkLogFile /usr/local/apache/logs/mod_jk.log
#指定日志级别
JkLogLevel warn
#指定日志的格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
#指定哪些请求交给tomcat处理,"controller"为在 workers.propertise里指定的负载分配控>制器名
JkMount /*.* controller
uriworkermap.properties配置如下:
#ller这个server处理
/*=controller
#所有包含jkstatus请求的都由status这个 server处理
/jkstatus=status
#这里的"!”是“非”的意思。
!/*.gif=controller
!/*.jpg=controller
!/*.png=controller
!/*.css=controller
!/*.js=controller
workers.properties 配置如下:
worker.list=controller,tomcat1,tomcat2
#========tomcat1========
worker.tomcat1.port=8009
#ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=172.16.8.83
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
#server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=8009
#ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=172.16.8.84
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
#server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
#server名为controller,用于负载均衡
worker.retries=3
#重试次数
worker.controller.balance_workers=tomcat1,tomcat2
#粘性Session(默认是打开的) 当该属性值=True(或1)时,代表Session是粘性的,即同一Session在集群中的同一个节点上处理,Session不跨越节点。在集群环境中,一般将该值设置为False
worker.controller.sticky_session=true
#设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,也有设置为0才>可以的
worker.controller.sticky_session_force=false
worker.status.type=status
papche到此时配置结束。
剩下修改tomcat 的server.xml 、 web.xml 和发布的项目中的web,xml
这2个web.xml 中添加:
<!-- 集群 表明要复制session,一般放在最后-->
<distributable/>
server.xml 中修改、添加:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8" >
<Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" />
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000" />
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6" />
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="" />
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false" />
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
</Cluster>
相关推荐
当我们谈论"Apache,tomcat负载均衡和session复制"时,这意味着我们要探讨如何在多台服务器之间分配负载,并确保用户会话的无缝迁移和一致性。 **负载均衡**是解决高并发、高可用性问题的重要策略。它通过将来自...
总的来说,Apache负载均衡和Tomcat集群及session复制是提高Web应用性能和可靠性的关键技术。正确配置和理解这些概念,对于优化Java Web应用的部署和管理至关重要。实际操作中,还需要考虑网络环境、服务器性能以及...
本篇文章将详细介绍如何在 Linux 环境下搭建基于 Apache 和 Tomcat 的集群负载均衡,并实现 session 复制,以确保在多台服务器之间能够无缝地进行会话共享。 #### 二、环境配置 在部署 Apache+Tomcat 集群之前,...
标题中的“在32位操作系统上配置apache+tomcat集群/负载均衡/session复制”涉及到的是在32位系统环境下,如何构建一个使用Apache HTTP Server作为前端负载均衡器,与多个Tomcat应用服务器协同工作的集群环境,并实现...
Apache+Tomcat+Linux集群和均衡负载(Session同步复制
Weblogic与Apache结合进行负载均衡和群集配置是一种常见的企业级解决方案,用于提高Web应用程序的可用性和性能。这种配置方式通常适用于大型系统,通过分散负载到多个服务器,防止单点故障,确保服务的高可用性。 1...
以上就是Nginx与Tomcat在Windows环境下配置负载均衡集群及session复制的基本步骤。需要注意的是,实际部署时,可能还需要考虑更多因素,比如安全性、性能优化、故障恢复策略等,以确保系统的稳定性和高效性。同时,...
Apache Tomcat 负载均衡整合是通过特定的配置实现多台Tomcat服务器协同工作,以提高应用的可用性和响应速度。在这个过程中,Apache HTTP Server作为前端代理,负责接收客户端请求,并根据预设的策略将请求分发到后端...
在IT行业中,尤其是在Web服务器配置和优化领域,TOMCAT和APACHE的集成以及session复制是两个关键概念。本文将详细讲解这两个主题,并提供一个基于实际操作的demo概述。 首先,TOMCAT是一款流行的开源Java Servlet...
Apache的Tomcat负载均衡与集群配置是Web服务器和应用服务器扩展性能的重要手段,它通过将请求分散到多个服务器上,可以提高系统的响应速度和可用性。在这个过程中,mod_jk模块扮演了关键角色,它是Apache HTTP服务器...
通过以上配置,可以有效地实现Apache Tomcat的负载均衡,提升系统的稳定性和性能。在实际操作中,可能还需要根据具体的应用场景调整配置细节,例如增加安全性设置、优化网络参数等,以达到最佳的运行效果。
【Apache+Tomcat 集群与负载均衡及Session绑定】是将多个Apache和Tomcat服务器配置成一个集群,以实现更高的服务可扩展性和可用性。集群的基本思想是通过将工作负载分散到多个服务器,避免单点故障,提高系统的整体...
【Nginx负载均衡配置】 在互联网高并发的环境下,单台服务器往往无法满足大量用户的访问需求,此时就需要采用负载均衡技术。Nginx作为一款高性能的反向代理服务器,常用于实现软负载均衡,其配置简单且成本低廉。...
综上所述,配置Apache Tomcat的负载均衡和集群需要结合反向代理服务器和适当的session复制策略。正确实施后,可以显著提升Web应用的可用性和性能,同时为用户提供无缝的会话体验。在实际操作中,务必根据具体环境和...
【Apache + Tomcat Session 复制】:在一台运行Windows XP的计算机上,要实现Apache HTTP Server和Tomcat的负载均衡以及Session复制,通常需要使用Apache的mod_jk模块。这个过程涉及到Apache、Tomcat的配置,以及mod...
Apache和Tomcat的组合经常被用来搭建这样的架构,特别是在实现负载均衡和集群时。在这个场景中,session同步是一个核心问题,因为用户session数据的正确管理和共享是保持应用程序一致性和用户体验的关键。本文将深入...
JK模块负责通信、负载均衡以及session复制。 1. **JK模块配置**:`mod_jk.so`的配置主要在Apache的httpd.conf或独立的workers.properties文件中进行。需要定义每个Tomcat实例的工作者(worker),包括它们的IP地址...