物联网架构成长之路(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
然后编译
./configure --prefix=/root/workspace/emq/nginx --with-stream --add-module=/root/workspace/emq/nginx-1.12./echo-nginx-module --with-http_geoip_module
可能会要求安装这个libgeoip-dev包 apt-get install libgeoip-dev 由于我只是需要用到里面的geo扩展,不需要对应的信息,如果有需要的可以在这里下载数据包 http://dev.maxmind.com/geoip/legacy/downloadable/ https://www.cnblogs.com/kevingrace/p/6165572.html
当出现上图信息,表示编译成功
make && make install
2. 增加虚拟网卡
一种是临时增加,一种是配置到开机启动
ifconfig eth1: 172.16.23.111 netmask 255.255.255.0 up
ifconfig eth1: down
vim /etc/network/interfaces 增加后重启网卡
auto lo
iface lo inet loopback auto eth1
iface eth1 inet static
address 172.16.23.204
netmask 255.255.255.0
gateway 172.16.23.1 #auto eth1:
#iface eth1: inet static
# address 172.16.23.104
# netmask 255.255.255.0
# gateway 172.16.23.1
3. nginx.conf 配置文件
user root; worker_processes auto; events {
worker_connections ;
} stream { upstream backend {
server 172.16.20.217:;
server 172.16.20.217:;
} upstream backbind {
server 172.16.23.203:;
} map $msec $proxy_bind_ip {
~[-]$ 172.16.23.111;
~[-]$ 172.16.23.204;
} server {
listen ;
proxy_pass backend;
proxy_bind $proxy_bind_ip;
}
} http {
geo $LB {
default ;
#include conf/geo.conf
172.16.20.217 ;
172.16.20.218 ;
}
map $LB $proxy_bind_ip {
172.16.23.111;
172.16.23.204;
}
map $msec $proxy_bind_ip_2 {
~[-]$ 172.16.23.111;
~[-]$ 172.16.23.204;
}
server {
listen ;
location /test {
echo $proxy_bind_ip;
echo $proxy_bind_ip_2;
echo $connection;
echo "hostname" $hostname;
echo "msec" $msec;
echo "pid" $pid;
echo "proxy_protocol" $proxy_protocol_addr ":" $proxy_protocol_port;
echo "remote:" $remote_addr ":" $remote_port;
echo "server:" $server_addr ":" $server_port;
echo "status:" $status;
echo "time:" $time_iso8601;
echo "time:" $time_local;
}
}
}
增加nginx的echo模块、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会随机负载到60000和60001两台后端应用服务,并且也会随机使用Nginx的虚拟网卡204或111
物联网架构成长之路(10)-Nginx负载均衡的更多相关文章
- 【架构师之路】Nginx负载均衡与反向代理—《亿级流量网站架构核心技术》
本篇摘自<亿级流量网站架构核心技术>第二章 Nginx负载均衡与反向代理 部分内容. 当我们的应用单实例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台.几十台.几百台.然而,用 ...
- 物联网架构成长之路(25)-Docker构建项目用到的镜像1
0. 前言 现在项目处于初级阶段,按照规划,先构建几个以后可能会用到的Image,并上传到阿里云的Docker仓库.以后博客中用到的Image,大部分都会用到这几个基础的Image,构建一个简单的物联 ...
- 物联网架构成长之路(31)-EMQ基于HTTP权限验证
看过之前的文章就知道,我之前是通过搞插件,或者通过里面的MongoDB来进行EMQ的鉴权登录和权限验证.但是前段时间发现,还是通过HTTP WebHook 方式来调用鉴权接口比较适合实际使用.还是实现 ...
- 物联网架构成长之路(9)-双机热备Keepalived了解
1. 前言 负载均衡LB,高可用HA,这一小结主要讲双机热备方案保证高可用.这里选择Keepalived作为双机热备方案,下面就对具体的配置进行了解.2. 下载Keepalived wget http ...
- 物联网架构成长之路(43)-k8s从入门到放弃
0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...
- 物联网架构成长之路(33)-EMQ数据存储到influxDB
一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和em ...
- 物联网架构成长之路(29)-Jenkins环境搭建
0. 说明 哈哈,前面中间插入了一篇Eclipse增加Git插件,在此之前真的没有用过GIT. 1. 运行Jenkins 这里为了方便,还是用Docker方式安装,由于这个是标准的war报,不对Doc ...
- 物联网架构成长之路(11)-Redis缓存主从复制
1. 说明 在我的物联网平台框架框架中,会用到Redis这个中间件.作为EMQ权限认证的缓存.https://www.cnblogs.com/think-in-java/p/5123884.html ...
- 物联网架构成长之路(13)-SpringBoot入门
1. 前言 下载最新版的JavaEE eclipse-jee-oxygen-2-win32-x86_64.zip 安装STS插件 Window->Eclipse Marketplace -> ...
随机推荐
- 诡异的楼梯 HDU1180
这题做了很久 做好了感觉很简单... 现在做题思路更加清晰了 一个要点就是 当楼梯过不去的时候不能是先过去时间加2 必须得回去等一秒 否则queue的时间顺序会被打破 #include< ...
- 兼容ie10以下版本的placeholder属性
<script src="${ctx }/js/jquery.placeholder.js" type="text/javascript">< ...
- 【Java并发核心三】CountDownLatch、CyclicBarrier及Phaser
个人感觉,看书学习还是需要“不求甚解”,因为一旦太过于计较小的得失,就容易钻牛角尖,学习进度也慢.我们完全可以先学一个大概,等到真正用到的时候再把那些细节丰富起来,就更有针对性. 所以,针对java并 ...
- 第01章 准备工作.md
第1章 准备工作 1.1 本书的内容 本书讲的是利用Python进行数据控制.处理.整理.分析等方面的具体细节和基本要点.我的目标是介绍Python编程和用于数据处理的库和工具环境,掌握这些,可以让你 ...
- vue+webpack 遇到的问题总结
1.错误1:TypeError:this.init is not a function 解决:安装相关的加载器,npm install vue-loader vue-html-loader vue-s ...
- BZOJ.3720.Gty的妹子树(树分块)
题目链接 洛谷上惨遭爆零是为什么.. 另外这个树分块算法是假的. /* 插入删除只涉及一个数,故每次可以枚举一遍,而不是重构完后sort */ #include<cmath> #inclu ...
- Python图形编程探索系列-03-标签组件(Label)
跳转到自己的博客 tkinter.Label介绍 什么是标签? 通俗的将就相当于word的功能,能够进行显示不可修改的文字.图片或者图文混排. 直观体会一下 图1 背景图构成:内容区(黑色),填充区( ...
- pt-query-digest简介使用
简介 pt-query-digest 是用于分析mysql慢查询的一个工具,与mysqldumpshow工具相比,py-query_digest 工具的分析结果更具体,更完善. 有时因为 ...
- Standard Series Values in a Decade for Resistances and Capacitances E24 E48 E96
E3 50% tolerance (no longer used)E6 20% tolerance (now seldom used)E12 10% toleranceE24 ...
- 奇怪吸引子---Qi
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...