2019独角兽企业重金招聘Python工程师标准>>>

nginx+memcache+tomcat 应该是企业级开发中用到的比较多的一套集群web环境,因为本人是从事Java的学习和开发,因此服务器选择了tomcat;配置这样一个环境在我看来首要目的当然是将服务器的压力分散开,用多台服务器来处理大用户的并发,并通过缓存来减少对服务器的请求量,同时一个应用分布在不同服务器上就需要做session共享。大概的结构我想应该是这样:

这样一来请求会被分派到这图中5个tomcat下的项目去处理,当然有时候服务器需要处理更大的并发量则需要更多的nginx来作为代理转发并需要更多的tomcat节点(当然也有牛人能把tomcat配到数千并发量,这样也不一定需要太多tomcat)

我将从windows上给大家讲我的配置过程,至于在linux上其实差不太多,只是在安装memcache和nginx上有差异,对于配置来说都一样。下面简单来介绍下我的操作步骤(JDK和tomcat部分的安装省略)

一、所需环境和软件

Tomcat7,下载链接:http://tomcat.apache.org/

Nginx是nginx-1.2.8,

下载链接:http://nginx.org/en/download.html

Memcached是memcached-1.2.6-win32-bin,下载链接:http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip,

其他所需jar包,如下列表:

memcached-session-manager-1.6.1,memcached-session-manager-tc6-1.6.1(因为Tomcat版本为6.0)

javolution-5.4.3.1,msm-javolution-serializer-1.6.1(准备使用javolution序列化方式)

spymemcached-2.7.3(依赖包),以上jar包在http://code.google.com/p/memcached-session-manager/downloads/list中都可以找到,文档http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration中详细介绍了不同的服务器版本,不同的jar包需求。

二、Tomcat配置

这里我们就配置俩tomcat来意思意思。。。。

进入tomcat配置文件context.xml,我设置么配的(具体为什么这么配我还真有点说不出123,大致有感觉罢了)

也就是红框是我们需要加的了,这里就是配置session共享,通过memcache来保存session信息。

memcacheNode是你有几个memcache就可以配几个节点,我这里写了两个告诉大家如果你有多个需要配置的节点 用空格断开,前面写节点名。

当然网上有的是把这部分配到server.xml的Engine节点下,我试了如果不在context下配置我的会报错,不知道他们还有哪里和我不一样。再就是这里的memcacheNode的IP,我写localhost也有问题,必须写127.0.0.1才能连接到memcache的服务。  如果有人发现我配置上的问题可以帮我一并指出。

然后大家可以去server.xml下找<Engine>节点,在其中添加属性 jvmRoute="tomcat n" n就是第n个tomcat你自己写 后面测试的时候打印sessionId会显示出来现在用的是那个 tomcat。当然server.xml最重要的配置还不是在这,是你需要配置三个端口保证和其他的tomat不会冲突,分别在这里

注意tomcat端口默认都是8080 ,大家做开发习惯了这个端口,都把端口配到808*,但是这样会有问题,比如你要配4个tomcat集群,一个tomcat 要配置3个端口,都在808*上就势必有重复,因此不是很好的决策,所以我是这么定的:分别放在 900*  808*  810*上,然后建议大家在tomcat根目录建一个文件名叫8081-8100-9006 类似这样文本文件提示自己当前这个tomcat的端口配置,现在只有俩服务器,否则服务器多了你一个个开配置文件看太麻烦。

配置完了,还有memcache支持的jar,复制到lib下即可,当然版本尽量对上或者贴近。

三、nginx的安装

载下来的nginx,我的是1.8,解压完就这样

双击nginx.exe是可以启动nginx的,但是你并不能看见什么反应,因为他在你后台进程里跑,打开任务管理器看服务里面会有nginx的服务开着,就行了。当然我还是推荐大家用命令模式操作nginx

开启nginx: nginx

关闭nginx: nginx -s stop

重启nginx: nginx -s reload

这里注意nginx的核心配置文件在 conf目录下,有个nginx.conf文件,这里是我们需要配置的地方。

nginx配置文件结构我不全了解,我就说我知道的几个点。

Nginx配置文件主要分为4部分:main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和location

