一、Tomcat简介
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
二、JDK简介
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
三、安装
注意当前使用的 【apache-tomcat-7.0.99.tar.gz】版本过高在测试共享数据时会失败
更换为低版本apache-tomcat-7.0.37.tar.gz jar
四、配置Tomcat
用户是直接去访问nginx,接下来配置一下nginx
五、访问动态页面需要配置一下Tomcat的默认发布页面
在重写写一个Java文件测试一下(注册用户的动态页面)
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
当前已经实现了客户端访问nginx服务器的时候,通过jsp动态获取tomcat服务器上面的资源(动态请求)
六、nginx+tomcat动态实现的tomcat服务器之间负载均衡
实验环境
主机信息 主机功能
虚拟机server1(172.25.254.1) nginx反向代理+tomcat1服务器
虚拟机server2(172.25.254.2) tomcat2服务器
首先从server1给server2上传tomcat和jdk目录
[root@server2 local]# ln -s apache-tomcat-7.0.99 tomcat做软连接
[root@server2 local]# ln -s jdk1.7.0_79 java
[root@server2 ~]# vim /etc/profile 设定全局边框
[root@server2 local]# source /etc/profile 立即生效
[root@server2 local]# ll
total 0
drwxr-xr-x 9 root root 220 May 16 13:18 apache-tomcat-7.0.99
drwxr-xr-x. 2 root root 6 Dec 15 2017 bin
drwxr-xr-x. 2 root root 6 Dec 15 2017 etc
drwxr-xr-x. 2 root root 6 Dec 15 2017 games
drwxr-xr-x. 2 root root 6 Dec 15 2017 include
lrwxrwxrwx 1 root root 11 May 16 13:23 java -> jdk1.7.0_79
drwxr-xr-x 8 root root 233 May 16 13:21 jdk1.7.0_79
drwxr-xr-x. 2 root root 6 Dec 15 2017 lib
drwxr-xr-x. 2 root root 6 Dec 15 2017 lib64
drwxr-xr-x. 2 root root 6 Dec 15 2017 libexec
drwxr-xr-x. 2 root root 6 Dec 15 2017 sbin
drwxr-xr-x. 5 root root 49 May 8 09:01 share
drwxr-xr-x. 2 root root 6 Dec 15 2017 src
lrwxrwxrwx 1 root root 20 May 16 13:22 tomcat -> apache-tomcat-7.0.99
[root@server2 local]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
在server1上配置nginx
在server2上开启tomcat
[root@server2 bin]# ./startup.sh 开启
Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.99
Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.99
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.99/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/apache-tomcat-7.0.99/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.99/bin/tomcat-juli.jar
Tomcat started.
[root@server2 bin]# netstat -tnpl 查看端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7504/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 7689/master
tcp6 0 0 :::8009 :::* LISTEN 8563/java
tcp6 0 0 :::3306 :::* LISTEN 7556/mysqld
tcp6 0 0 :::8080 :::* LISTEN 8563/java
tcp6 0 0 :::22 :::* LISTEN 7504/sshd
tcp6 0 0 ::1:25 :::* LISTEN 7689/master
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8563/java
客户端测试访问并建立用户
三次实验结果表明已经实现tomcat服务之间的负载均衡,但是建立的用户并没有保存
sticky粘滞
编译sticky模块
访问结果来看:在建立用户是不会出现轮询跳动,稳定保持在同一个主机上(172.25.254.1)但当后台服务器要是宕机一台,那么会出现用户建立的信息清空,为了防止这种事情发生,需要去设置session共享,不管那一台服务器挂掉,数据都会自动传输到另外一台正常的服务器上。
什么是session?
Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session
客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了
session共享原理及实现共享
http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你
接下来首先session共享
server1、server2相同操作
在server1上配置
[root@server1 tomcat]# cd conf/
[root@server1 conf]# ls
Catalina catalina.policy catalina.properties context.xml logging.properties server.xml tomcat-users.xml tomcat-users.xsd web.xml
[root@server1 conf]# vim context.xml
在server2上配置
[root@server2 tomcat]# ls
bin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp webapps work
[root@server2 tomcat]# cd conf/
[root@server2 conf]# ls
Catalina catalina.policy catalina.properties context.xml logging.properties server.xml tomcat-users.xml tomcat-users.xsd web.xml
[root@server2 conf]# vim context.xml
上面的配置中需要打开11211端口即安装memcached服务
[root@server2 conf]# yum install -y memcached 安装
[root@server2 ~]# systemctl start memcached.service 启动服务
[root@server2 ~]# netstat -tnpl | grep memcached 查看端口
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 8824/memcached
tcp6 0 0 :::11211 :::* LISTEN 8824/memcached
在server1上
在server2上
注意当前使用的 【apache-tomcat-7.0.99.tar.gz】版本过高在测试共享数据时会失败
更换为低版本apache-tomcat-7.0.37.tar.gz jar
测试
建立用户当前是在server2上
[root@server2 bin]# ./shutdown.sh 挂掉server2再创建用户
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar