nginx+tomcat+memcache 负载均衡动静分离技术

概述

Nginx 作负载均衡器的优点许多,简单概括为:
①实现了可弹性化的架构,在压力增大的时候可以临时添加Tomcat服务器添加到这个架构里面去;
②upstream具有负载均衡能力,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器;
Keepalived 可实现 Nginx负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟IP接管过去。
这里写图片描述
tomcat分离目录

目录     作用
bin     主要存放脚本文件,例如比较常用的windows和linux系统中启动和关闭脚本
conf    主要存放配置文件,其中最重要的两个配置文件是server.xml和web.xml
lib     主要存放tomcat运行所依赖的包
logs    主要存放运行时产生的日志文件,例如catalina.{date}.log等
temp    存放tomcat运行时产生的临时文件,例如开启了hibernate缓存的应用程序,会在该目录下生成一些文件
webapps 部署web应用程序的默认目录
work    主要存放由JSP文件生成的servlet(java文件以及最终编译生成的class文件)

再介绍两个tomcat中比较重要的概念(通常也是两个系统变量)——CATALINA_HOME和CATALINA_BASE:

CATALINA_HOME:即指向Tomcat安装路径的系统变量
CATALINA_BASE:即指向活跃配置路径的系统变量通过设置这两个变量,就可以将tomcat的安装目录和工作目录分离,从而实现tomcat多实例的部署。
Tomcat官方文档指出,CATALINA_HOME路径的路径下只需要包含bin和lib目录,这也就是支持tomcat软件运行的目录,而CATALINA_BASE设置的路径可以包括上述所有目录,不过其中bin和lib目录并不是必需的,缺省时会使用CATALINA_HOME中的bin和conf。如此,我们就可以使用一个tomcat安装目录部署多个tomcat实例,这样的好处在于方便升级,就可以在不影响tomcat实例的前提下,替换掉CATALINA_HOME指定的tomcat安装目录。

这里写图片描述

首先需要安装nginx
https://blog.csdn.net/wwy0324/article/details/81417352

Memcache可以实现Tomcat服务器的Sission共享整个拓补如下:

一、下载安装 JDK

1、下载解压源码,设定链接(当jdk更新时,更新链接即可)

