Nginx+Tomcat实现Web服务器的负载均衡

拓扑环境:

服务器名称

系统版本

预装软件

IP地址

Nginx服务器

CentOS 7 最小安装

Nginx

192.168.22.227

Web服务器A

CentOS 7 最小安装

tomcat+jdk

192.168.22.229

Web服务器B

CentOS 7 最小安装

tomcat+jdk

192.168.22.230

服务器采用CentOS 7 最小安装模式,完全模拟生成环境,一台Nginx服务器,两台Tomcat服务器,实现一个简化的反向代理和负载均衡服务。

架构图:

前置条件:

Mysql+PHP配置实现:http://www.okay686.cn/499.html Tomcat安装见:http://www.okay686.cn/628.html Nginx安装配置见:http://www.okay686.cn/507.html

编写测试静态页

在229服务器编写 Login.html:

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=gb2312" />
    </head>
    <body>
        <h1>您正在访问:192.168.22.229</h1>
    </body>
</html>

在Tomcat的webapps目录下,新建一个文件夹drp,并将login.html放到drp文件夹里。

 完整目录:/usr/local/tomcat8/webapps/drp 

同样的在230服务器上也新建文件:login.html,并上传到drp目录下。

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=gb2312" />
    </head>
    <body>
        <h1>您正在访问:192.168.22.230</h1>
    </body>
</html>

编写完成后,启动229,230服务器上的Tomcat,并在windows上测试是否启动成功

分别输入url:

http://192.168.22.229:8080/drp/login.html

http://192.168.22.230:8080/drp/login.html

测试是否能够访问。

修改Nginx核心配置文件nginx.conf

下面配置文件中的几个关键点:

(1)进程数与每个进程的最大连接数

#工作进程个数,一般跟服务器cpu核数相等,或者核数的两倍
worker_processes 2;

#单个进程最大连接数
events{
    worker_connections 1024; 
}

① nginx进程数,建议设置为和服务器cup核数相等,或者是核数的两倍

② 单个进程最大连接数,该服务器的最大连接数=连接数*进程数; 服务器支持最大并发数=(连接数*进程数) /2 ,因为反向代理是双向的。

(2)Nginx的基本配置

#nginx基本配置
server{
    listen 8088;    #端口号
    server_name 192.168.22.227; #服务名
}

① 监听端口一般都为http端口:80;可以修改为其他,这里修改为8088。

② server_name :默认为localhost ,这里修改为服务器ip地址。

(3)负载均衡列表基本配置

    #服务器集群
    upstream mycluster{
        #这里添加的是上面启动好的两台Tomcat服务器
         server 192.168.22.229:8080 weight=1;
         server 192.168.22.230:8080 weight=1;
    }

