http://www.cnblogs.com/zhrxidian/p/5432886.html

在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新。但这可能会出现一些状况:

1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一)

2.不知道的用户可能会想网站是不是被攻击了,降低了对网站的信任程度,从而导致失去部分潜在客户,这点尤其对金融互联网公司不利。

在查了一些资料后,决定采用Tomcat + Nginx + Redis来实现负载均衡和session共享。下面记录下我的实践过程,如有错误不足之处欢迎大神指点,不喜勿喷。

1.Nginx简单介绍及开启

Nginx是一款轻量级兼备高性能的Http和反向代理服务器。所谓反向代理就是指在用户发起访问请求,由代理服务器接收,然后将请求转发给正式服务器,并且将正式服务器处理完的数据返回给客户端,此时代理服务器就表现为一个服务器。这么做看起来多经过了一步,稍显麻烦,但实则是好处多多,在下面的demo中我会将其体现出来。

首先我们去Nginx官网下载个Nginx,我这是在自己电脑上,所以当然下载的是windows版本的。下载完成后直接放在某个盘中即可,不需要安装。接下去我们打开cmd,进入nginx的目录下,输入start nginx。

我们可以看到一个窗口一闪而过,这样nginx就已经被开启了,我们在任务管理器中可以找到它的进程。

现在我们在浏览器中输入localhost。可以看到出现一个页面,虽然简陋了点,但这确确实实就是nginx的欢迎页面,就类似tomcat刚启动完成的locahost:8080的欢迎页面。

2.使用Nginx实现反向代理

现在我们搭建一个基于SpringMVC +Spring + Mybaties框架的maven项目,搭建过程不加以赘述。功能很简单,就是能跳转到一个页面就行了,当然也可以使用别的框架。

运行demo,我这tomcat端口是8080,在浏览器输入localhost:8080,出现我们的页面。

这时我们还是直接访问tomcat服务器的,现在我想通过nginx访问tomcat,即输入localhost就能显示我们demo的页面。

这就要我们去修改nginx的核心配置文件,在其目录下的conf文件夹下的nginx.conf文件,那么首先我们就要了解该文件中一些节点的作用。

  • worker_processes:工作进程个数,可配置多个

  • worker_connections:单个进程最大连接数

  • server:每一个server相当于一个代理服务器

  • lister:监听端口,默认80

  • server_name:当前服务的域名,可以有多个,用空格分隔(我们是本地所以是localhost)

  • location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里

  • index:当没有指定主页时,默认会选择这个指定的文件,可多个,空格分隔

  • proxy_pass:请求转向自定义的服务器列表

  • upstream name{ }:服务器集群名称

知道了节点作用后,我们就知道我们需要修改的文件中的server部分,这是它原有的代码,我删除了它注释部分。现在我们就能明白为什么输入localhost,

它访问的是它欢迎页面即index.html。

下面我们对这段代码进行一些小小修改。就是将请求转向我们定义的服务器。

随后在cmd中输入命令nginx -s reload即可重启nginx。

重启后,我们再输入localhost,可以看到跳转到的页面是我们demo的。

至此,反向代理已完成,这样所有请求都需经过代理服务器才能访问到正式服务器,某种程度上可以保护网站安全。

3.使用Nginx实现负载均衡

负载均衡即是代理服务器将接收的请求均衡的分发到各服务器中。

负载均衡的优势在访问量少或并发小的时候可能并不明显,且不说淘宝双11、铁道部抢票这种级别的访问量、高并发,就是一般网站的抢购活动时,也会给服务器造成很大压力,可能会造成服务器崩溃。而负载均衡可以很明显的减少甚至消除这种情况的出现,下面我们说说实现方法。

首先我们再开启一个tomcat服务器,这里区分一下就叫tomcat2吧,原先的叫tomcat1。将tomcat1上的项目,拷贝到tomcat2上,稍微修改下页面上的文字以便等下区分我们的请求被分发到了哪个tomcat上。tomcat2端口我这里为8081。在浏览器中输入localhost:8081。

服务器准备好了,我们要在server外部定义个服务器集群,即用到了上文中提到的upstream 标签。服务器集群名字取为test。

同时我们需要再修改下server,将定向的路径转到问你服务器集群上。

重启下nginx,在浏览器输入localhost,再多刷新几次,可以看到两个页面在来回切换。

这样即实现了负债均衡。假设我们服务器在运行过程中,其中一个tomcat挂了,仍然还有另一个可以访问。更新的时候也能先关闭只其中一个,轮流更新。另外还能有效缓解服务器压力,是不是很棒呢?

当然,以上nginx的配置是简单化的,实际上我们还可以配置nginx对静态资源的缓存等等,在此就不多加演示了。

4.小结

花了好些时间,总算陆陆续续要写好了,在此小结一下。

nginx作为一个反向代理服务器,能缓存我们项目的静态文件,并实现反向代理与均衡负载,可以有效减少服务器压力,即使项目不大,也可以使用。

大家另外应该都还发现了个问题,虽然这样请求能分别请求到两个tomcat上,如果是一般不需身份校检的或什么认证的方法尚可,但如果出现这类情况:

