Nginx负载均衡

分布式计算第一次作业实验报告
本次实验重现了课上演示的基于Nginx的负载均衡实验,学习了Nginx负载均衡策略的原理,相关配置,并进行了实机操作。

1 Nginx安装
环境: Ubuntu 20.04
这里采用自己编译的方式安装Nginx,具体步骤如下:

  1. 从官网(http://nginx.org/en/download.html)下载相应压缩包nginx-1.20.2 .tar.gz,使用tar -xvf命令解压放到 /usr/local目录下。

  2. 进入解压后目录,运行如下命令:
    ./configure --prefix=/usr/local/nginx
    Make&&make install

    如果出现报错,需提前安装zlib和pcre
    sudo apt-get install libpcre3 libpcre3-dev
    sudo apt-get install zlib1g-dev
    如果需要用到加密传输,还需安装OpenSSL
    sudo apt-get install openssl libssl-dev

  3. 进入nginx/sbin目录,执行./nginx即可启动nginx.

  4. 完成服务端程序
    要完成负载均衡测试需要有服务端程序做响应,这里用go语言写了一个简单的服务端程序用于测试,代码如下:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/hello", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "the first HelloWord",
        })
    })
    r.Run("127.0.0.1:8081")
}

只需修改响应内容和监听端口即可启动多个服务端程序,本次实验中分别监听8081~8084端口。

  1. 负载均衡
    负载均衡意为将网络请求或其他形式负载分摊到不同机器上,减轻单台机器压力。Nginx可以实现负载均衡功能,这需要修改位于nginx/conf目录下的nginx.conf文件。
    首先,需要在 http{ server { …}}标签中做如下修改:
    location / {
    proxy_pass http://test; //注意之后的upstream也要命名为test
    root html;
    index index.html index.htm;
    }
    增添的proxy_pass表示将请求转发到test所代理的主机,接下来需要配置相应负载均衡策略。

  2. 轮询(默认)
    每个请求按时间顺序逐一分配到列表中的后端服务器,如果后端服务器宕机则会被自动剔除,这是Nginx默认的负载均衡策略。
    Nginx.conf的 http{ } 中添加配置如下:
    upstream test{
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    server 127.0.0.1:8084;
    }
    修改配置后需要用如下命令重启nginx: ./nginx -s reload
    测试结果:

  3. 指定权重
    指定相应主机的权重,权重越大优先级越高
    upstream test{
    server 127.0.0.1:8081 weight=5;
    server 127.0.0.1:8082 weight=8;
    server 127.0.0.1:8083 weight=10;
    server 127.0.0.1:8084 weight=10;
    }

测试结果:
3和4明显优先级高。

  1. ip_hash
    每个请求按访问的ip分配主机,也就是说来自同一个ip的请求会分配到同一个后端主机,这种方式也是集群环境下session存储的问题的一种解决办法,相同ip请求只会到达同一主机,session不会丢失。
    upstream test{
    ip_hash;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    server 127.0.0.1:8084;
    }
    本机测试:
    始终访问机器1

另一台机器测试(windows宿主机):
始终访问机器2

  1. fair
    根据后端服务器响应时间来决定,该策略需要安装第三方模块才能运行,安装方法:
  2. 停止Nginx ./nginx -s quit
  3. 进入nginx-1.20.1目录执行 以下命令
    ./configure --with-http_ssl_module --add-module=/usr/local/nginx_module/nginx-upstream-fair
    3.修改配置文件
    upstream test{
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
    server 127.0.0.1:8083;
    server 127.0.0.1:8084;
    fair;
    }

4.启动nginx

测试结果:
后端只有一台主机,和轮询结果一样

4 实验总结
通过本次实验了解配置了Nginx反向代理和负载均衡的功能,学到了一种有效分散服务端压力的方法。

你可能感兴趣的:(nginx,负载均衡,运维)