运维实训项目—Nginx+Tomcat+Memcached集群

第一部分 环境介绍

1.Tomcat集群session同步方案的以下方式:
方式一:使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在高并发下表现并不好。
方式二:利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,实现session同步。但如果应用是某一个局域网大量用户同时登录,这样负载均衡无效。
方式三:利用nginx插件实现tomcat集群和session同步,nginx-upstream-jvm-route-0.1.tar.gz,是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。
方式四:利用memcached把多个tomcat的session集中管理,前端在利用nginx负载均衡和动静态资源分离,在兼顾系统水平扩展的同时又能保证较高的性能。

2.环境介绍
Linux系统:Redhat 6.5版本
server3:172.25.51.3,Nginx、Memcached、Tomcat1
server4:172.25.51.4,Tomcat2

第二部分 Nginx+Tomcat实现负载均衡


server3上执行如下操作:

一、配置nginx

1.下载并解压nginx安装包nginx-1.14.0.tar.gz

[root@server3 ~]# tar zxf nginx-1.14.0.tar.gz 

2.修改配置文件,并编译安装

[root@server3 ~]# cd nginx-1.14.0
[root@server3 nginx-1.14.0]# vim auto/cc/gcc
171 # debug
172 #CFLAGS="$CFLAGS -g"
[root@server3 nginx-1.14.0]# vim src/core/nginx.h
14 #define NGINX_VER          "nginx/"

示图1:注释debug
这里写图片描述
示图2:删除版本信息
这里写图片描述
3.安装nginx插件

[root@server3 nginx-1.14.0]# yum install -y gcc
[root@server3 nginx-1.14.0]# yum install -y pcre-devel
[root@server3 nginx-1.14.0]# yum install -y openssl-devel

4.编译安装

