tomcat+nginx+memcache

tomcat简介:

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

一.安装配置java环境

[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]# 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]# which java 
/usr/local/java/bin/java
[root@server1 local]# which javac
/usr/local/java/bin/javac
[root@server1 local]# cd
[root@server1 ~]# vim test.jsp #编辑jsp测试javac功能是否可以实现
public class test
{
    public static void main(String[] args)
    {
        System.out.println("Hello World!");
    }
}
[root@server1 ~]# mv test.jsp test.java
[root@server1 ~]# javac test.java
[root@server1 ~]# java test 
Hello World!

安装tomcat服务器:

[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]# cd tomcat/
[root@server1 tomcat]# 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/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@server1 tomcat]# cd logs/
[root@server1 logs]# ls
catalina.2018-08-07.log      localhost.2018-08-07.log
catalina.out                 localhost_access_log.2018-08-07.txt
host-manager.2018-08-07.log  manager.2018-08-07.log
[root@server1 logs]# cat catalina.out #记录tomcat日至
[root@server1 logs]# cd ..
[root@server1 tomcat]# cd webapps/
[root@server1 webapps]# cd ROOT/
[root@server1 ROOT]# ls
asf-logo-wide.svg  bg-nav.png    RELEASE-NOTES.txt  tomcat-power.gif
bg-button.png      bg-upper.png  tomcat.css         tomcat.svg
bg-middle.png      favicon.ico   tomcat.gif         WEB-INF
bg-nav-item.png    index.jsp     tomcat.png
[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT#tomcat默认发布家目录

Node2:tomcat一样的安装配置
访问8080测试tomcat部署:
Node1:

Node2:

二.Nginx实现基于tomcat的负载均衡:

编译安装nginx源码包添加sticky算法模块如果之前安装过我们需要把之前的所有设置覆盖掉1.删除解压之后的tar包了里面的MAKEFILE输入命令为:make clean
2.重新编译:./configure + 功能模块 (添加需要的所有的模块因为是覆盖原有模块功能不是追加我们要添加所有的功能模块)
3.make && make install

[root@server1 ROOT]# yum install -y pcre-devel openssl-devel
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz -C nginx-1.14.0
[root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# yum install gcc
[root@server1 nginx-1.14.0]# ./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --add-module=nginx-sticky-module-ng/
[root@server1 nginx-1.14.0]# make
make -f objs/Makefile
[root@server1 nginx-1.14.0]# vim /root/.bash_profile
[root@server1 nginx-1.14.0]# source /root/.bash_profile
[root@server1 nginx-1.14.0]# nginx
[root@server1 nginx-1.14.0]# vim /usr/local/nginx/conf/nginx.conf #nginx实现负载均衡(-----tomcat1---;---tomcat2------)8080端口
events {
    use epoll;
    worker_connections  1024;
}
http {

    upstream tomcat{
        sticky;
        server 172.25.30.1:8080; #当访问本机的nginx时nginx将调用自定义命名的tomcat算法从real server中8080端口取数据返回给客户端测试nginx实现的均衡负载时直接访问nginx/index.jsp访问tomcat----->Tomcat_IP:8080
        server 172.25.30.2:8080;
    }
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    gzip  on;
    server {
        listen       80;
        server_name  tomcat;
  location / {
            root   html;
            index  index.html index.htm;
        }
                error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.jsp$ { #nginx支持jsp环境页面
            proxy_pass   http://tomcat;
        }
}


[root@server1 nginx-1.14.0]# useradd -s /sbin/nologin nginx
[root@server1 nginx-1.14.0]# nginx -t
[root@server1 nginx-1.14.0]# ln -s /usr/local/nginx/sbin/nginx /sbin/nginx
[root@server1 nginx-1.14.0]# nginx -s reload
[root@server1 nginx-1.14.0]# vim /usr/local/tomcat/webapps/ROOT/test.jsp
[root@server1 nginx-1.14.0]# scp /usr/local/tomcat/webapps/ROOT/test.jsp server2:/usr/local/tomcat/webapps/ROOT/
Tomcat发布家目录:/usr/local/tomcat/webapps/ROOT/
[root@server1 tomcat]# sh 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/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

Nginx:


负载均衡:

出现一下页面说明tomcat服务是好的但是没有找到文件:

添加测试界面:
在 tomcat 发布家目录写入:/usr/local/tomcat/webapps/ROOT/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>

三.Memcache实现tomcat交叉式缓存

TOMCAT1——–>MEMCACHE2———>MEMCACHE2#TOMCATE本地缓存优先级最低

[root@server1 tomcat]# yum install memcached -y
[root@server1 tomcat]# service memcached start
Starting memcached:                                       [  OK  ]
[root@server1 tomcat]# bin/shutdown.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/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
#配置tomcat需要关闭服务
[root@server1 ~]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

session 的序列化方案官方推荐的有 4 种:
1. java serialization
2. msm-kryo-serializer
3. msm-javolution-serializer
4. msm-xstream-serializer
其中性能最好的序列化方案是 Kryo,此实验我们采用 kryo 方式。

memcachedNodes="n1:172.25.30.1:11211,n2:172.25.30.2:11211"
        failoverNodes="n1" #node1缓存在node2的memcache当node2的memcache挂掉找n1自己
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="![这里写图片描述](https://img-blog.csdn.net/20180807145949914?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RyZWFtZXJfeGl4aXhp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>


访问测试界面写入数据:

关掉node1的tomcat还是可以登入nginx实现的均衡负载,但写入的数据却丢失了:

[root@server1 tomcat]# scp /usr/local/tomcat/conf/context.xml server2:/usr/local/tomcat/conf/
[root@server1 jar]# ls
asm-3.2.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
spymemcached-2.7.3.jar
[root@server1 jar]# mv * /usr/local/tomcat/lib #lib库中保存节点要保持节点一致否则访问过程中不报错但是没有界面显示
[root@server1 lib]# rm -f memcached-session-manager-tc6-1.6.3.jar
[root@server1 lib]# scp * server2:/usr/local/tomcat/lib/
[root@server1 tomcat]# 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/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

查看节点是否添加成功:

测试在节点一提交数据当node1的tomcat—down—->在node2还是可以访问到node1提交的数据:


在node2上可以访问node1的数据:
[root@server2 tomcat]# yum install telnet -y
[root@server2 tomcat]# telnet localhost 11211

猜你喜欢

转载自blog.csdn.net/dreamer_xixixi/article/details/81481545