一、会话保持的几种方式
1、session sticky粘性会话保持方式
方法一、source_ip#源地址绑定
nginx: ip_hash
haproxy: source
lvs: sh
方法二、cookie:#cookie绑定
nginx:hash
haproxy: cookie
vim /etc/nginx/nginx.conf
http{
..........
upstream tcsrvs {
#一致性哈希算法绑定后端主机,保持会话
hash $request_uri consistent;
#使用cookie绑定后端主机,保持会话
hash $cookie_name consistent;
server 192.168.1.15:8080;
server 192.168.1.16:8080;
}
vim /etc/nginx/conf.d/ilinux.conf
server {
listen 80;
server_name www.ilinux.io
location / {
proxy_pass http://tcsrvs;
}
}
..........
}
2、session cluster:增量会话集群方式。
3、 session server:使用会话服务器redis和memcached实现。
二、会话组
1、BalancerMember:会话组
BalancerMember [balancerurl] url [key=value [key=value ...]]
status信息状态:
D: 禁止状态
S: 管理终止,人为软终止
I: 健康状态
H: sorry页
E: 不健康状态
N: 只有分配过来的请求才响应
loadfactor:负载因子,即权重;
- lbmethod:
平衡器负载平衡法。选择要使用的负载平衡调度器方法。字节请求,用于执行加权请求计数;字节通信量,用于执行加权通信量字节计数平衡;或字节繁忙,用于执行挂起请求平衡。默认是ByRebug。
2、粘贴会话
- 平衡器粘性会话名称。该值通常设置为JSESSIONID或PHPSES.ID之类的值,并且它取决于支持会话的后端应用服务器。如果后端应用服务器对cookie使用不同的名称,并且url编码的id(如servlet容器)使用|将它们分开。第一部分是Cookie,第二部分是路径。
- 在Apache HTTP服务器2.4.4和以后可用。
会话粘性的实现方法:
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
三、基于会话组的Tomcat Cluster负载均衡集群
1、 httpd + tomcat cluster实现方法一
httpd模块: mod_proxy, mod_proxy_http, mod_proxy_balancer
tomcat cluster:http 连接器
使用http连接器实现:
BalancerMember http://192.168.1.15:8080 route=TomcatA loadfactor=1 #会话组成员
BalancerMember http://192.168.1.16:8080 route=TomcatB loadfactor=2
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID
ServerName lb.ilinux.io
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
Require all granted
ProxyPass / balancer://tcsrvs/ #反向代理,调用tcsrvs会话组
ProxyPassReverse / balancer://tcsrvs/
Require all granted
启用管理接口:
.....
SetHandler balancer-manager #启用管理页面
ProxyPass ! #不向后反代
Require all granted #定义谁可以使用此功能
示例程序:
演示效果,在TomcatA上某context中(如/test),提供如下页面
<%@ page language="java" %>
TomcatA
TomcatA.ilinux.io
Session ID
<% session.setAttribute("ilinux.io","ilinux.io"); %>
<%= session.getId() %>
Created on
<%= session.getCreationTime() %>
演示效果,在TomcatB上某context中(如/test),提供如下页面
<%@ page language="java" %>
TomcatB
TomcatB.ilinux.io
Session ID
<% session.setAttribute("ilinux.io","ilinux.io"); %>
<%= session.getId() %>
Created on
<%= session.getCreationTime() %>
(2) httpd + tomcat cluster实现方法二
httpd模块: mod_proxy, mod_proxy_ajp, mod_proxy_balancer
- tomcat cluster:ajp连接器
BalancerMember ajp://192.168.1.15:8009
BalancerMember ajp://192.168.1.16:8009
ProxySet lbmethod=byrequests
ServerName lb.ilinux.io
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
Require all granted
ProxyPass / balancer://tcsrvs/
ProxyPassReverse / balancer://tcsrvs/
Require all granted
SetHandler balancer-manager
ProxyPass !
Require all granted
保持会话的方式参考前一种方式。
四、会话管理集群管理器Tomcat Session Replication Cluster
1、配置启用集群,将下列配置放置于或中;
每台tomcat主机都要添加;
~ #] vim /etc/tomcat/server.xml
......
#通知其他服务器
#定义信道
#离线时长
#最大并发连接数
#发送器
#轮询的并发送器
#过滤器
#过滤器
确保Engine的jvmRoute属性配置正确。
2、 配置webapps
编辑所有的tomcat服务器的WEB-INF/web.xml,添加
~ #] cp /etc/tomcat/web.xml /var/lib/tomcat/webapps/test/WEB-INF/
~ #] vim /var/lib/tomcat/webapps/test/WEB-INF/web.xml
..................
#t添加元素
.................
绑定的地址为auto时,会自动解析本地主机名,并解析得出的IP地址作为使用的地址;
[root@tomcat-77 ~]# vim /etc/hosts #查看主机名和ip 是否正确