实验环境
server1:172.25.41.1 安装tomcat和memcached,做调度器,使用nginx
server2:172.25.41.2 安装tomcat和memcached
一·搭建JDK
server1
[root@server1 ~]# ls
jdk-7u79-linux-x64.tar.gz
[root@server1 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server1 ~]# cd /usr/local/
[root@server1 local]# ln -s jdk1.7.0_79/ java ##做软链接
[root@server1 local]# ll
lrwxrwxrwx 1 root root 12 Aug 7 10:38 java -> jdk1.7.0_79/
[root@server1 local]# vim /etc/profile ##编辑全局变量
[root@server1 local]# source /etc/profile ##刷新
[root@server1 local]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin
[root@server1 local]# echo $CLASSPATH
.:/usr/local/java/lib:/usr/local/java/jre/lib
[root@server1 local]# echo $JAVA_HOME
/usr/local/java
[root@server1 local]# cd
[root@server1 ~]# which java
/usr/local/java/bin/java
[root@server1 ~]# which javac
/usr/local/java/bin/javac
检测java
[root@server1 ~]# vim test.java
[root@server1 ~]# cat test.java
public class test
{
public static void main(String[] args)
{
System.out.println("Hello World1");
}
}
[root@server1 ~]# javac test.java
[root@server1 ~]# java test
Hello World1
二·server1搭建tomcat
[root@server1 ~]# ls
apache-tomcat-7.0.37.tar.gz #安装包
[root@server1 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server1 ~]# cd /usr/local/
[root@server1 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server1 local]# ll
lrwxrwxrwx 1 root root 21 Aug 7 13:01 tomcat -> apache-tomcat-7.0.37/
[root@server1 local]# cd tomcat/
[root@server1 tomcat]# bin/startup.sh ##开启
网页访问:172.25.41.1:8080
[root@server1 nginx-1.10.1]# cd /usr/local/tomcat/webapps/ROOT/ ##tomcat默认发布目录
[root@server1 ROOT]# vim test.jsp ##编辑一个测试页面
[root@server1 ROOT]# cat test.jsp
server1-The time is: <%=new java.util.Date() %>
测试:
三·Nginx的编译
在server1中:
[root@server1 ~]# ls
nginx-1.10.1.tar.gz
nginx-sticky-module-ng.tar.gz
[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz
[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim src/core/nginx.h
[root@server1 nginx-1.10.1]# vim auto/cc/gcc
在 src/core/nginx.h 文件中
在 auto/cc/gcc 文件中
1·nginx编译
[root@server1 ~]# yum install gcc gcc-c++ openssl-devel pcre-devel -y
[root@server1 ~]# ls
nginx-sticky-module-ng.tar.gz
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz -C /usr/local/
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/usr/local/nginx-sticky-module-ng
[root@server1 nginx-1.10.1]# make && make install
[root@server1 nginx-1.10.1]# cd /usr/local/lnmp/nginx/sbin/ ##编译nginx
[root@server1 sbin]# ./nginx
[root@server1 sbin]# ./nginx -t ##检测
[root@server1 sbin]# ./nginx -s reload ##刷新
2·做软链接
[root@server1 nginx-1.10.1]# cd /usr/local/lnmp/nginx/sbin
[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /sbin/ ##做软链接
[root@server1 sbin]# vim /usr/local/lnmp/nginx/conf/nginx.con
[root@server1 sbin]# nginx -t ##检测
[root@server1 sbin]# nginx ##打开
配置文件:
页面访问:172.25.41.1
四·server2搭建tomcat
[root@server2 ~]# ls
install.log.syslog jdk-7u79-linux-x64.tar.gz
[root@server2 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
[root@server2 ~]#
[root@server2 ~]# cd /usr/local/
[root@server2 local]# ln -s jdk1.7.0_79/ java
[root@server2 local]# vim /etc/profile ##修改全局变量
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
[root@server2 local]# source /etc/profile ##刷新
[root@server2 ~]# ls
apache-tomcat-7.0.37.tar.gz install.log.syslog
[root@server2 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server2 ~]# cd /usr/local/
[root@server2 local]# ln -s apache-tomcat-7.0.37/ tomcat ##做软链接
[root@server2 local]# cd tomcat/
[root@server2 tomcat]# bin/startup.sh ##开启
网页访问:172.25.41.2:8080
[root@server2 tomcat]# cd webapps/ROOT/
[root@server2 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT ##tomcat默认发布目录
[root@server2 ROOT]# vim test.jsp ##编辑一个测试
[root@server2 ROOT]# cat test.jsp
server2 - The time is: <%=new java.util.Date()%>
网页访问:172.25.41.2:8080/test.jsp
五·nginx负载均衡
六·构建nginx+tomcat负载均衡
网页访问172.25.41.1/index.jsp时访问不到
解决办法
[root@server1 ~]# vim /usr/local/lnmp/nginx/conf/nginx.conf
[root@server1 ~]# cd /usr/local/lnmp/nginx/sbin/
[root@server1 sbin]# ./nginx -s reload
[root@server1 sbin]# cd /usr/local/tomcat/webapps/ROOT/
[root@server1 ROOT]# vim test.jsp ##编辑一个网页
[root@server1 ROOT]# cat test.jsp
<%@ 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>
</html>
[root@server1 ROOT]# scp test.jsp root@172.25.41.2:/usr/local/tomcat/webapps/ROOT/ ##同样文件传给server2
每刷新一次,网页存储位置IP会跳变,这样不利于数据存储,容易丢失。所以要在nginx里加入算法。
[root@server1 ROOT]# cd /usr/local/lnmp/nginx/sbin/
[root@server1 sbin]# vim /usr/local/lnmp/nginx/conf/nginx.conf
[root@server1 sbin]# ./nginx -s reload
关闭server1的tomcat测试:
[root@server1 sbin]# cd /usr/local/tomcat/ 将server1的tomcat关闭,网页访问自动转接server2主机
[root@server1 tomcat]# bin/shutdown.sh
七·session共享
在server1和server2中同时做实验
[root@server1 ~]# yum install -y memcached
[root@server1 ~]# /etc/init.d/memcached start
将以下安装包放置在/usr/local/tomcat/lib目录下:
1.asm-3.2.jar
2.kryo-1.04.jar
3.kryo-serializers-0.10.jar
4.memcached-session-manager-1.6.3.jar
5.memcached-session-manager-tc7-1.6.3.jar
6.minlog-1.2.jar
7.msm-kryo-serializer-1.6.3.jar
8.reflectasm-1.01.jar
9. spymemcached-2.7.3.jar
server1 和server2修改配置文件
[root@server1 ~]# vim /usr/local/tomcat/conf/context.xml
[root@server1 ~]# cd /usr/local/tomcat/
server1:
server2:
将关闭server1中的tomcat,打开server2中的tomcat
[root@server1 ~]# cd /usr/local/tomcat/
[root@server1 tomcat]# bin/shutdown.sh
[root@server2 ~]# cd /usr/local/tomcat/
[root@server2 tomcat]# bin/startup.sh
添加用户信息
在server1查看信息存储
[root@server1 ~]# yum install -y telnet
[root@server1 ~]# telnet localhost 11211
注意: tomcat不能反复开启,需要关闭后再开启。否则会增加很多进程,占用端口。如果开启不了tomcat,先查看文件是否由错误,再查看端口是否被占用,或结束进程。
nginx-sticky-module 为 nginx 的第三方模块,使 nginx 支持 sticky 模式,所谓 sticky 模式,就是指同一个用户的访问请求都被发送到同一个 tomcat 实例上处理。
访问 http://172.25.41.1/test.jsp,不同的主机访问时会调度到不同的 tomcat 实例上处理来自同一主机的请求会交给同一个 tomcat 实例处理,此时你 down 掉当前正在响应的 tomcat 实例,nginx会自动把用户的请求调度到另一个 tomcat 实例上,同时 session 也没有丢掉。