分布式计算第一次作业实验报告
本次实验重现了课上演示的基于Nginx的负载均衡实验,学习了Nginx负载均衡策略的原理,相关配置,并进行了实机操作。
1 Nginx安装
环境: Ubuntu 20.04
这里采用自己编译的方式安装Nginx,具体步骤如下:
-
从官网(http://nginx.org/en/download.html)下载相应压缩包nginx-1.20.2 .tar.gz,使用tar -xvf命令解压放到 /usr/local目录下。
-
进入解压后目录,运行如下命令:
./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 -
进入nginx/sbin目录,执行./nginx即可启动nginx.
-
完成服务端程序
要完成负载均衡测试需要有服务端程序做响应,这里用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端口。
-
负载均衡
负载均衡意为将网络请求或其他形式负载分摊到不同机器上,减轻单台机器压力。Nginx可以实现负载均衡功能,这需要修改位于nginx/conf目录下的nginx.conf文件。
首先,需要在http{ server { …}}
标签中做如下修改:
location / {
proxy_pass http://test; //注意之后的upstream也要命名为test
root html;
index index.html index.htm;
}
增添的proxy_pass表示将请求转发到test所代理的主机,接下来需要配置相应负载均衡策略。 -
轮询(默认)
每个请求按时间顺序逐一分配到列表中的后端服务器,如果后端服务器宕机则会被自动剔除,这是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
测试结果: -
指定权重
指定相应主机的权重,权重越大优先级越高
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明显优先级高。
- 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
- fair
根据后端服务器响应时间来决定,该策略需要安装第三方模块才能运行,安装方法: - 停止Nginx ./nginx -s quit
- 进入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反向代理和负载均衡的功能,学到了一种有效分散服务端压力的方法。