Nginx与LUA(2)

2023/1/14 4:24:00

本文主要是介绍Nginx与LUA(2),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

您好,我是湘王,这是我的慕课手记,欢迎您来,欢迎您再来~


除了反向代理Nginx另一个主要的功能就是负载均衡」。

所谓负载均衡就是将请求分摊到多个服务器上执行,从而减轻单台服务器的访问压力负载均衡一般都需要同时配置反向代理,通过反向代理跳转到指定的服务器上

https://img1.sycdn.imooc.com/63bfd8c600015b4006740277.jpg

 

Nginx目前支持自带三种负载均衡策略,还有两种常用的第三方策略

先准备好环境

1、先安装三台Linux虚拟机每台虚拟机上安装好JDK环境不想装虚拟机docker也可以

2、开发一个最简单的SpringBoot应用

3、分别部署到其中两台服务器上一台叫server01,一台叫server02

4、另一台服务器安装Nginx,做负载均衡叫做server03

https://img3.sycdn.imooc.com/63bfd8cf0001040209480584.jpg


https://img3.sycdn.imooc.com/63bfd8d50001264e09510573.jpg


https://img1.sycdn.imooc.com/63bfd8db0001fa0f09500583.jpg


application.properties文件中增加:server.port=8080

修改启动类,排除数据源的自动加载:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

增加Controller类

https://img1.sycdn.imooc.com/63bfd8e00001706f06540221.jpg

 

打包应用,并上传到server02,启动应用

java -jar nginx-0.0.1-SNAPSHOT.jar

修改Controller类

https://img1.sycdn.imooc.com/63bfd8e500015e1006770217.jpg

 

打包应用,并上传到server03,启动应用

java -jar nginx-0.0.1-SNAPSHOT.jar

访问server01server02(或者docker的地址

http://172.16.185.130:8080/test?username=test1

http://172.16.185.131:8080/test?username=test1

使用Nginx的默认方式也就是轮询每个请求按顺序轮流地分配到不同的后端服务器如果某些后端服务器宕机或离线,也能自动剔除

修改配置

https://img3.sycdn.imooc.com/63bfd8ea0001c43205920351.jpg

 

重新加载Nginx

cd /usr/local/nginx/sbin/

./nginx -s reload

访问server03的地址:http://172.16.185.136/test?username=test1

结果是

n次访问会返回「server02」

n+1次访问会返回「server03」

或者相反

说明配置已生效

 

现在给轮询增加一下权重避免平均主义每个请求指定轮询几率,weight和访问比率成正比这可以用于后端服务器性能不均的情况如果某些后端服务器宕机或离线,也能自动剔除

修改配置,增加weight关键字

https://img4.sycdn.imooc.com/63bfd8ef0001893405160303.jpg

 

重新加载Nginx

cd /usr/local/nginx/sbin/

./nginx -s reload

再访问server03:http://172.16.185.136/test?username=test1

连续访问多次的结果

多数访问会返回「server02」

少数访问会返回「server03」

大概就是三七开说明配置已生效

 

轮询和权重的方式只能满足无状态的或者幂等的业务应用但很多时候业务需要满足一个客户只能访问一个服务器的条件因此,这种情况就需要采用iphash方式来分配后端服务器

修改配置,增加ip_hash关键字

https://img3.sycdn.imooc.com/63bfd8f40001849b05070306.jpg

 

重新加载Nginx

cd /usr/local/nginx/sbin/

./nginx -s reload

再次访问server03http://172.16.185.136/test?username=test1

连续访问多次的结果:如果每次访问都只返回了server01或者server02」说明配置已生效

 

除了轮询权重和iphash另外还可以通过第三方插件来设置负载均衡的方式

如果需要按后端服务器的响应时间来分配请求的话可以使用第三方插件fair

1、下载地址:https://github.com/gnosek/nginx-upstream-fair

(或者https://www.nginx.com/resources/wiki/modules/index.html)

2、下载后解压到/home/work/upstream-fair/

3、安装时增加参数:./configure --add-module=/home/work/upstream-fair/

4、错误「'ngx_http_upstream_srv_conf_t'没有名为'default_port'的成员」的解决办法

cd /home/work/upstream-fair/

Linux输入:sed -i 's/default_port/no_port/g' ngx_http_upstream_fair_module.c

mac输入:sed -i '' 's/default_port/no_port/g' ngx_http_upstream_fair_module.c

修改配置,将关键字ip_hash改为fair

https://img1.sycdn.imooc.com/63bfd8f80001db9205320311.jpg

 

重新加载Nginx

cd /usr/local/nginx/sbin/

./nginx -s reload

访问server03http://172.16.185.136/test?username=test1

连续访问多次的结果

有时返回「server02」

有时返回「server03」

既不是轮询也不是权重和ip这说明配置已生效

 

另外一种第三方插件是一致性hash」:它可以根据参数采取不同的方式,将请求均匀映射到后端服务器

1、根据客户端ip映射

2、根据客户端uri映射

3、根据客户端参数映射

安装插件

1、下载:https://github.com/replay/ngx_http_consistent_hash

(或者https://www.nginx.com/resources/wiki/modules/index.html)

2、下载后解压到/home/work/upstream-hash/

3、安装时增加参数:./configure --add-module=/home/work/upstream-hash/

4、修改配置,将关键字fair改为consistent_hash $request_uri

https://img1.sycdn.imooc.com/63bfd8ff0001b12904910305.jpg

 

重新加载Nginx

cd /usr/local/nginx/sbin/

./nginx -s reload

访问server03http://172.16.185.136/test?username=test1

连续访问多次的结果:每次访问都只返回了「server01或者server02

说明配置已生效

 



 

感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~




这篇关于Nginx与LUA(2)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程