物联网架构成长之路(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 -> ...
随机推荐
- python tkinter-消息框、对话框、文件对话框
python tkinter-消息框.对话框.文件对话框 消息框 导入 import tkinter import tkinter.messagebox #这个是消息框,对话框的关键 提示消息框 ...
- VsCode下代码导航
Visual Studio Code具有高效的代码编辑器,当与编程语言服务结合使用时,可以为您提供IDE的强大功能和文本编辑器的速度.在本主题中,我们将首先描述VS Code的语言智能功能(建议,参数 ...
- windows server 2003 安全加固(一)
windows server 2003 安全加固 加固主要在如下方面 A 升级系统补丁 B NTFS权限合理设置 C 关闭不需要的服务 D 关闭不需要的端口 E 帐号和密码管理 F 开启安全策略 G ...
- 细说Vue作用域插槽,匹配应用场景。
最近在官方文档中看到,vue新增了一种插槽机制,叫做作用域插槽.要求的版本是2.1.0+. 首先来说一下:顾名思义,所谓作用域插槽,主要就在作用域,需要注意的是(以下几点看不懂不要紧,配合下面的例子, ...
- L1 与 L2 正则化
参考这篇文章: https://baijiahao.baidu.com/s?id=1621054167310242353&wfr=spider&for=pc https://blog. ...
- 4815: [Cqoi2017]小Q的表格 莫比乌斯反演 分块
(Updated 2018.04.28 : 发现公式效果不好,重新处理图片)国际惯例的题面:看到这两个公式,很多人都会想到与gcd有关.没错,最终的结论就是f(a,b)=f(gcd(a,b))*(a/ ...
- Python常见下划线
python中常见的下划线意义 Python中常常使用下划线里对变量进行修饰,通常作为变量的前缀或者后缀出现,被修饰的变量一般存在特殊的用法: _XXX:不能被from module import _ ...
- 关于Android studio团队协同开发连接到已有项目
当团队中已经有人创建好项目的时候,队员想把自己的as与码云上项目相互连接时,有两种方法: 方法一: 进入as初始页面: 分别点击:check out project from Version cont ...
- Oozie分布式工作流——流控制
最近又开始捅咕上oozie了,所以回头还是翻译一下oozie的文档.文档里面最重要就属这一章了--工作流定义. 一提到工作流,首先想到的应该是工作流都支持哪些工作依赖关系,比如串式的执行,或者一对多, ...
- 你应该更新的 Java 知识之常用程序库【转载】
在很多人眼中,Java 已经是一门垂垂老矣的语言,但并不妨碍 Java 世界依然在前进.如果你曾离开 Java,云游于其它世界,或是每日只在遗留代码中挣扎,或许是时候抬起头,看看老 Java 中的新东 ...