物联网架构成长之路(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 -> ...
随机推荐
- Matrix Power Series POJ3233
递推思想 先放着 见 https://www.cnblogs.com/jackge/p/3147604.html
- Storm中关于Topology的设计
一:介绍Storm设计模型 1.Topology Storm对任务的抽象,其实 就是将实时数据分析任务 分解为 不同的阶段 点: 计算组件 Spout Bolt 边: 数据流向 数据从上 ...
- 001 Python中的基本类型初步介绍
这个但是根据书来整理的,显得有些多,也不够完整. 一:介绍 1.为什么使用内置对象 对象类型是语言的一个部分 内置对象构成了每个python程序的核心部分 二:数字 1.**是乘方 2.math数学模 ...
- Rstudio+mysql写入中文表
1.在mysql中输入sql语句,新建一个支持中文的数据库 create database Chinadaydata DEFAULT CHARACTER SET gbk COLLATE gbk_chi ...
- input禁止输入空格
<input name="" onkeyup="this.value=this.value.replace(/^\s+|\s+$/g,'')" value ...
- UltraISO制作U盘启动盘安装Win7系统攻略
reference win 7 iso name: cn_windows_7_ultimate_x86_dvd_x15-65907.iso URL FOR download: http://jingy ...
- 论文--Topic-Sensitive PageRank
背景 原有的PageRank方法:通过web上链接结构信息得到页面之间相对的重要性,和特定的查询内容无关 论文涉及到的其他算法 HITS Hilltop,处理常见的流行查询 popular query ...
- JavaScript函数使用技巧
JavaScript中的函数是整个语言中最有趣的一部分,它们强大而且灵活.接下来,我们来讨论JavaScript中函数的一些常用技巧: 一.函数绑定 函数绑定是指创建一个函数,可以在特定的this环境 ...
- js滚动分页原理
<!doctype html><html> <head> <!--声明当前页面的编码集:charset=gbk,gb2312(中文编码),utf-8国际编码- ...
- Android弹出Toast工具类总结
Android弹出Toast工具类总结,包括系统自带的,也包括自定义的. public class ToastUtil { public ToastUtil() { } public static T ...