[root@server3 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
[root@server3 nginx-1.14.0]# make && make install
[root@server3 nginx-1.14.0]# ln -s /usr/local/nginx/sbin/nginx /sbin/

5.修改配置文件


注意:nginx默认端口为80端口,避免与httpd服务冲突,关闭httpd服务!!!


[root@server3 ~]# useradd nginx  ##创建nginx用户
[root@server3 ~]# vim /usr/local/nginx/conf/nginx.conf

 2 user  nginx  nginx;    ##指定用户、组
 17 http {
 18     upstream tomcat {
 19     server 172.25.51.3:8080;
 20     server 172.25.51.4:8080;
 21     }
 63         location ~ \.jsp$ {
 64             proxy_pass   http://tomcat;       
 65         }

这里写图片描述
这里写图片描述
这里写图片描述
6.开启nginx服务

[root@server3 ~]# nginx -t         ##检测语法错误
[root@server3 ~]# nginx            ##开启nginx服务
[root@server3 ~]# nginx -s reload  ##重新加载配置文件信息

二、配置java环境

1.下载jdk压缩包jdk-7u79-linux-x64.tar.gz 并解压到/usr/local/

[root@server3 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ln -s jdk1.7.0_79/ java  ##创建链接,方便后期版本更新

示图1:jdk1.7.0_79为解压生成文件
这里写图片描述
示图2:链接文件
这里写图片描述
2.加载环境变量

[root@server3 local]# vim /etc/profile
 80 export JAVA_HOME=/usr/local/java
 81 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 82 export PATH=$PATH:$JAVA_HOME/bin
[root@server3 local]# source /etc/profile ##加载环境变量

注意:以下两种加载环境变量方式相同

[root@server3 local]# source /etc/profile
[root@server3 local]# ./etc/profile

这里写图片描述
这里写图片描述
3.编写java脚本

[root@server3 ~]# vim test.java
public class test {
        public static void main(String[] args) {
                System.out.println("Hello World!");
        }
}

这里写图片描述
4.编译并运行java脚本

[root@server3 ~]# javac test.java     ##编译
[root@server3 ~]# java test           ##运行

这里写图片描述

三、配置tomcat

1.下载tomcat软件包apache-tomcat-7.0.37.tar.gz并解压到/usr/local/

[root@server3 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ln -s apache-tomcat-7.0.37/ tomcat

这里写图片描述
2.加载环境变量

[root@server3 local]# cd tomcat/bin/
[root@server3 bin]# ./startup.sh 

这里写图片描述
3.编写tomcat默认发布页面

[root@server3 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server3 ROOT]# vim test.jsp
Server3 time is: <%=new java.util.Date() %>

这里写图片描述


注意:
tomcat7的默认发布路径:

/usr/local/tomcat/webapps/ROOT

server4上执行如下操作:

一、配置jdk环境
二、配置tomcat
编写tomcat默认发布页面

[root@server4 ~]# vim /usr/local/tomcat/webapps/ROOT/test.jsp
Server4 time is: <%=new java.util.Date() %>

这里写图片描述
其它实验步骤同server3.

测试:

访问172.25.51.3/test.jsp,实现负载均衡
这里写图片描述
这里写图片描述
这里写图片描述

第三部分 基于访问ip的hash路由策略实现tomcat

一、配置nginx

1.下载并解压nginx安装包nginx-1.14.0.tar.gz

[root@server3 ~]# tar zxf nginx-1.14.0.tar.gz 

2.修改配置文件,并编译安装

[root@server3 ~]# cd nginx-1.14.0
[root@server3 nginx-1.14.0]# vim auto/cc/gcc
171 # debug
172 #CFLAGS="$CFLAGS -g"
[root@server3 nginx-1.14.0]# vim src/core/nginx.h
14 #define NGINX_VER          "nginx/"

示图1:注释debug
这里写图片描述
示图2:删除版本信息
这里写图片描述
3.安装nginx插件

[root@server3 nginx-1.14.0]# yum install -y gcc
[root@server3 nginx-1.14.0]# yum install -y pcre-devel
[root@server3 nginx-1.14.0]# yum install -y openssl-devel

4.编译安装

[root@server3 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
[root@server3 nginx-1.14.0]# make && make install
[root@server3 nginx-1.14.0]# ln -s /usr/local/nginx/sbin/nginx /sbin/

5.修改配置文件,采用 ip_hash 算法


注意:nginx默认端口为80端口,避免与httpd服务冲突,关闭httpd服务!!!


[root@server3 ~]# useradd nginx  ##创建nginx用户
[root@server3 ~]# vim /usr/local/nginx/conf/nginx.conf

 2 user  nginx  nginx;    ##指定用户、组
 17 http {
 18     upstream tomcat {
 19     ip_hash;
 20     server 172.25.51.3:8080;
 21     server 172.25.51.4:8080;
 22     }
 63         location ~ \.jsp$ {
 64             proxy_pass   http://tomcat;       
 65         }

这里写图片描述
这里写图片描述
这里写图片描述
6.开启nginx服务

[root@server3 ~]# nginx -t         ##检测语法错误
[root@server3 ~]# nginx            ##开启nginx服务
[root@server3 ~]# nginx -s reload  ##重新加载配置文件信息

二、配置java环境

1.下载jdk压缩包jdk-7u79-linux-x64.tar.gz 并解压到/usr/local/

[root@server3 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ln -s jdk1.7.0_79/ java  ##创建链接,方便后期版本更新

示图1:jdk1.7.0_79为解压生成文件
这里写图片描述
示图2:链接文件
这里写图片描述
2.加载环境变量

[root@server3 local]# vim /etc/profile
 80 export JAVA_HOME=/usr/local/java
 81 export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
 82 export PATH=$PATH:$JAVA_HOME/bin
[root@server3 local]# source /etc/profile ##加载环境变量

注意:以下两种加载环境变量方式相同

[root@server3 local]# source /etc/profile
[root@server3 local]# ./etc/profile

这里写图片描述
这里写图片描述
3.编写java脚本

[root@server3 ~]# vim test.java
public class test {
        public static void main(String[] args) {
                System.out.println("Hello World!");
        }
}

这里写图片描述
4.编译并运行java脚本

[root@server3 ~]# javac test.java     ##编译
[root@server3 ~]# java test           ##运行

这里写图片描述

三、配置tomcat

1.下载tomcat软件包apache-tomcat-7.0.37.tar.gz并解压到/usr/local/

[root@server3 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ln -s apache-tomcat-7.0.37/ tomcat

这里写图片描述
2.加载环境变量

[root@server3 local]# cd tomcat/bin/
[root@server3 bin]# ./startup.sh 

这里写图片描述
3.编写tomcat默认发布页面

[root@server3 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server3 ROOT]# vim test.jsp
<%@ 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>
</html>

这里写图片描述


注意:
tomcat7的默认发布路径:

/usr/local/tomcat/webapps/ROOT

server4上执行如下操作:

一、配置jdk环境
二、配置tomcat
实验步骤同server3.

测试:

访问172.25.51.3/test.jsp,并提交用户名、密码
<1>由该访问页面可看出,在提交页面用户信息过程中,始终访问的server3的后端主机
这里写图片描述
<2>当server3主机down后

[root@server4 tomcat]# pwd
/usr/local/tomcat
[root@server4 tomcat]# bin/startup.sh       ##开启
[root@server4 tomcat]# bin/shutdown.sh      ##关闭

这里写图片描述
<3>此时,访问的server4的后端主机,由于不同步,信息存储丢失
这里写图片描述

第四部分 利用nginx实现tomcat集群和session同步

server3:

1.确认server3是否安装sticky模块,若没有,则编译安装

[root@server3 ~]# nginx -V  ##查看nginx安装信息

示图:未安装sticky模块
这里写图片描述


特别说明:添加sticky模块步骤:
<1>下载安装包nginx-sticky-module-ng.tar.gz并解压

[root@server3 ~]# tar zxf nginx-sticky-module-ng.tar.gz

<2>编译并安装

[root@server3 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-sticky-module-ng
[root@server3 nginx-1.14.0]# make && make install

<3>查看nginx模块
这里写图片描述


2.修改配置文件,实现基于 Cookie 的 Session Sticky 的功能

[root@server3 ~]# vim /usr/local/nginx/conf/nginx.conf
 17 http {
 18     upstream tomcat {
 19     sticky;
 20     server 172.25.51.3:8080;
 21     server 172.25.51.4:8080;
 22     }
[root@server3 ~]# nginx -s reload

这里写图片描述
3.安装memcached并开启服务

[root@server3 ~]# yum install -y memcached
[root@server3 ~]# /etc/init.d/memcached start

4.下载memcached与tomcat插件

[root@server3 ~]# cd /usr/local/tomcat/lib/
lftp 172.25.51.250:/pub/mem> mget *
[root@server3 lib]# rm -fr memcached-session-manager-tc6-1.6.3.jar ##mamcat版本1.7,删除不匹配的1.6版本

这里写图片描述
5.修改配置文件

[root@server3 lib]# vim /usr/local/tomcat/conf/context.xml
 34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 35 memcachedNodes="n1:172.25.51.3:11211,n2:172.25.51.4:11211"
 36 failoverNodes="n1"    ##默认n2,故障n1           
 37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
 39 />

这里写图片描述
6.关闭并再次开启tomcat服务

[root@server3 lib]# cd /usr/local/tomcat/
[root@server3 tomcat]# bin/shutdown.sh 
[root@server3 tomcat]# bin/startup.sh

server4:

1.安装并开启memcached服务

[root@server4 ~]# yum install -y memcached
[root@server4 ~]# /etc/init.d/memcached start

2.下载memcached与tomcat插件

[root@server4 ~]# cd /usr/local/tomcat/lib/
lftp 172.25.51.250:/pub/mem> mget *
[root@server4 lib]# rm -fr memcached-session-manager-tc6-1.6.3.jar ##mamcat版本1.7,删除不匹配的1.6版本

3.修改配置文件

[root@server4 lib]# vim /usr/local/tomcat/conf/context.xml
 34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
 35 memcachedNodes="n1:172.25.51.3:11211,n2:172.25.51.4:11211"
 36 failoverNodes="n2"               
 37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
 38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
 39 />

这里写图片描述
4.关闭并再次开启tomcat

[root@server4 lib]# cd /usr/local/tomcat/
[root@server4 tomcat]# bin/shutdown.sh 
[root@server4 tomcat]# bin/startup.sh

测试:

访问http://172.25.51.3/test.jsp
<1>在提交页面用户信息过程中,交替访问server3、server4的后端主机,且信息同步,不丢失
这里写图片描述
这里写图片描述
<2>当server3的后端主机down后,始终访问server4的后端主机,且信息不丢失
这里写图片描述

猜你喜欢

转载自blog.csdn.net/hannah_zh/article/details/80925387