Tomcat Cluster
会话保持:
session sticky
基于source ip绑定
基于cookie绑定
session cluster(将多个应用程序服务器部署为集群):
session server
kv: memcached、redis
(1) LB tomcat
nginx+tomcats
apache+tomcats
(2) LB tomcat cluster
(3) LB tomcat
session server
memcached
apache构建tomcat集群方案:
(1) apache:
mod_proxy
mod_proxy_http
mod_proxy_balancer
tomcat:
http connector
使用mod_proxy做负载均衡的一系列参数描述:
ProxyPreserveHost{On|Off}:如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器,而不再使用ProxyPass指定的服务器地址,如果想在反向代理中支持虚拟
主机,则需要开启此选项,否则无须打开此功能
ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via,主要用于在多级代理中控制代理请求的流向,默认为Off;On表示每个请求和响应报文均添加Via;Full表示每
个Via行都会添加当前apache服务器的版本号信息;Block表示每个代理请求报文中的Via都会被移除
ProxyRequests {On|Off}: 是否开启apache正向代理的功能,启用此选项为了代理http协议必须启用mod_proxy_http模块,同时,如果为apache设置了ProxyPass,则必须将
ProxyRequests设置为Off
ProxyPass [path] !|url [key=value key=value key=value...]:将后端服务器某URL与当前服务器的某虚拟路径关联起来作为提供服务的路径,path为当前服务器上的某虚拟
路径,url为后端服务器上的某URL路径,使用此指令时必须将ProxyRequests的值设为Off,需要注意的是,如果path以"/"结尾,则对应的url也必须以
"/"结尾
mod_proxy模块支持与后端服务器的连接池功能,连接在按需创建在可以保存至连接池中以备进一步使用,连接池配置在ProxyPass中使用key=value定义,常用key如下
min: 连接池最小等待线程
max: 连接池最大等待线程
loadfactor: 用于负载均衡集群配置中,定义对应后端服务器的权重,取值范围为1~100
retry: 当apache将请求发送至后端服务器得到错误响应时等待多长时间后再重试,单位是秒
如果Proxy指定是balancer://{name}开头,即用于负载均衡集群时,其还可以接受一些特殊的参数,内容如下:
lbmethod: 负载均衡调度方法,默认是byrequests,即根据请求调度,基于请求做轮询;bytraffic即使基于流量做轮询;bybusyness通过服务器的当前负载进行调度
maxattempts: 最大尝试次数,放弃请求之前实现故障转移的次数,默认为1
nofailover: 不允许做故障转移,默认为OFF的,当绑定session的时候要关闭此功能,设置为On
stickysession: 调度器的sticky session的名字,根据web程序语言的不同,其值为JSESSIONID或PHPSESSIONID
上述指令除了能在balancer://或ProxyPass中设定之外,也可以使用ProxySet指令直接进行设置,内容如下:
#指定负载均衡集群名称为hotcluster
BalancerMember http://www1.kaikai.com:8080 loadfactor=1 route=TomcatA #指定负载均衡成员以及权重,并且指明是后端哪台tomcat,route是tomcat的
Engine中使用jvmRote=""标识的
BalancerMember http://www2.kaikai.com:8080 loadfactor=2 route=TomcatB
ProxySet lbmethod=bytraffic #指定负载均衡调度算法
示例:
1、编辑/etc/httpd/conf.d/vhosts.conf配置文件
BalancerMember http://192.168.119.101:8080 loadfactor=10 route=TomcatA
BalancerMember http://192.168.119.102:8080 loadfactor=10 route=TomcatB
ServerName web1.kaikai.com
ProxyVia On
ProxyRequests Off
ProxyReserveHost On
Require all granted
ProxyPass / balancer://lcluster1/
ProxyPassReverse / balancer://lcluster1/
Reuqire all granted
2、基于session进行会话绑定
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
BalancerMember http://192.168.119.101:8080 loadfactor=10 route=TomcatA
BalancerMember http://192.168.119.102:8080 loadfactor=10 route=TomcatB
ProxySet stickysession=ROUTEID
ServerName web1.kaikai.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
Order allow,deny
Allow from all
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
Order allow,deny
Allow from all
(2) apache:
mod_proxy
mod_proxy_ajp
mod_proxy_balancer
tomcat:
ajp connector
(3) apache(很少使用了):
mod_jk
tomcat:
ajp connector