我们在tomcat1上进行了登录,这时用户session当然是存在tomcat1上的,而这时进入个人中心的请求请求到tomcat2上了,这时就会出现问题了。tomcat2会告诉你还未登录,这显然不是我们想看到的。

这就涉及到session共享了,如何让两个服务器上的session共用。我这里放到下次再说,作为码农比较忙,可能要过个好几天。另外我将这次的demo源码上传了,下次还要用,nginx配置就不传了,大家自己多动手试验。

附下载地址:http://download.csdn.net/detail/zhrxidian/9517266

【转载】tomcat+nginx+redis实现均衡负载、session共享(一)的更多相关文章

  1. tomcat+nginx+redis实现均衡负载、session共享(一)

    在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...

  2. (转)tomcat+nginx+redis实现均衡负载、session共享(一)

    在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...

  3. tomcat+nginx+redis实现均衡负载、session共享(二)

    今天我们接着说上次还没完成session共享的部分,还没看过上一篇的朋友可以先看下上次内容,http://www.cnblogs.com/zhrxidian/p/5432886.html. 1.red ...

  4. tomcat+nginx+redis实现均衡负载以及session共享

    1.redis简介及下载安装 作为这次的主角,相信大家对redis应该都一定印象,redis是一款开源的高性能key-value数据库,拥有丰富的键值储存类型,并提供多种语言的API. 与一般数据库不 ...

  5. 【转载】tomcat+nginx+redis实现均衡负载、session共享(二)

    今天我们接着说上次还没完成session共享的部分,还没看过上一篇的朋友可以先看下上次内容,http://www.cnblogs.com/zhrxidian/p/5432886.html. 1.red ...

  6. 转 tomcat+nginx+redis实现均衡负载、session共享(二)

    http://www.cnblogs.com/zhrxidian/p/5491285.html http://www.cnblogs.com/zhrxidian/p/5432886.html

  7. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  8. keepalived+nginx+tomcat+redis实现负载均衡和session共享(原创)

    keepalived+nginx+tomcat+redis实现负载均衡和session共享 直接上链接,码了一天,就不再重写了,希望能帮到大家,有问题欢迎留言交流.

  9. haproxy+tomcat实现负载均衡以及session共享(linux centos7环境)

    一.安装HAProxy 1.进入home目录,下载最新haproxy安装包. cd /home wget http://haproxy.1wt.eu/download/1.4/src/haproxy- ...

随机推荐

  1. linux内核中默认logo的具体位置

    /driver/logo/... 以下这个目录下对应的是logo的设置

  2. [mysql]一次主从数据不一致的问题解决过程

    之前一篇: 主从更换ip之后重新建立同步 情况时这样的 昨天晚上主动2个机器都迁移了,然后今天才把主动重新连接上,但是从库的偏移量是从今天当前时刻开始的,也就是说虽然现在主动看似正常,其实是少了昨天的 ...

  3. Android读取网络图片到本地的简约的实现

    今天在网上看到了一个关于读取网络文件的小视频,觉得不错,拿来与大家分享 思路 具体的思路比较的简单,但是思想非常的单纯.那就是输入一个网址,点击按钮,将从网络上获取的一张图片显示到一个ImageVie ...

  4. Sublime Text 3 使用MarkDown编写带预览的文本

    看到别人使用一个叫Markdown的标记语言来完成编码,心里就有点小激动,毕竟简短的几个符号,就可以写出如此精美的界面,实在是让人感到心旷神怡啊.于是我就在网上搜索了一些相关项的设置,于是便有了下面的 ...

  5. 精通CSS+DIV网页样式与布局--制作实用菜单

    在上篇博文中,小编中主要的简单总结了一下CSS中关于如何设置页面和浏览器元素,今天小编继续将来介绍CSS的相关基础知识,这篇博文,小编主要简单的总结一下在CSS中如何制作网页中的菜单,这部分的内容包括 ...

  6. 高通QSD MSM APQ区别

    高通msm是Mobile Station Modem 的缩写,即移动基带工作站,是指带有基带芯片的移动处理器,实际就是基带内置的手机处理器(soc)系列. qsd是qualcomm snapdrago ...

  7. C++实现最小堆及插入,调整顺序,删除堆顶元素的操作

    上次用Java实现了最大堆的封装,这次就来写一下最小堆的实现吧 插入函数的思路: 向堆中插入元素有两种情况,一种是堆为空,那么就让插入值作为根节点即可:另一种是堆不为空,那么此时就要进行判断当前节点与 ...

  8. Java将网络地址对应的图片转成本地的图片

     只知道浏览器使用的是HTTP协议,那么如何将网络资源使用JavaHTTP下载下来呢! 这只是一个非常简单的小示例,只是不想每次碰到关于此方面的内容忘了就无从下手! 示例创建HttpURLConn ...

  9. Python学习笔记 - ifelifelse-forin-while

    if elif else #!/usr/bin/env python3 # -*- coding: utf-8 -*- age = 20 if age >= 18: print('your ag ...

  10. Python学习笔记 - list和tuple

    demo 1 #!/usr/bin/env python3 # -*- coding: utf-8 -*- >>> classmates = ['Michael', 'Bob', ' ...