一些收藏

Nginx技术专题(1)基于Nginx负载均衡机制实现负载均衡介

2022-02-13  本文已影响0人  码界西柚

前言介绍

负载均衡是什么?

负载均衡策略

实现负载均衡的方式有很多,下面将列出几种方式,并对比优劣:

  1. 通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但是它们是比较昂贵的。
  2. 通过软件来进行解决的,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略。

硬件层面

通过F5实现负载均衡,性能优异,F5的底层是在芯片层面做了优化,这样就使得它的性能不依赖主机操作系统的处理能力,但是F5价格高昂,一般小公司用不起软件层面可以通过LVS来实现负载均衡,这是一款中国人开发的软件。

软件层面

性能受到主机运算能力的制约除了LVS之外,还可以通过Nginx实现负载均衡,为了实现高可用需要和keepalived配合使用,Nginx实现负载均衡也是本文讲解的重点还可以在DNS层面做负载均衡,在域名解析的时候解析到不同的服务器上。

优点是配置简单,非常容易实现,缺点是没有检测机制,不够均衡,容错能力比较差

硬件层面可以通过F5实现负载均衡,性能优异。F5的底层是在芯片层面做了优化,这样就使得它的性能不依赖主机操作系统的处理能力,但是F5价格高昂,一般小公司用不起
软件层面可以通过LVS来实现负载均衡,这是一款中国人开发的软件。因为是软件层面的负载均衡,性能受到主机运算能力的制约
除了LVS之外,还可以通过Nginx实现负载均衡,为了实现高可用需要和keepalived配合使用,Nginx实现负载均衡也是本文讲解的重点
还可以在DNS层面做负载均衡,在域名解析的时候解析到不同的服务器上。优点是配置简单,非常容易实现,缺点是没有检测机制,不够均衡,容错能力比较差

Nginx是什么?

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·西索夫)所开发,供俄国大型的入口网站及搜索引擎Rambler(漫步者)(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。

优点

  1. 可运行linux,并有 Windows移植版。
  2. 在高连接并发的情况下,Nginx是Apache服务器不错的替代品Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000个并发连接数的响应

负载均衡的功能

我们想要使用Nginx那么就必须满足上面的四个条件.
我们配置负载均衡的目的是在于当用户访问我们的服务器的时候, 首先会通过 Nginx服务器来决定转发到哪个Tomcat服务器上去给用户提供服务, 当然这个概率是我们通过权重来配置的. 经过Nginx指派之后, 我们就可以处理高并发的访问了, 这里就能达到负载均衡的目的.

Nginx如何实现负载均衡

Nginx的负载均衡是通过upstream来实现的,在upstream中指定若干个 server,格式如下:

image

myserver就是通过 upstream 定义的一组负载均衡模板,其中:

image

在配置完upstream后,还要让客户端过来的请求反向代理到myserver,格式如下:


image

完成了负载均衡的配置,但是在实际需求中除了上面的设置外,还会增加一些额外设置:

负载均衡策略设置请求上游服务器携带请求头信息upstream模块中其他参数设置

Nginx的负载均衡策略有5种方式:
image

除以上5种,还有一种:least-connected — 下一个请求被分配到拥有最少活动连接数的服务器。

编辑nginx配置文件(例中为/usr/local/ngnix/conf/nginx.conf),找到http结点,

配置案例
http {
    upstream myapp1 {
        server 192.168.1.103:8080;
        server 192.168.1.104:8080;
   }
   server {
        listen 80;
        server_name  localhost;
        location /webautotest/ {
            proxy_buffering off;
            proxy_pass http://myapp1;
        }
    }
}
重新加载配置文件
[root@localhost nginx-1.10.0]# /usr/local/ngnix/sbin/nginx -s reload
默认的负载均衡配置
http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://myapp1;
        }
    }
}
最少连接负载均衡
配置示例:
upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
}
会话持久性

注意,round-robin或least-connected负载均衡下,每个后续的客户端可能被分发至不同服务器,不保证相同客户端的请求总是被发送到相同的服务器。

如果有必要把客户端绑定至特定服务器,则可使用ip-hash负载均衡机制。

ip-hash机制

ip-hash机制下,客户端ip地址被用作hash key来判断客户端请求应该发送到哪个服务器,这种方法保证了来自相同客户端的请求总是发送到相同服务器(如果服务器可用的话)

upstream myapp1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

负载均衡权重

可通过配置服务器权重来影响负载均衡机制。上面的例子中,都未配置服务器权重,这意味着所有服务器都拥有相同的权重。
针对round-robin负载机制,权重意味着更多或更少的请求传送至服务器---假设有足够的请求,且按统一方式处理请求,且足够快完成请求处理。

配置示例:
  upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
}

上例配置中,每发送至服务器实例的5个新的请求中,有3个发送到srv1,1个发送到srv2,另1个发送到srv3。

注:当前版本似乎只实现了round-robin机制下的权重设置

健康检测

Nginx负载均衡配置项介绍

下面我们将介绍一下proxy模块的参数:

image

各个参数介绍:

image

设置proxy_connect_timeout 为2秒,缩短超时时间,使其不至于太慢。

参考链接:

上一篇 下一篇

猜你喜欢

热点阅读