在LNMP架构中,考虑了静态资源的访问,直接由nginx将结构返回给客户端,但是访问动态资源并没有考虑。本博文将实现访问动态资源。简单来说,动态资源的访问过程可以简化如下:
-> .jsp页面 -> tomcat会将.jsp翻译成 .java源文件 -> 调用jdk中的javac命令编译.java文件为.class -> jvm运行 .class -> .html->客户端
1.JSP介绍:
JSP (java服务器页面)
JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩展(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
2. tomcat介绍:
Tomcat是运行在JVM中的一个进程。它定义为【中间件】,顾名思义,是一个在Java项目与JVM之间的中间容器。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
3.实现访问简单的动态页面
(1)下载apache-tomcat与jdk安装包解压,并且为切换目录方便,将apache-tomcat-7.0.37/做软链接
[root@server1 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
[root@server1 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
[root@server1 ~]# cd /usr/local
[root@server1 local]# ls
apache-tomcat-7.0.37 etc include lib libexec openresty share
bin games jdk1.7.0_79 lib64 lnmp sbin src
[root@server1 local]# ln -s apache-tomcat-7.0.37/ tomcat
(2)配置JAVA的环境变量
[root@server1 local]# vim /etc/profile
[root@server1 local]# source /etc/profile
(3)启动tomcat,端口为8080
cd /usr/local/tomcat/bin
./startup.sh
构建到现在所开端口
(4)打开tomcat的8080端口之后,通过http://172.25.33.1:8080/,可以访问默认页面index.jsp,但是想要访问80端口自动转到8080端口,修改openresty的配置文件
vim /usr/local/openresty/nginx/conf/nginx.conf
(5)上一步实现了80端口到8080的转发,在tomcat默认发布页面下写一个简单的动态页面,实现动态资源的访问
就这样,我们实现了简单的动态访问!!!!!
4.实现tomcat的负载均衡
利用tomcat中间件将jsp访问进行负载均衡,具体环境如下:
tomcat服务器和后端服务器一:172.25.33.1(80、8080、11211、3306、9000端口都已开)
后台服务器二:172.25.33.2
(1)另一台后端服务器的操作:
[root@server2 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
[root@server2 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
[root@server2 ~]# vim /etc/profile
[root@server2 ~]# source /etc/profile
[root@server2 ~]# cd /usr/local
[root@server2 local]# ln -s apache-tomcat-7.0.37/ tomcat #这些基础步骤和server1之前的步骤一样
[root@server2 bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1.7.0_79
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
(2)server1修改openresty配置文件,实现负载均衡:
vim /usr/local/openresty/nginx/conf/nginx.conf
(3)将一个用来测试负载均衡的页面放到server1和server2的tomcat发布目录下,并且重新关闭再打开tomcat:
cd /usr/local/tomcat/bin
./shutdown.sh
./startup.sh
(4)测试能否实现负载均衡:
浏览器输入:
http://172.25.33.1/test.jsp
5.实现tomcat的会话保持
可以看到在4中,实现了负载均衡,但是当切换服务器时,数据也随之切换,对于用户是不可取的,应该可以看到数据精准的保持到一台服务器上
(1)下载nginx1.10.1(其他版本可能不支持stick)和nginx-sticky的安装包,并编译nginx
[root@server1 local]# /usr/local/openresty/nginx/sbin/nginx -s stop
[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz
[root@server1 ~]# /usr/local/lnmp/nginx/sbin/nginx -V #查看以前版本编译参数
nginx version: nginx/1.16.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx
[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 --user=nginx --group=nginx --add-module=/root/nginx-sticky-module-ng
#重新编译,添加sticky模块
[root@server1 nginx-1.10.1]# make && make install
(2)拷贝之前openresty的配置文件为nginx1.10.0版本的配置文件,并修改后重新加载
[root@server1 nginx-1.10.1]# cp /usr/local/openresty/nginx/conf/nginx.conf /usr/local/lnmp/nginx/conf
cp: overwrite `/usr/local/lnmp/nginx/conf/nginx.conf'? y
[root@server1 nginx-1.10.1]# cd /usr/local/lnmp/nginx/conf
[root@server1 conf]# vim nginx.conf
[root@server1 conf]# ../sbin/nginx -s reload
(3)测试:
浏览器输入:
http://172.25.33.1/test.jsp
提交数据 观察数据是否保留在一个服务端上
6.实现tomcat的会话共享
当两台后端服务器中由一台挂掉了,能否保证数据不丢失并转移到另外一台服务器中,这就需要会话共享,操作如下:
(1)server2下载memcached
[root@server2 bin]# yum install memcached -y
(2)server1和server2获得支持会话共享的jar包,放到/usr/local/tomcat/lib下
[root@server1 lib]# ls
annotations-api.jar memcached-session-manager-tc6-1.6.3.jar
asm-3.2.jar memcached-session-manager-tc7-1.6.3.jar
catalina-ant.jar minlog-1.2.jar
catalina-ha.jar msm-kryo-serializer-1.6.3.jar
catalina.jar reflectasm-1.01.jar
catalina-tribes.jar servlet-api.jar
ecj-4.2.1.jar spymemcached-2.7.3.jar
el-api.jar tomcat-api.jar
jasper-el.jar tomcat-coyote.jar
jasper.jar tomcat-dbcp.jar
jdk-7u79-linux-x64.tar.gz tomcat-i18n-es.jar
jsp-api.jar tomcat-i18n-fr.jar
kryo-1.04.jar tomcat-i18n-ja.jar
kryo-serializers-0.10.jar tomcat-jdbc.jar
memcached-session-manager-1.6.3.jar tomcat-util.jar
[root@server1 lib]# rm -fr memcached-session-manager-tc6-1.6.3.jar
(3)server1和server2修改context.xml文件,然后关闭再重启tomcat
cd /usr/local/tomcat/conf/context.xml
(4)此时,先将server1和server2的tomcat都打开,在浏览器输入数据,然后挂掉正在会话保持的服务器,看能否转移数据
vim /usr/local/tomcat/logs 在server1上可以看到转移的数据
备注:ip_hash 可以实现sticky,但是当主机掉了以后就不能切掉另外一台主机 但数据不会丢失 当主机恢复以后数据还在