Nginx 动态负载均衡

Nginx 负载均衡(动态实现)

1,概览

1,传统配置实现的负载均衡,在加减服务器的时候,会遇到下面的问题    
    1:配置文件是默认地址,则需要重载配置文件。nginx -s reload
        加载配置文件流程:
            1,主进程通知worker进程进行重启
            2,worker进程收到通知,等待现有请求处理完毕,然后进行重启
            3,重启过程中的请求无法处理,会堆积一些无法处理的请求
            4,重启完毕,先处理堆积的请求,然后处理后续的请求
    2:配置文件不是默认地址,需要关闭nginx,指定配置文件重启,用以加载新的配置文件。

    #注意:以上两种方法,测试环境当然不会有问题。如果是生成环境,正值请求高峰的话,这么做是绝对不允许的。

这样,就产生了实现动态负载均衡的方法。

动态负载均衡实现原理:
    1.配置方面,和静态配置一摸一样,用upstream模块。将多个后端服务器的配置独立出来,include引入。
    2.利用consul服务维护多个后端服务器的地址以及配置信息,可扩展,缩减,修改后端服务器
    2.利用nginx-upsync-module模块,动态读取consul维护的后端服务器信息,写入1中独立出来
      的后端服务器配置中,并且加载到运行中的nginx中,整个过程不需要重新加载nginx。

2,consul

1,简介

consul其实就是个服务发现、配置管理中心的服务软件。
    (具体安装配置等细节可自行google,介绍使用都很详细。这里只介绍几个和nginx负载均衡相关的命令)

2,启动命令:

consul agent -server  -bootstrap-expect 1 -data-dir /tmp/consul -node=abc -  bind=8.8.8.2 -ui -client=0.0.0.0 

    详解:
        consul agent
        -server                 #表示启动的是一个服务 
        -bootstrap-expect n     #表示有n个节点之后再启动,没特殊分布式部署,n=1即可
        -data-dir /tmp/consul   #数据存储目录 
        -node=ali               #当前服务节点的别名
        -bind=0.0.0.0           #当前作为consul服务器的ip
        -ui                     #启动默认ui界面
        -client=0.0.0.0         #绑定client的地址,0.0.0.0表示所有客户端都可以访问

    注意:
        1,http服务默认是8500端口,开启ui界面的话,host:8500可进行可视化管理

实例:
consul agent -server  -bootstrap-expect 1 -data-dir /tmp/consul -node=abc -bind=8.8.8.2 -ui -client=0.0.0.0 

4,常用命令:

    1,增加新配置
        curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://$consul_ip:$consul_port/v1/kv/$dir1/$upstream_name/$server_ip:$server_port

        例如:
            curl -X PUT -d '{"weight":2, "max_fails":2, "fail_timeout":10}' http://8.8.8.2:8500/v1/kv/upstreams/syncTest/8.8.8.3:9001


    2,查看所有的配置
        curl http://127.0.0.1:8500/v1/kv/?recurse


    3,删除某个key
        consul kv delete key(key 可以在上面查询所有配置中拿到)

3,nginx配置

http{

    ……

    upstream syncTest{
        #先给定一个服务器
        server  8.8.8.3:9001;

        #upsync,                                    这里的配置用了nginx-upsync-module模块
        #127.0.0.1:8500/v1/kv/upstreams/syncTest    consule服务器地址
        #upsync_timeout=6m                          超时时间6min
        #upsync_interval=500ms                      配置从consul拉取上游服务器的间隔时间
        #upsync_type                                指定使用配置服务器的类型,当前是consul
        #strong_dependency                          启动时是否强制依赖配置服务器,如果配置为on,则拉取失败,nginx同样会启用失败
        upsync  127.0.0.1:8500/v1/kv/upstreams/syncTest upsync_timeout=6m upsync_interval=500ms  upsync_type=consul  strong_dependency=off strong_dependency=off;

        #指定从consul拉取的上游服务器后持久化到的位
        upsync_dump_path /data/www/learnNote/nginx/servers_test.conf;
        #引入备份文件
        include /data/www/learnNote/nginx/servers_test.conf;
    }
    ……

    server{

        ……

        location / {
            #负载均衡转发
            proxy_pass http://syncTest;
        }

        ……

    }

}


#归纳:
    当consul扩展或者缩减服务器的时候,相应服务器配置文件会自动更新
    归根结底,和静态配置唯一的不同就是用upsync模块定时自动拉去consul维护的服务器信息。
    再简单点,就是upstream配置中,再加两条upsync,upsync_dump_path两条配置

注意:

本文主要讲了动态负载均衡的原理,实现。
需要了解静态负载均衡配置的知识,才能了解本文的动态的配置,静态配置可以查看上一篇总结
地址:
    知乎:https://zhuanlan.zhihu.com/p/157213928
    csdn:https://blog.csdn.net/SiuKong_Ngau/article/details/107069817
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值