Nginx实现tomcat集群进行负载均衡

一、背景

  随着业务量和用户数量的激增,单一的tomcat部署应用已经无法满足性能需求,而且对于每次发布项目期间服务不可用的问题也凸显,既然出现了这个问题,那么我们本文就借助nginx来完美的解决这个问题。

二、基本概念

1.说明:关于Nginx的概念和介绍以及Centos7下安装步骤,请移步:Centos7安装Nginx实战

2.正向代理和反向代理

 假设我们给定客户端A、代理服务器B、以及最终服务器C

 正向代理:代理服务器B来代替客户端A来访问最终服务器C并将最终结果转发给客户端A,站在客户端A的角度上,代理服务器代理的是客户端A,这个过程是正向的,所以叫正向代理。(正向代理需要客户端A设置代理服务器的ip和提供代理服务的端口)

 反向代理:客户端A直接访问代理服务器B,由代理服务器B来决定将请求转发到哪个最终服务器进行真正处理,并将最终服务器的处理结果转发给客户端A,也就是代理服务器代理的是最终服务器C,站在客户端A的角度上,这个过程是反向的,所以叫反向代理。(反向代理不需要客户端A进行任何设置)

 关于正向代理和反向代理,这里有一篇不错的文章:图解正向代理、反向代理、透明代理

3.负载均衡(Load Balance)

 所谓负载均衡就是将一批可以提供相同服务的服务器组成一个服务器集合,每台服务器都可以单独向外部提供相同的服务,通过某种负载分担技术,按照用户指定的负载均衡策略将外部请求分配到服务器集合中的具体的某一台来进行处理的技术。以此来提高并发、增加吞吐量、提高处理能力、增加服务可用性。

三、实现步骤

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 tomcat.hafiz.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
proxy_pass http://tomcats;
index index.html index.htm;
}
}
}

3.说明:其中标红的地方是最关键的地方,upstream指定了集群服务的各个服务的地址,可以使用weight来增加某个服务器的权重,也就意味着请求会被多转发到这个服务器上。server_name用来指定暴露给用户的地址,用户访问这个地址,这个地址再将请求按照策略进行转发。

4.有了集群提供负载均衡,如果是web项目就涉及到sesstion在集群*享的问题,要解决这个问题,请移步:Shiro+Redis实现tomcat集群共享session

四、总结

  通过本文,我们就清楚了什么叫正向代理和反向代理以及负载均衡,还有如何使用nginx来完成负载均衡。以前感觉部署集群提供负载均衡很牛,现在看来其实也没啥,挺简单的。

上一篇:Windows7系统中nginx与IIS服务器搭建集群实现负载均衡


下一篇:Python小代码_10_判断是否为素数