Nginx+Tomcat+Memcached负载均衡配置完整流程:


前言:


Nginx实现Tomcat的负载均衡和利用memcached实现session共享.



  1. 首先配置tomcat,JDK

   

jdktomcat 放入站点/opt目录中

 

安装JDK

 

cd /opt

chmod 755 jdk-6u45-linux-x64-rpm.bin

./jdk-6u45-linux-x64-rpm.bin

java -version      //检验版本

 

安装Tomcat

 

tar -zxf apache-tomcat-6.0.45.tar.gz 
 
cd apache-tomcat-6.0.45/bin
 
chmod 755 startup.sh
 
./startup.sh


安装jar包:

 

直接粘贴至tomcat文件lib目录下

 

 jar包见附件

 


下面是安装jdk1.7,1.8的方法,我们这边用的是jdk 1.8所以还可以提供jdk 1.8版本的,jdk 1.7的自己去官网下即可

Jdk 1.7,Jdk 1.8

 

rpm -ivh jdk-7u80-linux-x64.rpm
 
rpm -ivh jdk-8u77-linux-x64.rpm


 

 tomcat日志状态

 

tail -f /opt/apache-tomcat-6.0.45/logs/catalina.out


注:

    执行到这一步:那么我们首先打开tomcat

                http://localhost:8080/   //localhost指的是你当前的ip地址

    确认页面可以出现TOM猫儿,证明启动成功,

    

    着重点:此刻拍摄一个快照,命名为Tomcat


So:

  2.安装Nginx

     

1.
  yum install epel-release
 
2.
  yum install nginx
 
 
3.关闭SELinux
 
vi /etc/selinux/config
 
#改为  
     SELINUX=disabled  
 
 
 
4.
   service nginx start      //启动
   service nginx restart    //重启
   service nginx status     //查看状态


注:

    执行到这一步:那么我们首先打开tomcat

                http://localhost:8080/   //localhost指的是你当前的ip地址

    然后去掉:8080 也就是: http://localhost/  

    确认页面可以出现写有nginx,证明启动成功,

    

    着重点:此刻拍摄一个快照,命名为Nginx



So:

    3.Memcached安装:

yum install -y telnet

yum install -y memcached
 
service memcached start      //启动
service memcached restart    //重启
service memcached status     //查看状态


注:

    执行到这一步:那么我们首先打开tomcat

     http://localhost/  (注意没有8080)

    确认页面依旧是Tomcat而不是Nginx,证明启动成功,

    

    着重点:此刻拍摄一个快照,命名为Memcached


Final:


    4.修改nginx.config文件:

 

   vi /etc/nginx/nginx.conf

 

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  2048;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

        upstream puppetmaster {
			 server 192.168.230.128:8080; 
			 server 192.168.230.133:8080;
        }
        server {
                listen 80;

                location / {
                        ##设置跳转到puppetmaster负载均衡
                        proxy_pass http://puppetmaster;
                        proxy_redirect off;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;

                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Client-Verify $ssl_client_verify;
                        proxy_set_header X-SSL-Subject $ssl_client_s_dn;
                        proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
                        proxy_buffer_size 10m;
                        proxy_buffers 1024 10m;
                        proxy_busy_buffers_size 10m;
                        proxy_temp_file_write_size 10m;
                        proxy_read_timeout 120;
                }

		location /status {
 			stub_status on;
			access_log   off;
			allow all;
		}
        }
}


需要注意这里

 upstream puppetmaster {
			 server 192.168.230.128:8080; 
			 #server 192.168.230.133:8080;
        }

这里的两个地址分别指的是你的两台不同的tomcat地址,#表示注销,也就是说这里只需要加入当前tomcat地址,而在另一台tomcat上加入另一台tomcat的当前地址

这里只需要加入当前tomcat的IP地址即可


5.

修改apache-tomcat-6.0.45/conf/context.xml文件:


cd /opt
 
vi apache-tomcat-6.0.45/conf/context.xml


配置文件中的<context></context>标签里面加入如下内容:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      memcachedNodes="n1:192.168.230.128:11211"
      sticky="false"

      sessionBackupAsync="false"
      sessionBackupTimeout="1000"

      transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
      customConverter="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
      />


需要注意这里

memcachedNodes="n1:192.168.230.128:11211"

这是第一台tomcat的IP地址记为n1,两台tomcat在这里配置均为第一台n1地址



注意了t_0003.gif给你个表情:这里需要通过完全克隆第二台tomcat或者重新再安装一次上述步骤,然后和上述配置一样,需要改的地方我在上面已经注释了,这样你就有相同配置但Ip地址不同两台tomcat,除了配置文件nginx.config里面IP地址需要更改。



最后写一个index.jsp进行测试


index.jsp 请见附见,我将写好的index.jsp打成了war包 ,起了个叫bbb.war 的war包,将这个war包放入tomcat的webapps下,即可直接访问 http://localhost/bbb.war  即可访问,结果如下图



wKioL1etN_nSHpJfAAAuegFCbBo965.png-wh_50



So:出现上面结果需要刷新一下页面,如果还是这个Session未命中,UUID是变化的,说明你配置的有问 题,请通过快照一步一步排除问题所在,如果出现下面这个,页面没有Session未命中标识,同时刷新页面UUID不变化,如下图,则证明Nginx+Tomcat+Memcached负载均衡成功实现



wKioL1etN_mzobu8AAA6om3W6Ds006.png-wh_50

失败请返回快照一步步排错j_0004.gif 另外附件上传至Nginx+Tomcat+Memcached负载均衡配置附件t_0022.gif



好吧 找不到附件我就在加一个index.jsp,记得给楼楼一个赞呦~j_0003.gif

<%@page import="java.util.UUID"%>
<%@page import="java.util.Date"%>
<%@page import="java.net.InetAddress"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Session 共享测试</title>
</head>
<body>
<h1>本机IP:<%System.out.println(Math.random());%></h1><br/>
<%
    String uuid = (String)request.getSession().getAttribute("time");
%>
<%
    if(uuid == null) {
%>
<h1>Session未命中</h1>
<%
        uuid = UUID.randomUUID().toString();
        request.getSession().setAttribute("time", uuid);
        System.out.println(uuid);
    }
%>
<h1>UUID:<%=uuid%></h1>
</body>
</html>


拿走不谢,留下你的赞呦j_0008.gif