Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster
Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster大纲
前言
[*]实验拓扑
[*]实验步骤
[*]安装配置tomcat
[*]安装配置Apache Httpd并测试
[*]实现session sticky
[*]实现Session Cluster
[*]总结
前言
上篇文章我们介绍如何构建一个LANMT平台并搭建一个jspxcms, 这次我们介绍使用apache httpd负载均衡Tomcat并实现Session Sticky和Session Cluster
实验拓扑
实验步骤
安装配置tomcat
我们首先配置Tomcat, 安装过程这里不做叙述, 不明白的可以看我上篇博客: tomcat基础进阶
安装Tomcat,node2,3都要操作
# # wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz
# tar xf apache-tomcat-8.0.33.tar.gz-C /usr/local/
# cd /usr/local ; ln -sv apache-tomcat-8.0.33 tomcat ; cd ~
# wget http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.rpm #如果下载出错, 使用浏览器下载
# rpm -ivh jdk-8u77-linux-x64.rpm #安装JDK
# vim /etc/profile.d/java.sh #定义JAVA_HOME
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
# vim /etc/profile.d/tomcat.sh #配置tomcat的环境变量
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH
# source /etc/profile.d/tomcat.sh
# source /etc/profile.d/java.sh
配置虚拟主机
# vim /usr/local/tomcat/conf/server.xml
#设置默认虚拟主机为web1.anyisalin.com #node3的jvmRoute设置为TomcatB
#添加虚拟主机
# mkdir -PV /data/webapps/{WEB-INF,META-INF,classes,lib}#创建目录
node2创建网页文件
# cd /data/webapps/
# vim index.jsp#创建网页文件
TomcatA
TomcatA.magedu.com
Session ID
Created on
# catalina.sh start #启动tomcat
node3创建网页文件
# cd /data/webapps/
# vim index.jsp#创建网页文件
TomcatB
TomcatB.magedu.com
Session ID
Created on
# catalina.sh start #启动tomcat
访问测试
安装配置Apache Httpd并测试
安装httpd 在node1
# yum install httpd -y配置httpd
mod_Proxy_balancer模块文档
# cd /etc/httpd/conf.d/
# vim virt.conf
BalancerMember ajp://172.16.1.3:8009 loadfactor=1 route=TomcatA
BalancerMember ajp://172.16.1.4:8009 loadfactor=1 route=TomcatB
ServerName www.anyisalin.com
ProxyVia On
ProxyRequests Off
ProxyPa***everse / balancer://lbcluster/
ProxyPass / balancer://lbcluster/
# service httpd start#启动httpd测试负载均衡效果
实现session sticky
如果tomcat运行着一个动态站点, 那么上面这种byrequest的负载均衡调度算法就有很大问题了, 可能刚登录站点再刷新又回到没有登录的状态了, 所以我们就要实现session sticky, 其实session sticky就是我们之前lvs的sh算法, 和nginx的ip_hash实现的效果
编辑httpd配置文件
# vim /etc/httpd/conf.d/virt.conf
## 主要添加两段参数
##Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
##ProxySet stickysession=ROUTEID
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED #新添加的
BalancerMember ajp://172.16.1.3:8009 loadfactor=1 route=TomcatA
BalancerMember ajp://172.16.1.4:8009 loadfactor=1 route=TomcatB
ProxySet stickysession=ROUTEID#新添加的
ServerName www.anyisalin.com
ProxyVia On
ProxyRequests Off
ProxyPa***everse / balancer://lbcluster/
ProxyPass / balancer://lbcluster/
# service httpd restart #重启httpd
测试session sticky效果
如下图, 我们成功的将session绑定在了TomcatA(Node2)主机上
实现Session Cluster
我们使用session sticky会有很多问题, 如果某台主机宕机了, 那么用户的session就丢失了, 所以我们还可以通过session cluster保存用户会话
什么是Session Cluster
正常情况下session信息是保存在用户所访问的服务器上,服务器宕机, 用户的session就丢失了, 但是我们可以通过session cluster的方式来实现将用户的session信息保存在后端所有的服务器上, 这样来, 无论用户在访问哪一台服务器,session都不会丢失
四种常见的session manager
[*]StandardManager
[*]PersistentManager: 可以将session信息保存在持久存储中
[*]DeltaManager: 将session信息通过多播的形式共享到其他节点
[*]BackupManager: 将session信息共享到特定的一个节点上
注意: 我们要删掉刚才对session sticky的配置
编辑tomcat作配置文件
# vim server.xml
下列内容放在内
配置WEB-INF中的web.xml文件
# cd /data/webapps/
# cp /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml WEB-INF/#拷贝一份模板
# vim WEB-INF/web.xml
#添加下面这一行,在内
##注意: 这里是node3
# scp node2.anyisalin.com:/usr/local/tomcat/conf/server.xml /usr/local/tomcat/conf/server.xml#复制node2配置文件
# scp node2.anyisalin.com:/data/webapps/WEB-INF/web.xml /data/webapps/WEB-INF/
# catalina.sh stop#重启tomcat
# catalina.sh start
# catalina.sh stop#重启tomcat
# catalina.sh start
session cluster测试
如下图, 现在我们即使使用byrequests算法也不会丢失sesssion
总结
我们本文实现了tomcat的负载均衡和session保持的各种方法, 但是还是有很大问题, 我们试想在用户并发高的场景下, 多台tomcat服务器一直在多播, 很可能造成网络拥塞, 所以我们还有一种解决方案session server, 使用单台服务器保存用户的session信息, 我们会在下篇文章向大家介绍!
作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感谢: MageEdu
页:
[1]