在项目运营时,咱们都会遇到一个问题,项目须要更新时,咱们可能需先暂时关闭下服务器来更新。但这可能会出现一些情况:html
1.用户还在操做,被强迫终止了(咱们能够看日志等没人操做的时候更新,但总可能会有万一)nginx
2.不知道的用户可能会想网站是否是被攻击了,下降了对网站的信任程度,从而致使失去部分潜在客户,这点尤为对金融互联网公司不利。windows
在查了一些资料后,决定采用Tomcat + Nginx + Redis来实现负载均衡和session共享。下面记录下个人实践过程,若有错误不足之处欢迎大神指点,不喜勿喷。浏览器
1.Nginx简单介绍及开启缓存
Nginx是一款轻量级兼备高性能的Http和反向代理服务器。所谓反向代理就是指在用户发起访问请求,由代理服务器接收,而后将请求转发给正式服务器,而且将正式服务器处理完的数据返回给客户端,此时代理服务器就表现为一个服务器。这么作看起来多通过了一步,稍显麻烦,但实则是好处多多,在下面的demo中我会将其体现出来。tomcat
首先咱们去Nginx官网下载个Nginx,我这是在本身电脑上,因此固然下载的是windows版本的。下载完成后直接放在某个盘中便可,不须要安装。接下去咱们打开cmd,进入nginx的目录下,输入start nginx。安全
咱们能够看到一个窗口一闪而过,这样nginx就已经被开启了,咱们在任务管理器中能够找到它的进程。服务器
如今咱们在浏览器中输入localhost。能够看到出现一个页面,虽然简陋了点,但这确确实实就是nginx的欢迎页面,就相似tomcat刚启动完成的locahost:8080的欢迎页面。session
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实现负载均衡
负载均衡便是代理服务器将接收的请求均衡的分发到各服务器中。
负载均衡的优点在访问量少或并发小的时候可能并不明显,且不说淘宝双十一、铁道部抢票这种级别的访问量、高并发,就是通常网站的抢购活动时,也会给服务器形成很大压力,可能会形成服务器崩溃。而负载均衡能够很明显的减小甚至消除这种状况的出现,下面咱们说说实现方法。
首先咱们再开启一个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配置就不传了,你们本身多动手试验。