首先server代表了一个虚拟主机,在这个块中可以配置主机名和location,这两个块也就是我们要用到的nginx反向代理,将虚拟地址映射到实际的服务器地址。实际的服务器地址我们配置到一个upstream块中,那么既然我们做了集群,将大量的请求分派到5个甚至多个tomcat下,那么请求怎么访问它们呢?这里就有请求分配的策略了。upstream模块的负载均衡分配方式 我在网上查了有5种:轮询,权重,ip_hash,url_hash和平均。轮询比较好理解就是从第一个轮流来访问;权重就是在配置这个节点的时候就分配给他一个优先级(有点像线程优先级),ip_hash 每个请求按照其请求IP的hash结果分配,url_hash  按照url的hash结果分配 平均分配就是按照服务器响应时间来分配,响应时间小的先分配。

讲到这里nginx配置的理论就差不多了,那么来看下配置的细节,下面是我的部分配置:

这里我将两台tomcat加入负载均衡配置中,location指的是server_name后项目名,也就是说我们访问http://localhost/tonghang 将会定向到 http://127.0.0.1:8081/tonghang 和http://127.0.0.1:8082/tonghang 上。proxy_pass  指定了代理的目标主机IP,这里写的是upstrean块的地址(我不是很懂暂时这么说),由upstream中指定有哪些要映射的IP,当然我们也可以写到外面,用很多个proxy_pass来映射。

四、memcache安装

windows下安装memcache就是安装一个exe文件,linux下安装可能还需要安装部分依赖库,因为我所在的服务器下就带有memcache,我先在win下配置好后再去linux下直接用的,用起来没有什么问题,所以安装细节就不提了大家可以去看别的技术文章,win下安装就是 来到你解压的memcached.exe所在目录用命令 memcached.exe -d install 即可。启动的话就是执行memcached.exe -d start  linux下是memcached -d -uroot  重复开memcache貌似不会出现端口占用的问题应该是它内部做处理了

好了,到这里基本的配置完毕,我们可以去两个tomcat下部署两个一样web项目(我这里叫tonghag),项目下都有一个index.jsp,内容如下:

 <%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<body>
<h2>Hello World!</h2>
<%  String tmp = (String)session.getAttribute("tmp");  if(tmp == null || tmp == ""){  session.setAttribute("tmp","i am created in tomcat 2 . my id is : "+session.getId());  tmp = (String)session.getAttribute("tmp");  out.println(" null now to created value !");  out.println("<br/>");  out.println(tmp);  System.out.println(tmp);  }else{  out.println(tmp);  System.out.println(tmp);  }
%>
</body>
</html>

逻辑就是每当发现请求中没有sessionid就创建session,按道理如果没有配置memcache的session共享,分别访问 http://localhost:8081/tonghang  http://lcoalhost:8082/tonghang 会得到不同的sessionID,如果你通过上述的配置sessionID在一个浏览器上的访问都是一样的。

在测试一下 http://localhost/tonghang 试试看。你会发现也能看当刚才的界面,这就是我们做了反向代理的结果,而且你还会发现你的两台tomcat的控制台在挨个输出日志,这也就达到了我们负载均衡的效果,因为我配置了两台tomcat而且权重一样,也就是说访问的几率差不多,而两台tomcat本来就是一台复制一台的,所以几乎是121212的访问(和轮询差不多)。所以大家可以尝试给其中一台配置权限高一点,日志输出分布也就明显了。或者可以试试其他的策略。

ngxin+tomcat+memcache的负载均衡,反向代理和session共享的相关配置介绍完了,单纯这样用是看不出什么实际用途的,需要我们将其和实际项目联系起来。在项目访问量级相对较大的时候就能看出来了。毕竟那么多企业的项目再用这套架构,也不是徒有虚名嘛。

小弟第一次做集群的配置,其中如果有配置的不对让我误打误撞试出来的,也请指点一下。并且我一直不清楚一个地方就是 我在配置tomcat的context.xml 那个memcacheNode里面我如果只配一个节点就会错,log意思好像是无法连接memcache服务,配俩一样的就行了。这里我一直没明白,有知道怎么回事儿的身边给我留个言吧!

转载于:https://my.oschina.net/rpgmakervx/blog/505434