[root@server3 ~]# ls
apache-tomcat-7.0.37.tar.gz
jdk-7u79-linux-x64.tar.gz
[root@server3 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ls
bin  games    jdk1.7.0_79  lib64    lnmp  share
etc  include  lib          libexec  sbin  src
[root@server3 local]# ln -s jdk1.7.0_79/ java

这里写图片描述

2.添加环境变量

[root@server3 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@server3 local]# source /etc/profile

. /etc/profile   #在当前shell更新环境变量
sh /etc/profile  #在新的shell中更新环境变量

这里写图片描述
加载后查看是否成功

[root@server3 local]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin:/usr/local/java/bin
[root@server3 local]# echo $CLASSPATH
.:/usr/local/java/lib:/usr/local/java/jre/lib
[root@server3 local]# echo $JAVA_HOME
/usr/local/java

3.java测试

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

这里写图片描述

[root@server3 local]# javac test.java    # 编译
[root@server3 local]# java test          # 运行脚本
Hello World! 

这里写图片描述

二、安装 tomcat

1、解压源码,设定链接(当tomcat更新时,更新链接即可)

[root@server3 ~]# tar zxf apache-tomcat-7.0.37.tar.gz  -C /usr/local/
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ls
apache-tomcat-7.0.37  games    jdk1.7.0_79  libexec  share       test.java
bin                   include  lib          lnmp     src         tomcat
etc                   java     lib64        sbin     test.class
[root@server3 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server3 local]# ll
total 60
drwxr-xr-x  9 root root 4096 Aug  7 10:03 apache-tomcat-7.0.90
drwxr-xr-x. 2 root root 4096 Jun 28  2011 bin
drwxr-xr-x. 2 root root 4096 Jun 28  2011 etc
drwxr-xr-x. 2 root root 4096 Jun 28  2011 games
drwxr-xr-x. 2 root root 4096 Jun 28  2011 include
lrwxrwxrwx  1 root root   12 Aug  7 09:43 java -> jdk1.7.0_79/
drwxr-xr-x  8 uucp  143 4096 Apr 11  2015 jdk1.7.0_79
drwxr-xr-x. 2 root root 4096 Jun 28  2011 lib
drwxr-xr-x. 2 root root 4096 Jun 28  2011 lib64
drwxr-xr-x. 2 root root 4096 Jun 28  2011 libexec
drwxr-xr-x  5 root root 4096 Aug  5 15:55 lnmp
drwxr-xr-x. 2 root root 4096 Jun 28  2011 sbin
drwxr-xr-x. 5 root root 4096 Jul 27 10:25 share
drwxr-xr-x. 2 root root 4096 Jun 28  2011 src
-rw-r--r--  1 root root  414 Aug  7 09:58 test.class
-rw-r--r--  1 root root  106 Aug  7 09:58 test.java
lrwxrwxrwx  1 root root   21 Aug  7 10:04 tomcat -> apache-tomcat-7.0.37/

2.启动tomcat

[root@server3 local]# cd tomcat/
[root@server3 tomcat]# ls
bin           CONTRIBUTING.md  logs       RELEASE-NOTES  webapps
BUILDING.txt  lib              NOTICE     RUNNING.txt    work
conf          LICENSE          README.md  temp
[root@server3 tomcat]# bin/startup.sh               #开启tomcat服务
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
Tomcat started.
[root@server3 tomcat]# netstat -anple
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       User       Inode      PID/Program name   
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      0          9175       1287/nginx          
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      0          8140       908/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      0          8373       984/master          
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      0          8720       1054/php-fpm        
tcp        0      0 172.25.8.3:22               172.25.8.250:41252          ESTABLISHED 0          8621       1033/sshd           
tcp        0      0 :::8080                     :::*                        LISTEN      0          13062      1432/java           
# tomcat端口为8080
tcp        0      0 :::22                       :::*                        LISTEN      0          8142       908/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      0          8375       984/master          
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      0          13082      1432/java           
tcp        0      0 :::8009                     :::*                        LISTEN      0          13063      1432/java           
tcp        0      0 :::3306                     :::*                        LISTEN      27         9015       1229/mysqld         

网页测试:
172.25.8.3:8080
这里写图片描述
3.编写tomcat默认访问目录

[root@server3 tomcat]# cd webapps/ROOT/
[root@server3 ROOT]# vim test.jsp

The time is:<%=new java.util.Date() %>

这里写图片描述
3.修改nginx配置文件,当访问.jsp文件时,自动跳转(保证主页的完整性,修改nginx的默认发布目录)

[root@server3 ROOT]# vim /usr/local/lnmp/nginx/conf/nginx.conf

        location ~ \.jsp$ {
            proxy_pass   http://127.0.0.1:8080;
        }

[root@server3 ROOT]# nginx -s reload

这里写图片描述
网页测试:
172.25.8.3/index.jsp
这里写图片描述

[root@server3 ROOT]# vim /usr/local/lnmp/nginx/conf/nginx.conf

        location / {
            #root   html;                      #修改nginx的默认发布目录
            root /usr/local/tomcat/webapps/ROOT;
            index index.php index.html index.htm;
        }

[root@server3 ROOT]# nginx -s reload

这里写图片描述
网页测试:
172.25.8.3/index.jsp
这里写图片描述
网页测试:

172.25.8.3:8080/test.jsp

这里写图片描述

二、实现 tomcat 的负载均衡
1.server1主机,配置nginx

vim /usr/local/lnmp/nginx/conf/nginx.conf

 20     upstream tomcat {
 21         server 172.25.8.1:8080;
 22         server 172.25.8.2:8080;
 23     }

 76         location ~ \.jsp$ {
 77             proxy_pass   http://tomcat;
 78         }

nginx -t
nginx -s reload

2.Session不同步,解决方案 :memcache
server1:

# pwd  #下载模块
/usr/local/tomcat/lib
ls
annotations-api.jar asm-3.2.jar catalina-ant.jar
catalina-ha.jar     catalina.jar    catalina-tribes.jar
ecj-4.2.1.jar       el-api.jar  jasper-el.jar
jasper.jar      jsp-api.jar kryo-1.04.jar
kryo-serializers-0.10.jar   memcached-session-manager-1.6.3.jar
memcached-session-manager-tc6-1.6.3.jar memcached-session-manager-tc7-1.6.3.jar
minlog-1.2.jar      msm-kryo-serializer-1.6.3.jar   reflectasm-1.01.jar
servlet-api.jar     spymemcached-2.7.3.jar      tomcat-api.jar
tomcat-coyote.jar   tomcat-dbcp.jar         tomcat-i18n-es.jar
tomcat-i18n-fr.jar  tomcat-i18n-ja.jar  tomcat-jdbc.jar tomcat-util.jar

rm -fr memcached-session-manager-tc6-1.6.3.jar
yum install -y memcached   # 下在memcache服务端
/etc/init.d/memcached start
Starting memcached:                                        [  OK  ]

pwd
/usr/local/tomcat/conf
vim context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.8.1:11211,n2:172.25.8.2:11211"
failoverNodes="n2"  ##注意server1主机为 n2,server2主机为 n1!!
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

bin/shutdown.sh

bin/startup.sh

cat logs/catalina.out 
#出现下列信息说明ok
INFO: MemcachedSessionService finished initialization, sticky true, operation timeout 1000, with node ids [n2] and failover node ids [n1]

3.访问 172.25.8.1/test.jsp 测试

Server Info: 172.25.8.2 : 8080

ID 51EAC4845CCD9734F0D21988CC4A1938-n2
Session listuser2 = 222
user1 = 
user4 = 444
user3 = 333
user5 = 555
name:
key:

server1 主机 tomcat shutdown 之后,数据依然正常
server2 主机 (安装 telnet )
server2 主机查询 Memcache

[root@server2 tomcat]# telnet localhost 11211

猜你喜欢

转载自blog.csdn.net/wwy0324/article/details/81464088
今日推荐