Nginx实现tomcat集群进行负载均衡
Posted 卫旗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx实现tomcat集群进行负载均衡相关的知识,希望对你有一定的参考价值。
一、为什么要用nginx
1、热部署
我个人觉得这个很不错。在master管理进程与worker工作进程的分离设计,使的Nginx具有热部署的功能,那么在7×24小时不间断服务的前提下,升级Nginx的可执行文件。也可以在不停止服务的情况下修改配置文件,更换日志文件等功能。
2、可以高并发连接
这是一个很重要的一个特性!在这一个 互联网 快速发展, 互联网 用户数量不断增加,一些大公司、网站都需要面对高并发请求,如果有一个能够在峰值顶住10万以上并发请求的Server,肯定会得到大家的青睐。理论上,Nginx支持的并发连接上限取决于你的内存,10万远未封顶。
3、低的内存消耗
在一般的情况下,10000个非活跃的HTTP Keep-Alive 连接在Nginx中仅消耗2.5M的内存,这也是Nginx支持高并发连接的基础。
4、处理响应请求很快
在正常的情况下,单次请求会得到更快的响应。在高峰期,Nginx可以比其他的Web服务器更快的响应请求。
5、具有很高的可靠性
Nginx是一个高可靠性的Web服务器,这也是我们为什么选择Nginx的基本条件,现在很多的网站都在使用Nginx,足以说明Nginx的可靠性。高可靠性来自其核心框架代码的优秀设计、模块设计的简单性;并且这些模块都非常的稳定。
二、代理和反向代理到底有什么区别
代理服务器通常分为两类,即转发代理(forward proxy)服务器和反向代理(reverse proxy)服务器。转发代理服务器又通常简称为代理服务器,我们常提到的代理服务器就指的是转发代理服务器。
转发代理服务器
普通的转发代理服务器是客户端与原始服务器之间的一个中间服务器。为了从原始服务器获取内容,客户端发送请求到代理服务器,然后代理服务器从原始服务器中获取内容再返回给客户端。客户端必须专门地配置转发代理来访问其他站点,如在浏览器中配置代理服务器地址及端口号等。
转发代理服务器的一个典型应用就是为处于防火墙后的内部客户端提供访问外部Internet网,比如校园网用户通过代理访问国外网站,公司内网用户通过公司的统一代理访问外部Internet网站等。转发代理服务器也能够使用缓存来缓解原始服务器负载,提供响应速度。
反向代理服务器
而反向代理服务器则相反,在客户端来看它就像一个普通的Web服务器。客户端不要做任何特殊的配置。客户端发送普通的请求来获取反向代理所属空间的内容。反向代理决定将这些请求发往何处,然后就好像它本身就是原始服务器一样将请求内容返回。
反向代理服务器的一个典型应用就是为处于防火墙后的服务器提供外部Internet用户的访问。反向代理能够用于在多个后端服务器提供负载均衡,或者为较慢的后端服务器提供缓存。此外,反向代理还能够简单地将多个服务器映射到同一个URL空间。
两者区别
两者的相同点在于都是用户和服务器之间的中介,完成用户请求和结果的转发。主要的不同在于:
1.转发代理的内部是客户端,而反向代理的内部是服务器。即内网的客户端通过转发代理服务器访问外部网络,而外部的用户通过反向代理访问内部的服务器。
2.转发代理通常接受客户端发送的任何请求,而反向代理通常只接受到指定服务器的请求。如校园网内部用户可以通过转发代理访问国外的任何站点(如果不加限制的话),而只有特定的请求才发往反向代理,然后又反向代理发往内部服务器。
三、实现步骤
1.首先将项目部署在不同的服务器上,并记录下服务的IP地址和端口
如:tomcat A : 192.168.85.131:8080
tomcat B : 192.168.85.131:8081
2.在nginx的config文件nginx.conf中进行如下设置 #user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream tomcats{
# server 192.168.85.131:8080 weight=5;
server 192.168.85.131:8080;
server 192.168.85.131:8081;
}
server {
listen 80;
server_name tomcattest;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcats; #代理路径
proxy_connect_timeout 3; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 30; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 30; #连接成功后,后端服务器响应时间(代理接收超时)
index index.html index.htm;
}
}
}
3、说明:其中标红的地方是最关键的地方,upstream指定了集群服务的各个服务的地址,可以使用weight来增加某个服务器的权重,也就意味着请求会被多转发到这个服务器上。server_name用来指定暴露给用户的地址,用户访问这个地址,这个地址再将请求按照策略进行转发。
4、有了集群提供负载均衡,如果是web项目就涉及到session在集群中共享的问题。
四、Nginx常用命令
/usr/local/nginx/sbin/nginx # 启动Nginx /usr/local/nginx/sbin/nginx -t # 测试配置文件是否有错误 /usr/local/nginx/sbin/nginx -v # 查看Nginx版本 /usr/local/nginx/sbin/nginx -V # 查看Nginx版本和编译安装时的编译参数 /usr/local/nginx/sbin/nginx -s stop # 强制停止Nginx服务 /usr/local/nginx/sbin/nginx -s quit # 优雅地停止Nginx服务(即处理完所有请求后再停止服务) /usr/local/nginx/sbin/nginx -s reload # 重新加载Nginx配置文件,然后以优雅的方式重启Nginx
以上是关于Nginx实现tomcat集群进行负载均衡的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat之Nginx+Tomcat实现负载均衡动静分离集群部署