社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

Nginx搭配Tomcat实现负载均衡

程序员大咖 • 1 年前 • 102 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨非科班的科班
来源丨黎杜(ID:LDCldc123095)

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>
<html>
    <head>
        <meta charset="utf-8">
        <title>title>
    head>
    <body>
        Hello server1!
    body>
html>

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

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页面。

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/152436
 
102 次点击