nginx+memcache+tomcat配置(新手笔记)相关推荐

  1. Nginx+memcached+tomcat配置集群session共享负载均衡

    Nginx+memcached+tomcat配置集群session共享负载均衡 配置环境: windows xp下 jdk1.7.0_10      nginx-1.2.6  (附下载)      m ...

  2. NGINX基于Tomcat配置负载均衡

    NGINX基于Tomcat配置负载均衡 本部署指南说明了如何使用NGINX开源和NGINX Plus在Apache Tomcat TM应用程序服务器池之间平衡HTTP和HTTPS流量.本指南中的详细说 ...

  3. 配置apache和nginx的tomcat负载均衡

    2016-01-25 09:36 by pursuer.chen, 2777 阅读, 2 评论, 收藏, 编辑 概述 本篇文章主要介绍apache和nginx的相关配置,tomcat的相关安装配置我在 ...

  4. Nginx基础应用配置小结 - 运维笔记

    Nginx基础应用配置小结 - 运维笔记 在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介 N ...

  5. Nginx+Memcached+Tomcat集群配置实践(Sticky Session)

    准备工作 创建一个简单的web应用,名为session.其中有两个页面,分别如下所示: 页面login.jsp [html] view plaincopy <%@ page language=& ...

  6. nginx+tomcat配置负载均衡集群

    一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,方法如下: 首先去apache tomcat官网下载一个tomcat解压版. 解压该压缩包,生成 ...

  7. nginx配置使用笔记:三

    什么是remote_addr remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你 的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web ...

  8. 直接访问静态图片_详解nginx和tomcat访问图片和静态页面的配置方法

    概述 生产环境下,有时候需要访问图片,正常需要应用ftp.nginx等配套使用,但是有时候为了简化,可以用以下的两种简单的访问,说实话,就是为了偷懒,但是效果是能有的,这就行了,所以今天做这个简化版的 ...

  9. nginx修改监听端口号8080_Nginx + Tomcat 配置

    这里使用Nginx解析域名,做出域名到Tomcat的映射 不多说 贴代码 Nginx 在http下 upstream tomcat { server 127.0.0.1:8080; } server ...

最新文章

  1. CS9:转载:怎样配置Win Radius 当使用Cisco交换机时
  2. 有没有一段代码,让你觉得人类的智慧也可以璀璨无比?
  3. Git客户端TortoiseGit(Windows系统)的使用方法
  4. $each $position $sort $slice
  5. 使用 $.grep() 方法
  6. OpenCv:Mat矩阵的初始化
  7. Hibernate_13_QBC查询
  8. 【c基础】之 文件及其操作
  9. 计算机组成原理R0bus是什么,计算机组成原理微程序控制器实验
  10. 百度地图infowindow的close事件_百度地图蒙圈:车主要加油误导母婴店 跑偏理由令人啼笑皆非...
  11. 数据结构-队列1-顺序存储
  12. java+路径拦截实现_SpringBoot实现拦截器
  13. 俄罗斯Mail.Ru云端部署视频的技术架构解析
  14. OpenSSH服务及其相关应用
  15. CString, BSTR, LPCTSTR 概念
  16. 计算机操作系统详细学习笔记(三):存储管理
  17. dts双轨制会员积分系统
  18. 水面船舶雷达监视-信天翁雷达监视系统
  19. 惠普z800工作站bios设置_惠普台式机装win10系统及bios设置(uefi+gpt)
  20. python猜数字游戏编程 可猜次数用户说继续 则程序继续_python猜数字游戏

热门文章

  1. linux下ftp服务阶段实验(3)
  2. Oracle中的事务之savepoint
  3. KlayGE 4.0中Deferred Rendering的改进(四):GI的神话
  4. Android用户界面设计“.NET研究”:框架布局
  5. 微软:本周三个安全更新 暂不会修正Excel漏洞
  6. PHP 与Memcache 分布式
  7. java基础 第八章(静态成员的调用 、 封装)
  8. 汇编学习笔记(4)-伪指令(MASM)
  9. 【转】蓝牙物理链路类型:SCO和ACL链路
  10. TCP拥塞控制算法 — CUBIC的补丁(三)