• 使用Consul配合Nginx实现动态负载均衡


    目录

    一、前言

    二、consul的简单使用

    1、说明

    2、查看健值

    3、添加健值

    三、配置Nginx配置文件 nginx.conf

    四、向consul注册Nginx服务器信息

    五、访问 http://192.168.78.104:81/test ,看是否能够正确动态负载均衡

    六、动态负载均衡实现原理总结


    一、前言

    在 实现负载均衡一节中,我们使用Nginx实现了负载均衡。

    但是实际工作中,是不可能把upstream中的服务器IP写死的,因为如果这样做,一旦某台服务器挂了,或者需要临时扩容,还得修改Nginx配置文件,然后重启Nginx。这样很显然是不可取的。

    基于此,我们引入动态负载均衡的概念。动态负载均衡是基于Nginx的upsync模块来做的。

    注:其实Nginx不一定非要结合consul来做动态负载均衡,也可以结合Redis来做,但是consul除了拥有和Redis类似的KV存储,还可以做服务的注册与发现、健康检查,因此相比之下,业内大多使用consul来做动态负载均衡。

     

    二、consul的简单使用

    1、说明

    在 docker-compose 的使用实例 中,我们在编排工具中编排了一组服务,其中就包括一个consul。

    注:如果不想把consul添加到编排服务中,可以独立安装,可以查看文章 Consul的安装及简单使用

    2、查看健值

    访问宿主机IP:8500

    我们可以直接通过访问 192.168.78.104:8500访问consul 网页客户端,查看和添加健值;也可以通过curl方式添加健值。

    3、添加健值

    有两种方式,一种是consul网页客户端,一种是curl方式,可以查看文章 Consul的安装及简单使用

     

    三、配置Nginx配置文件 nginx.conf

    1、进入Nginx容器创建swoft_server.conf

    1. # 进入Nginx容器
    2. docker exec -it nginx1.21 bash
    3. # 创建swoft_server.conf,为下一步修改Nginx配置文件做准备
    4. touch /etc/nginx/conf/swoft_server.conf
    5. # 退出容器,回到宿主机
    6. exit

    2、修改Nginx配置文件 nginx.conf

    1. worker_processes 4;
    2. worker_cpu_affinity auto; #自动绑定cpu跟进程的关系
    3. events {
    4. worker_connections 100000; #设置单个worker连接数
    5. }
    6. error_log logs/error.log error;
    7. http {
    8. include mime.types;
    9. default_type application/octet-stream;
    10. sendfile on;
    11. keepalive_timeout 65;
    12. upstream swoft_server {
    13. # 定义一个默认的nginx服务
    14. server 172.22.22.110:18306 max_fails=2 fail_timeout=30s;
    15. #server 172.22.22.120:18306 max_fails=2 fail_timeout=30s;
    16. #server 172.22.22.130:18306 max_fails=2 fail_timeout=30s;
    17. # 定义nginx连接consul_server获取动态upstream的consul_key,upsync_type为consul,每0.5秒从consul拉取一次配置信息
    18. upsync 172.22.22.30:8500/v1/kv/upstream/swoft_server upsync_type=consul upsync_interval=5ms upsync_timeout=1ms;
    19. # 定义动态获取consul_server负载均衡信息持久化在磁盘的位置
    20. upsync_dump_path /etc/nginx/conf/swoft_server.conf;
    21. # 引入生成的配置文件
    22. include /etc/nginx/conf/swoft_server.conf;
    23. }
    24. server {
    25. listen 80;
    26. server_name localhost;
    27. root /www;
    28. location / {
    29. proxy_pass http://swoft_server;
    30. }
    31. }
    32. }

    注:修改完Nginx配置文件,不要忘了重启nginx容器哦 o( ̄▽ ̄)d docker restart nginx1.21

     

    四、向consul注册Nginx服务器信息

    1. curl -X PUT -d '{"max_fails":2,"fail_timeout":10}' http://172.22.22.30:8500/v1/kv/upstream/swoft_server/172.22.22.110:18306
    2. curl -X PUT -d '{"max_fails":2,"fail_timeout":10}' http://172.22.22.30:8500/v1/kv/upstream/swoft_server/172.22.22.120:18306
    3. curl -X PUT -d '{"max_fails":2,"fail_timeout":10}' http://172.22.22.30:8500/v1/kv/upstream/swoft_server/172.22.22.130:18306

     

    五、访问 http://192.168.78.104:81/test ,看是否能够正确动态负载均衡

    连续访问三次,会依次得到结果

    1. inet 172.22.22.110
    2. inet 172.22.22.120
    3. inet 172.22.22.130

    说明动态负载均衡配置成功

     

    六、动态负载均衡实现原理总结

    1、Nginx加载配置文件nginx.conf

    2、从consul中获取动态配置 ,生成一个动态负载均衡配置文件 swoft_server.conf;

    3、Nginx使用该动态负载均衡配置文件,得到多个可用服务IP及端口号

    4、Nginx开始负载均衡

    1. 注意:
    2. 看第三段”配置Nginx配置文件 nginx.conf“ 即可大致分析出来动态负载均衡的实现原理。
    3. 这里还没有对nginx服务做健康检查,因此使用curl或consul前端页面推送或删除的结果就直接决定配置文件生成的结果
  • 相关阅读:
    2022年全球最具技术实力的的智能合约安全审计公司推荐
    HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器(附全部代码在gitcode链接)
    在水产养殖中需要用到哪些设备?
    2023-2028年中国硫酸钇市场发展态势及前景预测报告
    【第四篇】SpringSecurity的HttpSecurity详解
    3038. 相同分数的最大操作数目 I(Rust模拟击败100%Rust用户)
    ERC20
    宏任务与微任务
    大数据(九):数据可视化(一)
    公众号查题接口API 无限查题搜题 独立后台控制
  • 原文地址:https://blog.csdn.net/qq_27229113/article/details/126005181