Nginx搭配Tomcat实现负载均衡

源码共读

共 4588字,需浏览 10分钟

 ·

2020-12-26 07:46

Python实战社群

Java实战社群

长按识别下方二维码,按需求添加

扫码关注添加客服

进Python社群▲

扫码关注添加客服

进Java社群


作者丨非科班的科班
来源丨黎杜编程

Nginx简介

Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器,中国互联网大厂使用nginx网站有:百度、京东、新浪、网易、腾讯、淘宝等。

什么是反向代理呢?
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器。

Nginx 的负载均衡算法:

(1)weight 轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx 会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。

这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率。权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

(2)ip_hash:每个请求按照发起客户端的 ip 的 hash 结果进行匹配,这样的算法下一个固定 ip 地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下 Session 共享的问题。

(3)fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配。

响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少,它是结合了前两者的优点的一种调度算法。但是需要注意的是 Nginx 默认不支持 fair 算法,如果要使用这种调度算法,请安装 upstream_fair 模块。

(4)url_hash:按照访问的 URL 的 hash 结果分配请求,每个请求的 URL 会指向后端固定的某个服务器,可以在 Nginx 作为静态服务器的情况下提高缓存效率。同样要注意 Nginx 默认不支持这种调度算法,要使用的话需要安装 Nginx 的 hash 软件包。

安装Nginx

下载Nginx安装包

Nginx 官网(https://nginx.org)
本次选择的是nginx-1.6.3.tar.gz版本,安装环境是centos7。
然后把下载好的安装包通过SecureCRT工具上传至Centos7中或者使用wget命令下载安装包

#下载nginx-1.6.3.tar.gz
wget -c https://nginx.org/download/nginx-1.6.3.tar.gz

若是出现下面的提示

-bash: wget: command not found

则执行

yum install wget

安装Nginx的前提环境

1)安装 gcc 环境

yum install gcc-c++

2) 安装 PCRE 依赖库

yum install -y pcre pcre-devel

3)安装 zlib 依赖库

yum install -y zlib zlib-devel

4) 安装 OpenSSL 安全套接字层密码库

yum install -y openssl openssl-devel

5)解压 Nginx

#解压文件夹
tar -zxvf nginx-1.6.3.tar.gz

6)执行配置命令

cd进入文件夹
cd nginx-1.6.3
#执行配置命令
./configure

出现如下图:表示成功


7)执行编译安装命令

make install

8)查找安装路径

whereis nginx

结果如下:


9)启动服务

进入 nginx 的目录

cd /usr/local/nginx/sbin/

执行如下命令

#启动
./nginx

#
停止,此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程
./nginx -s stop

#
停止,此方式停止步骤是待nginx进程处理任务完毕进行停止
./nginx -s quit

#
重新加载配置文件,Nginx服务不会中断
./nginx -s reload

10)修改配置文件

比如,修改端口号,默认端口号为80,咱们这里改成83;

进入配置文件夹

cd /usr/local/nginx/conf

备份原始配置文件

cp nginx.conf nginx.conf.back

编辑nginx.conf配置文件

vim nginx.conf

找到server中的listen,修改端口号为83


启动服务

#要进入sbin/下才能执行
./nginx

查看 nginx 进程

ps -ef|grep nginx

到此,nginx 安装基本完成,直接在浏览器上访问服务器地址:虚拟机的ip:83,就可以进入页面

安装Tomcat

tomcat 官网(http://tomcat.apache.org/)
本次选择的是最新版本,本次安装环境是centos7。

我是直接用wget命令下载

解压文件夹

tar -zxvf apache-tomcat-8.5.40.tar.gz

重新命名

mv apache-tomcat-8.5.40 tomcat-1

同样的,再次解压安装包,命名为tomcat-2

mv apache-tomcat-8.5.40 tomcat-2

1)修改 tomcat 端口号

将 tomcat-1 的 http 端口设置为8080,将 tomcat-2 的 http 端口设置为8081。

进入tomcat的conf文件夹,修改server.xml

vim server.xml

修改SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3端口,使其错开,避免重启的时候,报端口被占用问题

tomcat-1 的SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3设置如下:


<Server port="9005" shutdown="SHUTDOWN">
...

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="9443" />



<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
...
Server>

tomcat-2 的SHUTDOWN、HTTP/1.1、redirectPort、AJP/1.3设置如下:


<Server port="10005" shutdown="SHUTDOWN">
...

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="10443" />



<Connector port="10009" protocol="AJP/1.3" redirectPort="10443" />
...
Server>

2)启动服务

分别进入 tomcat-1 、 tomcat-2 的bin文件夹,执行脚本,启动服务

sh startup.sh

查看服务是否启动成功

ps -ef|grep tomcat

可以直接在浏览器上分别输入ip:8080、ip:8081进行访问了,结果如下:


3)编写Html,为了便于测试,我们创建一个html格式的页面,进入tomcat-1的webapps文件夹,删除ROOT文件夹里面的东西,创建index.html文件,内容如下:


<html>
    <head>
        <meta charset="utf-8">
        <title>title>
    head>
    <body>
        Hello server1!
    body>
html>

4)进入tomcat-2的webapps文件夹,删除ROOT文件夹里面的东西,创建index.html文件;


<html>
    <head>
        <meta charset="utf-8">
        <title>title>
    head>
    <body>
        Hello server2!
    body>
html>

5)测试,创建好了之后,分别在浏览器上访问ip:8080、ip:8081。结果如下:


Nginx负载均衡配置

1)进入 Nginx 的配置文件夹

cd /usr/local/nginx/conf

2)编辑nginx.conf配置文件

vim nginx.conf

3)新增upstream集群配置点,配置如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {  
    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    gzip  on;

     #服务器的集群(这个就是我们要配置的地方)
     #test.com:服务器集群名字,自定义
    upstream  test.com {
        #服务器配置   weight是权重的意思,权重越大,分配的概率越大。
        #127.0.0.1:8080、127.0.0.1:8081对应tomcat服务器地址
        server    127.0.0.1:8080  weight=1;
        server    127.0.0.1:8081  weight=2;
    }

    server {  
        listen       83;
        server_name  localhost;

    location / {
    ·        #配置反向代理地址
            proxy_pass http://test.com;
            proxy_redirect default;
        }


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

参数说明:

  • worker_processes:工作进程的个数,一般与计算机的cpu核数一致

  • worker_connections:单个进程最大连接数(最大连接数=连接数*进程数)

  • include:文件扩展名与文件类型映射表

  • default_type:默认文件类型

  • sendfile :开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为
    on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。

  • keepalive_timeout:长连接超时时间,单位是秒

  • upstream:服务器的集群配置点

4)配置好之后,进入/usr/local/nginx/sbin/ 文件夹,重新刷新配置文件

./nginx -s reload

5)测试,访问Nginx服务器所在ip:83地址,多次刷新,看看效果:


多刷几次

搭建失败的原因:
在搭建的过程很多人都可能搭建失败,访问不了Nginx的页面,最主要的原因还是防火墙的原因,当值访问被拦截,访问不了Nginx页面。


程序员专栏
 扫码关注填加客服 
长按识别下方二维码进群

近期精彩内容推荐:  

 为何说IT科技公司应该留住35岁员工?

 工友们!大家好,今天你摸鱼了吗?

 缓存穿透,雪崩,击穿以及解决方案分析

 图文详解:如何给女朋友解释什么是微服务?




在看点这里好文分享给更多人↓↓

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报