Linux:nginx+tomcat+memcache实现负载均衡和session共享

实验环境

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.18080

这里写图片描述

[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.28080

这里写图片描述

[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.28080/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 [email protected]:/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 也没有丢掉。

猜你喜欢

转载自blog.csdn.net/Le_Anny/article/details/81477023