千家信息网

怎么使用nginx进行负载均衡

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章主要介绍"怎么使用nginx进行负载均衡"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么使用nginx进行负载均衡"文章能帮助大家解决问题。四层负载
千家信息网最后更新 2024年11月26日怎么使用nginx进行负载均衡

这篇文章主要介绍"怎么使用nginx进行负载均衡"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么使用nginx进行负载均衡"文章能帮助大家解决问题。

四层负载均衡 vs 七层负载均衡

经常会说七层负载均衡还是四层负载均衡,其实根据iso的osi网络模型的所在层的叫法而决定的,nginx因为在使用http协议在应用层进行负载均衡的操作,所以被称为七层负载均衡。而诸如lvs在tcp层进行负载均衡操作的则被称为四层负载均衡。一般来说,有如下层的负载均衡分类:

常见软件的支持

常见的负载均衡算法

负载均衡常见有如下几种算法:

负载均衡演示实例:普通轮询

接下来使用nginx来演示一下如何进行普通轮询:

事前准备

事前在7001/7002两个端口分别启动两个服务,用于显示不同信息,为了演示方便,使用tornado做了一个镜像,通过docker容器启动时传递的参数不同用于显示服务的不同。

[root@kong ~]# docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "user service 1: 7001"ddba0abd24524d270a782c3fab907f6a35c0ce514eec3159357bded09022ee57[root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "user service 1: 7002"95deadd795e19f675891bfcd44e5ea622c95615a95655d1fd346351eca707951[root@kong ~]# [root@kong ~]# curl http://192.168.163.117:7001hello, service :user service 1: 7001[root@kong ~]# [root@kong ~]# curl http://192.168.163.117:7002hello, service :user service 1: 7002[root@kong ~]#

启动nginx

[root@kong ~]# docker run -p 9080:80 --name nginx-lb -d nginx 9d53c7e9a45ef93e7848eb3f4e51c2652a49681e83bda6337c89a3cf2f379c74[root@kong ~]# docker ps |grep nginx-lb9d53c7e9a45e    nginx           "nginx -g 'daemon ..."  11 seconds ago   up 10 seconds    0.0.0.0:9080->80/tcp                         nginx-lb[root@kong ~]#

nginx代码段

准备如下nginx代码段将其添加到nginx的/etc/nginx/conf.d/default.conf中

http {upstream nginx_lb {  server 192.168.163.117:7001;  server 192.168.163.117:7002;}server {  listen    80;  server_name www.liumiao.cn 192.168.163.117;  location / {    proxy_pass http://nginx_lb;  }}

修改default.conf的方法

可以通过在容器中安装vim达到效果,也可以在本地修改然后通过docker cp传入,或者直接sed修改都可。如果在容器中安装vim,使用如下方式即可

[root@kong ~]# docker exec -it nginx-lb sh# apt-get update...省略# apt-get install vim...省略

修改前

# cat default.confserver {  listen    80;  server_name localhost;  #charset koi8-r;  #access_log /var/log/nginx/host.access.log main;  location / {    root  /usr/share/nginx/html;    index index.html index.htm;  }  #error_page 404       /404.html;  # redirect server error pages to the static page /50x.html  #  error_page  500 502 503 504 /50x.html;  location = /50x.html {    root  /usr/share/nginx/html;  }  # proxy the php scripts to apache listening on 127.0.0.1:80  #  #location ~ \.php$ {  #  proxy_pass  http://127.0.0.1;  #}  # pass the php scripts to fastcgi server listening on 127.0.0.1:9000  #  #location ~ \.php$ {  #  root      html;  #  fastcgi_pass  127.0.0.1:9000;  #  fastcgi_index index.php;  #  fastcgi_param script_filename /scripts$fastcgi_script_name;  #  include    fastcgi_params;  #}  # deny access to .htaccess files, if apache's document root  # concurs with nginx's one  #  #location ~ /\.ht {  #  deny all;  #}}#

修改后

# cat default.confupstream nginx_lb {  server 192.168.163.117:7001;  server 192.168.163.117:7002;}server {  listen    80;  server_name www.liumiao.cn 192.168.163.117;  #charset koi8-r;  #access_log /var/log/nginx/host.access.log main;  location / {    #root  /usr/share/nginx/html;    #index index.html index.htm;    proxy_pass http://nginx_lb;  }  #error_page 404       /404.html;  # redirect server error pages to the static page /50x.html  #  error_page  500 502 503 504 /50x.html;  location = /50x.html {    root  /usr/share/nginx/html;  }  # proxy the php scripts to apache listening on 127.0.0.1:80  #  #location ~ \.php$ {  #  proxy_pass  http://127.0.0.1;  #}  # pass the php scripts to fastcgi server listening on 127.0.0.1:9000  #  #location ~ \.php$ {  #  root      html;  #  fastcgi_pass  127.0.0.1:9000;  #  fastcgi_index index.php;  #  fastcgi_param script_filename /scripts$fastcgi_script_name;  #  include    fastcgi_params;  #}  # deny access to .htaccess files, if apache's document root  # concurs with nginx's one  #  #location ~ /\.ht {  #  deny all;  #}}#

重启nginx容器

[root@kong ~]# docker restart nginx-lbnginx-lb[root@kong ~]#

确认结果

可以清晰地看到按照顺序,进行轮询:

[root@kong ~]# curl
hello, service :user service 1: 7001
[root@kong ~]# curl
hello, service :user service 1: 7002
[root@kong ~]# curl
hello, service :user service 1: 7001
[root@kong ~]# curl
hello, service :user service 1: 7002
[root@kong ~]#

负载均衡演示实例:权重轮询

而在此基础上,进行权重轮询只需要加上weight即可

修改default.conf

按照如下修改default.conf

# cp default.conf default.conf.org# vi default.conf# diff default.conf default.conf.org2,3c2,3<   server 192.168.163.117:7001 weight=100;<   server 192.168.163.117:7002 weight=200;--->   server 192.168.163.117:7001;>   server 192.168.163.117:7002;#

重启nginx容器

[root@kong ~]# docker restart nginx-lbnginx-lb[root@kong ~]#

确认结果

可以看到轮询结果按照1/3和2/3的比重在进行了:

[root@kong ~]# curl
hello, service :user service 1: 7001
[root@kong ~]# curl
hello, service :user service 1: 7002
[root@kong ~]# curl
hello, service :user service 1: 7002
[root@kong ~]#

关于"怎么使用nginx进行负载均衡"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0