• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    负载均衡的基本知识以及使用nginx进行负载均衡的简单例子
    POST TIME:2021-10-16 17:43

    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:7001
    Hello, Service :User Service 1: 7001
    [root@kong ~]# 
    [root@kong ~]# curl http://192.168.163.117:7002
    Hello, 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-lb
    9d53c7e9a45e    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.conf
    server {
      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.conf
    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;
      #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-lb
    nginx-lb
    [root@kong ~]#

    确认结果

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

    [root@kong ~]# curl http://localhost:9080
    Hello, Service :User Service 1: 7001
    [root@kong ~]# curl http://localhost:9080
    Hello, Service :User Service 1: 7002
    [root@kong ~]# curl http://localhost:9080
    Hello, Service :User Service 1: 7001
    [root@kong ~]# curl http://localhost:9080
    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.org
    2,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-lb
    nginx-lb
    [root@kong ~]#

    确认结果

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

    [root@kong ~]# curl http://localhost:9080
    Hello, Service :User Service 1: 7001
    [root@kong ~]# curl http://localhost:9080
    Hello, Service :User Service 1: 7002
    [root@kong ~]# curl http://localhost:9080
    Hello, Service :User Service 1: 7002
    [root@kong ~]#

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    上一篇:为Nginx启用Brotli压缩算法的方法示例
    下一篇:Docker利用busybox创建基础镜像(base image)
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信