0. 前言
关于Nginx负载均衡的简单配置,我以前博客配置过基于HTTP的负载均衡。这次的负载均衡有点不一样,就是基于TCP的负载均衡。基于HTTP负载均衡是默认的Nginx版本支持的,配置也很简单,但是基于TCP的负载均衡,配置起来就有一点点麻烦了。
1. 下载安装
由于我们要用到四层TCP层负载均衡,所以要自己编译Nginx,在这里下载最新版 中间我们可能要进行调试一些参数,可以下载这个扩展 git clone
然后编译
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-dev包 apt-get install libgeoip-dev 由于我只是需要用到里面的geo扩展,不需要对应的信息,如果有需要的可以在这里下载数据包
当出现上图信息,表示编译成功
1 make && make install
2. 增加虚拟网卡
一种是临时增加,一种是配置到开机启动
1 ifconfig eth1:1 172.16.23.111 netmask 255.255.255.0 up2 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:111 #iface eth1:1 inet static12 # address 172.16.23.10413 # netmask 255.255.255.014 # 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.conf36 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 }
增加nginx的echo模块、geo模块、stream模块
一开始调试时,使用http{}进行调试,因为访问 就可以进行变量调试了,以为不清楚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会随机负载到60000和60001两台后端应用服务,并且也会随机使用Nginx的虚拟网卡204或111