location /{
        #将访问请求转向至服务器集群,mycluster和上面upstream mycluster 对应
        proxy_pass http://mycluster;
        # 真实的客户端IP
        proxy_set_header   X-Real-IP        $remote_addr; 
        # 请求头中Host信息
        proxy_set_header   Host             $host; 
        # 代理路由信息,此处取IP有安全隐患
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        # 真实的用户访问协议
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

① location / {}:负载均衡访问的请求,可以添加筛选,假如我们要对所有的jsp后缀的文件进行负载均衡时,可以这样写:location ~ .*.jsp$ {}

② proxy_pass:请求转向自定义的服务器列表,这里我们将请求都转向标识为http://mycluster 的负载均衡服务器列表;

③ 在负载均衡服务器列表的配置中,Server指令:指定服务器的ip地址,weight是权重,可以根据机器配置定义权重(如果某台服务器的硬件配置十分好,可以处理更多的请求,那么可以为其设置一个比较高的weight;而有一台的服务器的硬件配置比较差,那么可以将前一台的weight配置为weight=2,后一台差的配置为weight=1)。weigth参数表示权值,权值越高被访问到的几率越大;

(四)完整的配置文件示例

user nobody;
#工作进程个数,一般跟服务器cpu核数相等,或者核数的两倍
worker_processes 2;

#单个进程最大连接数
events{
    worker_connections 1024; 
}

http{

    keepalive_timeout 65;
    gzip on;
    #服务器集群
    upstream mycluster{
         #集群有几台服务器即可配置几台,weight表示权重,权重越大被访问到的几率越大
        #这里添加的是上面启动好的两台Tomcat服务器
         server 192.168.22.229:8080 weight=1;
         server 192.168.22.230:8080 weight=1;
    }

    #nginx基本配置
    server{
        listen 8088;    #端口号
        server_name 192.168.22.227; #服务名
        location /{
            #将访问请求转向至服务器集群,mycluster和上面upstream mycluster 对应
            proxy_pass http://mycluster;
            # 真实的客户端IP
            proxy_set_header   X-Real-IP        $remote_addr; 
            # 请求头中Host信息
            proxy_set_header   Host             $host; 
            # 代理路由信息,此处取IP有安全隐患
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            # 真实的用户访问协议
            proxy_set_header   X-Forwarded-Proto $scheme;
        }

        error_page   500 502 503 504  /50x.html;  
        location = /50x.html {  
            root   html;  
        }  

    }
}

最基本的Nginx配置差不多就是上面这些内容,当然仅仅是最基础的配置。

在浏览器中进行负载均衡测试

在浏览器中输入 : http://192.168.22.227:8088/drp/login.html

不断刷新浏览器,访问的地址一直在变化,可以看到负载均衡的效果已经实现。

小结:

这篇文章通过Nginx反向代理实现了Tomcat服务器集群的负载均衡效果。从这个Demo中,我们可以简单地感受到反向代理为我们所做的事情,并体会到什么是负载均衡。当然这次只是简单的使用了一下Nginx,做了一些很简单的配置,后续会做一些针对负载均衡的优化配置,还有就是Session共享的问题,以及Nginx高可用的问题,这些知识后续博客会介绍到,万丈高楼平地起,一步一步来。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏accesshub

腾讯云和AWS VPC互通配置

此处仅描述了部署在腾讯云的网关和控制台建立连接的过程,但同样适用于腾讯云,AWS,百度云,华为云。

26630
来自专栏姚姝娜的专栏

关于 Git 的那些事

本篇文章主要讲了下 Git 的一些基本的概念以及如果使用 git log 的命令来进行一段时间段的代码量统计,其中还可以统计不同作者修改的代码量,其中关于 gi...

50910
来自专栏云计算教程系列

如何将PostgreSQL数据目录移动到Ubuntu 18.04上的新位置

数据库随着时间的推移而增长,有时会超出原始文件系统的空间。当它们与操作系统的其余部分位于同一分区时,这也可能导致I / O争用。

19100
来自专栏ionic3+

【开发指南】(一)Ionic3开发环境配置常规ionic的环境搭建如下:

工欲善其事,必先利其器,搭好环境是开发的前提,有时环境没弄好,不时报错往往很扎心。

12230
来自专栏java相关

Redis学习笔记01---配置文件

13440
来自专栏GopherCoder

『Ansible 上手指南』

18730
来自专栏IT笔记

Tomcat优化之配置线程池

简介 线程池作为提高程序处理数据能力的一种方案,应用非常广泛。大量的服务器都或多或少的使用到了线程池技术,不管是用Java还是C++实现,线程池都有如下的特点:...

36580
来自专栏程序员的SOD蜜

分布式系统的消息&服务模式简单总结

分布式系统的消息&服务模式简单总结 在一个分布式系统中,有各种消息的处理,有各种服务模式,有同步异步,有高并发问题甚至应对高并发问题的Actor编程模型,本文尝...

58470
来自专栏同步博客

Git服务器搭建

  Git是目前世界使用最广泛的分布式版本控制系统,它是由林纳斯·托瓦兹(Linus Torvalds)创作,最初的目的是为了更好地管理Linux内核开发而设计...

44130
来自专栏性能与架构

负载均衡策略

1. HTTP重定向 当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,然后浏览器再继续请求这个新url,...

42870

扫码关注云+社区

领取腾讯云代金券