Linux Tomcat Cluster
当一台Tomcat服务器无法承载现有的访问量时,我们可以使用集群来提升其承载量;
Tomcat Cluster的架构一般为:前端使用负载均衡(nginx、haproxy),将请求调度到后端的多个Tomcat服务器上,但是一般Tomcat不会直接面对前端,而是在二者之间再放置一个httpd服务,使用apache接收调度到本身的请求,然后再将请求发送至Tomcat上进行处理;因为使用了负载均衡,所以我们必然需要进行会话保持,让来自同一客户端的请求始终发至同一个Tomcat服务器;
会话保持:
session sticky:会话绑定,如果服务器宕机,数据会丢失;
source ip:源地址绑定
cookie
session cluster:会话集群,当一台服务器宕机以后还可以使用其他服务器中的session继续提供服务,只要有服务器在线session数据就不会丢失;但是不适合大规模使用,因为session cluster比较耗费资源;
session server:session服务器
memcached:key-value存储形式,会将缓存数据存储在内存中,所以速度会非常快,但是数据宕机即没;
Tomcat负载均衡方式:
nginx+tomcat
apache+tomcat
Tomcat Cluster负载均衡方式:
session server+tomcat
拓扑结构:
一台Centos7作为负载均衡器,两台Centos6作为Tomcat服务器
配置过程:
1.安装JDK以及Tomcat在上一篇博客中已经演示过了,在此不再赘述;
https://blog.csdn.net/qq_32501535/article/details/88947938
2.添加一个实验用的页面;
cd /usr/local/tomcat
vim conf/server.xml
Centos6_1:
<Engine name="Catalina" defaultHost="www.guowei.com">
<Host name="www.guowei.com" appBase="/data/webapps/" autoDeploy="true">
<Context path="" docBase="ROOT">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="guowei_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Context>
</Host>
Centos6_2:
<Engine name="Catalina" defaultHost="mail.guowei.com">
<Host name="mail.guowei.com" appBase="/data/webapps/" autoDeploy="true">
<Context path="" docBase="ROOT">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="guowei_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Context>
</Host>
3.检测配置文件是否有语法错误
catalina.sh configtest
4.启动tomcat
catalina.sh start
5.制作一个测试页;
vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title> JSP Test Page</title>
</head>
<body>
<% out.println("Hello World! on www/mail"); %>
</body>
</html>
6.访问http://www.guowei.com或http://mail.guowei.com(前提:在hosts中已添加对应解析条目)
Note:两台Centos6作相同配置;
7.在Centos7中安装Nginx;
yum install nginx -y
8.使用nginx实现负载均衡功能
vim /etc/nginx/nginx.conf
upstream tomservers {
server www.guowei.com:8080;
server mail.guowei.com:8080;
}
location ~* \.(jsp|do) {
proxy_pass http://tomservers;
}
9.测试:
访问http://192.168.80.139/index.jsp即可查看负载均衡效果;
10.源地址绑定:(功能展示,可以不配置)
vim /etc/nginx/nginx.conf
upstream tomservers {
ip_hash;
server www.guowei.com:8080;
server mail.guowei.com:8080;
}
11.使用apache实现负载均衡
使用apache实现负载均衡需要加载特定balance模块,才可以实现负载均衡;
httpd -M ==> proxy_balancer_module (shared)
指令介绍:
ProxyPass [path] !|url [key=value key=value]:将后端服务器某URL与当前服务器的某虚拟主机路径关联起来作为提供服务的路径;path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径;使用此指令时必须将ProxyRequests的值设置为Off;需要注意的是如果path以”/”结尾,则对应的url也必须以”/”结尾,反之亦然;
ProxyRequests {On|Off}:是否开启apache的正向代理功能;启用此项时为了代理http协议必须启用mod_proxy_http模块;
ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via;主要用于在多级代理中代理请求的流向,默认为Off,及即不启用此功能,On表示每个请求和响应报文均添加Via,Full表示每个Via行都会添加当前apache服务的版本信息;Block表示每个代理请求报文中的Via都会被移除;
ProxyPreserveHost {On|Off}:如果启用此功能,代表会将用户请求报文中的Host行发送给后端的服务器,而不再使用ProxyPass指定的服务地址;如果想在反向代理中支持虚拟主机,则需要开启此项,否则无需开启此功能;
Centos6_1|2:
vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
<html>
<head><title>mail</title></head>
<body>
<h1><font color="red|blue">www|mail.guowei.com</font></h1>
<table align="centre" corder="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("guowei.com","guowei.com"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
vim /etc/tomcat/server.xml
<Engine name="Catalina" defaultHost="www|mail.guowei.com" jvmRoute="www|mail">
Note:因为两台Centos6的配置大致相同,所以只列出一方的配置,其中不同的内容我使用”|”分开了,配置时留意一下!
Centos7:(基于http|ajp方式)
vim /etc/httpd/conf.d/vhosts.conf
<proxy balancer://lbcluster1>
BalancerMember ajp|http://192.168.80.131:8009|8080 loadfactor=10 route=www
BalancerMember ajp|http://192.168.80.134:8009|8080 loadfactor=10 route=mail
</proxy>
<VirtualHost *:80>
serverName web.guowei.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
<Location />
Require all granted
</Location>
</VirtualHost>
访问http://192.168.80.139/index.jsp
12.设置apache的stickysession功能:
Centos7:
vim /etc/httpd/conf.d/vhosts.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://lbcluster1>
BalancerMember http://192.168.80.131:8080 loadfactor=10 route=www
BalancerMember http://192.168.80.134:8080 loadfactor=10 route=mail
ProxySet stickysession=ROUTEID
</proxy>
<VirtualHost *:80>
serverName web.guowei.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://lbcluster1/
ProxyPassReverse / balancer://lbcluster1/
<Location />
Require all granted
</Location>
<Location /balancer> 设置查看balancer状态列表
SetHandler balancer-manager
ProxyPass !
Require all granted
</Location>
</VirtualHost>
访问http://192.168.80.139/index.jsp进行测试,连续刷新会发现session id不会发生改变了,说明成功了;
13.实现Tomcat的Session Cluster
会话管理器:可以定义在Host中或者Context中;
标准会话管理器(StandardManager):
<Manager className=”org.apacha.catalina.session.StandardManager” maxInactiveInterval=”7200” />
会话信息默认保存在$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/中的SESSION.ser文件中;周期性保存;
指令:
maxActiveSession:最多允许的活动会话数量,默认为-1,表示不限制;
maxInactiveInterva:非活动的会话超时时长,默认为60s;
pathname:会话文件的保存目录;
持久会话管理器(PersistenManager):
将会话数据保存至持久存储(比如单独的mysql服务器)中,并且能在服务器以外终止后重新启动时重新加载这些会话信息;持久会话管理器支持将会话保存至文件存储(FileStore)或JDBC存储(JDBCStore)中;但是这种会话管理器不是共享的,也就是可以将自己的会话信息保存至指定存储中,但是也只能从存储中加载自己之前导入的,无法加载别人的session信息;
例子:
<Manager className=”org.apache.catalina.session.PersistenManager” saveOnRestart=”true”>
<Store classesName=”org.apache.catalina.session.FileStoore” directory=”/data/tomcat-sessions”/>
</Manager>
Note:每个用户的会话会被保存至directory指定的目录中的文件中,文件名为<session id>.session;并通过后台线程每隔一段时间(checkInterval参数定义,默认为60秒)检查一次超时会话;
<Manager className=”org.apache.catalina.session.PersistenManager” saveOnRestart=”true”>
<Store classesName=”org.apache.catalina.session.JDBCStore” directory=”com.mysql.jdbc.Driver” connectionURL=”jdbc:mysql://localhost:3306/mydb?user=USER_NAME;password=PASSWORD”/>
</Manager>
DeltaManager:将多个Tomcat节点构建成一个通过组播信道进行通信的集群,从而实现session共享;每个节点都会监听在某一端口,用来接收其他节点发来的session信息;可以配置在Engine、Host、或Context中;
<Cluster>:定义Cluster;
<Manager>:定义Cluster使用的会话管理器;
<Channel>:定义节点间通信所使用的信道;
<Menbership>:定义Cluster中的集群成员;
<Receiver>:定义成员节点接收其他节点信息的方式;
<Sender>:定义成员节点传递给其他节点信息的方式;
详细信息请阅读官方资料:https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html
Note:如果某个webapp要支持会话管理器,至进行上面的配置还不够,还要在其对应的web.xml中添加<distribitable/>这一指令才可以;
注:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删;
转载于:https://www.cnblogs.com/guowei-Linux/p/11072858.html
Linux Tomcat Cluster相关推荐
- Linux Tomcat JSP 布署详细教程
Linux Tomcat JSP动态网页解析 v7.0 ★★★ 1 Tomcat 概述 Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Micr ...
- Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口
Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口 >>>>>>>>>& ...
- Linux Enterprise Cluster选译
Linux Enterprise Cluster选译 [url]http://www.mikrotikrouter.cn/show/663[/url] 高有效性系统没有单故障点.所谓的单故障点是指某个 ...
- linux之CLUSTER(集群)一
linux之CLUSTER(集群) 01: 集群及LVS简介 . LVS-NAT集群 . LVS-DR集群 02: Keepalived热备 . Keepalived+LVS . HAProxy服务器 ...
- linux+tomcat无法显示图片验证码
由于实际所需,在原先系统基础上需要再配置一台服务器作为业务系统,系统环境是linux+tomcat,根据原先的配置情况,将linux系统.tomcat.JDK等环境都安装配置完成,然后把应用程序部署到 ...
- Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包
Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>& ...
- Linux Tomcat下载
参考视频教程: https://www.bilibili.com/video/BV13a411q753?p=134 1.Tomcat下载安装 操作步骤: 这里提供3种下载方法 1.1 tomcat下载 ...
- Linux HA Cluster高可用集群之HeartBeat2
一.阐述Linux HA Cluster的使用背景: 1.1 高可用集群定义: 高可用集群全称:High Availability Cluster,简单的说,集群就是一组高可扩展.高可用性.高性价比的 ...
- linux tomcat集群配置笔记
趁最后一天假期,配置linux环境下的apache集群,巩固下,免的以后用到又忘记,网上东拼息凑,环境弄好后,整到blog,以便以后用到. 参考来源:http://www.linuxidc.com/L ...
- httpd反代 + tomcat cluster + redis会话保持
版本说明: httpd版本:2.4.6 tomcat版本:7.0.69 dedis版本:3.2.3 操作系统版本:CentOS Linux release 7.3.1611 拓扑结构: tomcat- ...
最新文章
- SQL优化|Java面试题
- 双向口和准双向口操作的不同!
- php java memcached_php和java的memcached使用的兼容性问题解决过程
- [Embeding-1]Efficient Estimation of Word Representations in Vector Space 译文
- python restful服务部署_用python为mysql实现restful接口
- 面试总结之html+css
- JSON和JavaScript对象互转
- Python 将json字符串 进行列表化可循环
- Ableton Live 11 Suite for Mac(数字音乐音频制作软件)
- 小程序毕设日志.2021.3.13
- 联想电脑BIOS失败教程
- 期权、期货及其他衍生产品 第二章读书笔记 期货市场的运行机制
- php聊天室发送表情,聊天室之表情发送
- 一年前,月薪两万被人叫老总,如今35岁在美团送外卖
- 2022年上半年计算机技术与软件专业技术资格(水平)考试陕西考区报名须知
- 基于Spring boot的图书馆图书借阅管理系统的设计与实现
- java防止电脑锁屏的网页_关于windows防止锁屏小程序
- VMware Workstation Player 找不到共享文件夹的解决方法
- iPhone 游戏 Dungeon Hunter2 地牢猎手 今日通关
- 【高等数学】加减关系下可以用等价无穷小替换的情况
热门文章
- Leetcode 208:实现Trie(前缀树)
- 【备忘】加入L2范数正则化后的正规方程求解参数推导过程
- python爬虫正则表达式爬取网页标签_Python爬虫实例(4)-用urllib、re和正则表达式爬取网页图片...
- 嵌入式系统——软件开发模型
- java io 字节流_Java之IO-字节流
- mysql系统变量_MySQL系统变量
- kafka消息堆积原因解析
- 开源字符处理类库:CharString类 拆分自自己研发的web服务器中的类库
- Linux内核开发_内核模块
- Weex中页面导航的实现