nginx+memcached+tomcat创建集群

来源:互联网 发布:8080端口是tcp还是udp 编辑:程序博客网 时间:2024/05/21 22:30

上大学的时候就听老师说nginx有多好多好,考试的时候也考过相关的题目,但是在实际运用中还真没遇见过,现在开始不断的接触项目,从单个服务器,到was集群,我也越来越感受到集群在以后的发展中重要的位置,因为was是要收费的,试用版的也要下好久,干脆就研究研究nginx+tomcat吧!

废话不多说,咱们先来体会体会nginx的负载均匀的效果吧。

一、nginx部分

下载从官网上下载nginx,这里我用的nginx-1.9.4,解压缩,对于咱们初步接触nginx的,也就是修改一下E/conf/nginx.conf文件里面的内容,简单点说就是配置需要进行请求转发的服务器列表,需要修改的内容很少如下:

1、在http段加入以下代码

upstream a.com { 

#我在本机测试的两个tomcat的端口
      server  http://127.0.0.1:8080;
      server  http://127.0.0.1:8081;

2、修改server段

server{ 

    listen 80; 
    server_name a.com; 
    location / { 
        proxy_pass         http://a.com; 
        proxy_set_header   Host             $host; 
        proxy_set_header   X-Real-IP        $remote_addr; 
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
}

修改hosts文件加入 127.0.0.1a.com(为了模拟域名访问,这一步可以省略,但是配置文件也就不一样了)

到这里nginx的配置就完成了。

二、java部分

接下来咱们创建两个java web工程,分别在webcontent下面创建index。jsp代码如下:

<%@ 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>index.jsp</title></head><body>sessionid:<%=session.getId() %><br/>web1/web2(总之这里要体现出两个工程不一样的地方,你可以用端口号,也可以随便写两个不一样的字符串,能看出区别就行)</body></html>
完成之后分别加入两个tomcat中,分别设定访问端口为8080和8081,修改端口号就不在这里废话了。

启动两个tomcat,启动nginx(启动之后会闪退是正常的,咱们只需要看看进程里面有没有nginx就可以了),访问a.com 看看效果是不是一会又在web1一会又在web2上面啊,这就证明咱们负载均衡已经成功了!

三、设置session共享(这里是java版本的,PHP可以自行参考相关资料)

负载均衡咱们已经成功了,那么在生产环境上只是这样肯定不行啊,要是一宕机在客户那边session什么都没了让人摸不着头脑,咱们接下来需要做的就是在所有tomcat中共享session以达到高并发、高效率和低事故的效果(还有很多好处我就不多废话了)

安装memcached客户端,下载memcached-1.4.20,安装方式很简单,就是进入memcached.exe目录下使用命令:

memcached -d install 安装
memcached -d start启动

启动完成之后查看当前11211端口是不是处于监听状态

下载文件:memcached-session-manager-1.5.1.jar、memcached-session-manager-tc7-1.5.1.jar、spymemcached-2.7.3.jar(根据序列化策略可以选择不同的jar包,但是这三个是必须的,具体请看:基于Memcached的tomcat集群session共享所用的jar)

分别在两个tomcat的/config/content.xml的content节点里面添加如下代码(根据序列化策略自行修改,我这里采用的是默认的序列化策略)

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"   </span>memcachedNodes="n1:localhost:11211"     </span>lockingMode="auto"</span>sticky="false" </span>requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"    </span>sessionBackupAsync= "false"   </span>sessionBackupTimeout= "100"      </span>transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"      />
到这里咱们就已经完成了所有的配置了,重启tomcat和nginx验证吧!不管是不是web1或者web2,上面的sessionid都不会变,而且咱们手动的关闭一个tomcat之后刷新sessionid还是不会变化的!集群的初步部署咱们就完成了!
还有很多写的不好的地方,望大神们不惜赐教!




2 0