概述
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