• 物联网架构成长之路(10)-Nginx负载均衡


    0. 前言

      关于Nginx负载均衡的简单配置,我以前博客配置过基于HTTP的负载均衡。这次的负载均衡有点不一样,就是基于TCP的负载均衡。基于HTTP负载均衡是默认的Nginx版本支持的,配置也很简单,但是基于TCP的负载均衡,配置起来就有一点点麻烦了。

    1. 下载安装

      由于我们要用到四层TCP层负载均衡,所以要自己编译Nginx,在这里下载最新版 http://nginx.org/download/nginx-1.12.2.tar.gz  中间我们可能要进行调试一些参数,可以下载这个扩展 git clone https://github.com/openresty/echo-nginx-module 

      然后编译

    1 ./configure --prefix=/root/workspace/emq/nginx --with-stream --add-module=/root/workspace/emq/nginx-1.12.2/echo-nginx-module --with-http_geoip_module

      可能会要求安装这个libgeoip-devapt-get install libgeoip-dev 由于我只是需要用到里面的geo扩展,不需要对应的信息,如果有需要的可以在这里下载数据包 http://dev.maxmind.com/geoip/legacy/downloadable/ https://www.cnblogs.com/kevingrace/p/6165572.html

     

      当出现上图信息,表示编译成功

    1 make && make install

    2. 增加虚拟网卡

      一种是临时增加,一种是配置到开机启动

    1 ifconfig eth1:1 172.16.23.111 netmask 255.255.255.0 up
    2 ifconfig eth1:1 down

      vim /etc/network/interfaces  增加后重启网卡

     1 auto lo
     2 iface lo inet loopback
     3 
     4 auto eth1
     5 iface eth1 inet static
     6     address 172.16.23.204
     7     netmask 255.255.255.0
     8     gateway 172.16.23.1
     9 
    10 #auto eth1:1
    11 #iface eth1:1 inet static
    12 #    address 172.16.23.104
    13 #    netmask 255.255.255.0
    14 #    gateway 172.16.23.1

    3. nginx.conf 配置文件

     1 user root;
     2 
     3 worker_processes auto;
     4 
     5 events {
     6     worker_connections 1024;
     7 }
     8 
     9 stream {
    10 
    11     upstream backend {
    12         server 172.16.20.217:60000;
    13         server 172.16.20.217:60001;
    14     }
    15 
    16     upstream backbind {
    17         server 172.16.23.203:54321;
    18     }
    19 
    20     map $msec $proxy_bind_ip {
    21         ~[0-5]$ 172.16.23.111;
    22         ~[5-9]$ 172.16.23.204;
    23     }
    24 
    25     server {
    26         listen 12345;
    27         proxy_pass backend;
    28         proxy_bind $proxy_bind_ip;
    29     }
    30 }
    31 
    32 http {
    33     geo $LB {
    34         default 1;
    35      #include conf/geo.conf
    36         172.16.20.217 0;
    37         172.16.20.218 1;
    38     }
    39     map $LB $proxy_bind_ip {
    40        0 172.16.23.111;
    41        1 172.16.23.204;
    42     }
    43     map $msec $proxy_bind_ip_2 {
    44         ~[0-5]$ 172.16.23.111;
    45         ~[5-9]$ 172.16.23.204;
    46     }
    47     server {
    48         listen 8888;
    49         location /test {
    50             echo $proxy_bind_ip;
    51             echo $proxy_bind_ip_2;
    52             echo $connection;
    53             echo "hostname" $hostname;
    54             echo "msec" $msec;
    55             echo "pid" $pid;
    56             echo "proxy_protocol" $proxy_protocol_addr ":" $proxy_protocol_port;
    57             echo "remote:" $remote_addr ":" $remote_port;
    58             echo "server:" $server_addr ":" $server_port;
    59             echo "status:" $status;
    60             echo "time:" $time_iso8601;
    61             echo "time:" $time_local;
    62         }
    63     }
    64 }

      增加nginxecho模块、geo模块、stream模块

      一开始调试时,使用http{}进行调试,因为访问 http://127.0.0.1:8888/test 就可以进行变量调试了,以为不清楚map的语法,所以只能一点一点调试。

      upstream {} 后端负载均衡器

      map {} 变量映射

      geo {} IP过滤等功能

      server {} 服务器配置

      更多功能这里不做描述,网上资料更多更全。

    4. 测试

      从上面两个图可以看到,创建两个服务监听应用

      172.16.23.217:60000 172.16.23.217:60001 这两个模拟的是实际应用中的后端业务应用(MQTT集群) 

      TCP Client 创建5个连接,模拟不同客户端(MQTT设备)

      172.16.23.204:12345 172.16.23.111:12345 这两个是负载均衡器Nginx监听的端口。

      5个客户端连接连到Nginx负载均衡器,Nginx会随机负载到6000060001两台后端应用服务,并且也会随机使用Nginx的虚拟网卡204111

  • 相关阅读:
    PUTTY与SecureCRT的比较
    java中volatile关键字的含义
    java中引用的原理
    Java陷阱之assert关键字
    脏读 幻读 不可重复读
    JAVA 的wait(), notify()与synchronized同步机制
    线程状态转换图
    并行、并发、同步和互斥
    B-树学习笔记
    平衡二叉树及其应用场景
  • 原文地址:https://www.cnblogs.com/wunaozai/p/8278956.html
Copyright © 2020-2023  润新知