中间件系列——EMQX 的集群搭建
公众号:技术小厨师
关注小厨师,烹饪美味的技术餐
上文回顾
https://mp.weixin.qq.com/s/EChqGD01bkjbxjkOCrrEPg
在上文,我们介绍了 EMQX 的快速上手体验,本文将会延续上文的基础继续介绍 EMQX 的集群搭建。
EMQX 集群配置
按照之前的基础,我们已经为 192.168.100.100 搭建了一个 EMQX,现在我们可以利用 Linux 集群分发机制实现在 192.168.100.101 和 192.168.100.102 上快速部署 EMQX。
如果不清楚如何使用集群分发机制,可以参考下面的文章,
https://mp.weixin.qq.com/s/IWE9rZ1JzF6tr_uqQKWzCg
下面我们只需要使用之前的集群分发脚本,将 emqx 的环境配置与安装目录同步到集群 centos 中,
syncall /etc/profile.d/my_emqx.sh
syncall /opt/module/emqx/
这样对于其他的主机来说,emqx 就已经安装好了,接下来我们就进入集群设置环境。
可能需要让环境变量生效,
source /etc/profile
static 集群
static 集群是通过预先存储在各节点的 EMQX 节点的节点列表来实现集群的发现,配置方法较为简单,我们到 192.168.100.100 的节点配置文件,
# 配置文件在安装目录下的 etc/emqx.conf
vim /opt/module/emqx/etc/emqx.conf
修改文件内容如下,
# 修改集群模式为 static
cluster.discovery = static
# 设置节点发现列表
cluster.static.seeds = emqx@192.168.100.100,emqx@192.168.100.101,emqx@192.168.100.102
# 设置节点名称,请注意,节点标识必须和上面节点发现列表中的一致,否则将无法实现集群节点发现
node.name = emqx@192.168.100.100
保存后,我们就已经成功修改了 192.168.100.100 的节点集群配置,利用集群分发将配置拷贝到其他节点后,我们只需要修改 192.168.100.101 和 192.168.100.102 配置文件中的节点名称即可,
# 101
node.name = emqx@192.168.100.101
# 102
node.name = emqx@192.168.100.102
现在让我们启动集群中的每个节点,
emqx restart
进入控制台,看看效果如何,
可以看到在不同的节点上,监控界面显示的节点数如图所示,说明集群已经启动。
验证集群发布与订阅
我们如果要进一步验证集群功能是否正常,其实也非常简单,我们来测试跨节点的发布订阅功能,
现在让我们使用 MQTTX 工具对 192.168.100.100 节点进行订阅,订阅的主题是 testtopic,
现在我们使用另外一个连接,连接到 192.168.100.101 节点,并向 testtopic 发送消息。
可以看到另外一个连接收到了消息,
配置 Nginx 网关
集群搭建完后,我们的工作并没有结束,我们需要一个提供一个外部的统一的入口。集群通常是部署在内网的,不具备外网 IP,即使外网 IP 可知,让客户端一次性保存所有节点的 IP 也是不现实的,因为节点可能动态横向扩展并。除此之外,我们需要平衡客户端的访问流量,也就是需要做负载均衡。
本节我们选择用 Nginx 来作为 EMQX 集群的网关,最终搭建的效果如下所示,
安装 Nginx
方便起见我们直接这样安装,
yum install -y nginx
读者如果出现 No package nginx available,说明需要配置 epel 源,
yum -y install epel-release
启动 nginx,
systemctl enable nginx
systemctl start nginx
验证 nginx 是否启动成功,访问 http://192.168.100.100,如果显示以下页面,或者 nginx 首页,则说明 nginx 正常运行,
配置 nginx 负载均衡
如果你是通过 yum 安装 nginx,则配置文件位置为 /etc/nginx/nginx.conf,因为对 emqx 进行反向代理本质上是对 websocket 进行反向代理,我们还需要安装一个插件,
yum install nginx-mod-stream -y
SSL 证书的 nginx 负载均衡配置(推荐)
准备 SSL 证书,如果你只是想要进行尝试,可以申请阿里云免费 SSL 证书,
作者将证书上传到了 /etc/nginx/cert 目录内。
于是在 nginx 配置文件中,我们添加以下配置,
stream {# 轮询负载均衡配置upstream emqx_cluster {# nginx 的三个实例server 192.168.100.101:1883 max_fails=2 fail_timeout=30s;server 192.168.100.102:1883 max_fails=2 fail_timeout=30s;server 192.168.100.103:1883 max_fails=2 fail_timeout=30s;}server {# 监听 8883 端口 SSLlisten 8883 ssl;# 反向代理到 emqx_clusterproxy_pass emqx_cluster;proxy_buffer_size 4k;ssl_handshake_timeout 15s;# 证书配置ssl_certificate /etc/nginx/cert/nginx.pem;ssl_certificate_key /etc/nginx/cert/nginx.key;}
}
不带 SSL 的 nginx 负载均衡配置(不推荐)
stream {# 轮询负载均衡配置upstream emqx_cluster {# nginx 的三个实例server 192.168.100.101:1883 max_fails=2 fail_timeout=30s;server 192.168.100.102:1883 max_fails=2 fail_timeout=30s;server 192.168.100.103:1883 max_fails=2 fail_timeout=30s;}server {# 监听 8883 端口 SSLlisten 8883;# 反向代理到 emqx_clusterproxy_pass emqx_cluster;proxy_buffer_size 4k;}
}
Nginx 重载配置并验证负载均衡
nginx -s reload
随便打开其中一个节点的 Dashboard,看看集群是否正常运作,
使用 MQTTX 创建 4 个相同的连接,指向 mqtts://192.168.100.100:8883,即 nginx 网关所在的服务节点,
连上四个连接后再次查看 Dashboard,验证负载均衡是否生效,
可以看到 4 个连接通过轮询的负载均衡策略被分配到了 3 个节点,至此我们就建立了如下所示的生产集群。
其他负载均衡策略
在实际生产中,我们除了简单的轮询负载均衡策略之外,我们还有许多选择,我们只需要修改上面的 upstream 配置即可,
随机轮询策略
随机轮询就是从待选列表中随机分配连接,
upstream emqx_cluster {random;# nginx 的三个实例server 192.168.100.101:1883;server 192.168.100.102:1883;server 192.168.100.103:1883;
}
带权轮询策略
如果部署的服务器存在性能差异,我们可以通过配置权重 weight 来修改轮询的几率,
upstream emqx_cluster {# nginx 的三个实例server 192.168.100.101:1883 weight=1;server 192.168.100.102:1883 weight=2;server 192.168.100.103:1883 weight=3;
}
least_conn 策略
最小连接数策略,优先分配给获得连接数较少的服务器,
upstream emqx_cluster {least_conn;# nginx 的三个实例server 192.168.100.101:1883;server 192.168.100.102:1883;server 192.168.100.103:1883;
}
IP Hash 策略
如果有特殊需求,希望同一个客户端连接至同一个服务器,则可以使用 IP Hash 策略。
upstream emqx_cluster {# 指定策略为 ip haship_hash;# nginx 的三个实例server 192.168.100.101:1883;server 192.168.100.102:1883;server 192.168.100.103:1883;
}
其他策略
上面介绍的都是 Nginx 内置的负载均衡策略,其实还有许多通过第三方插件引入的负载均衡策略,比如 fair 等,本文不做过多介绍。
中间件系列——EMQX 的集群搭建相关推荐
- 【运维】K8S集群部署系列之ETCD集群搭建(四)
ETCD集群扩容和缩容 本文将介绍生产环境下如何对ETCD集群进行扩容和缩容. 文章目录 ETCD集群扩容和缩容 新节点环境准备(node3) 下载安装包并初始化环境 网络准备 生成`node3`对等 ...
- Flink系列之Flink集群搭建
title: Flink系列 二.Flink集群搭建 2.1 Flink的Standalone模式集群安装 1.上传解压重命名 [root@hadoop10 software]# tar -zxvf ...
- 2017微服务 mysql集群_微服务架构系列之Nacos集群搭建
上回我们说到了<微服务架构系列之Nacos 配置核心概念>,这次我们讲讲Nacos 集群环境搭建. 集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图: 如果 ...
- ElasticSearch系列零之集群搭建
1. 参考目录 参考一: Linux服务器CentOs7对Elasticsearch7 集群搭建 参考二: Elastic 中文社区 参考三: Linux内核调优部分参数说明 2. 集群部署步骤 目录 ...
- 【运维】K8S集群部署系列之ETCD集群搭建(二)
TLS证书生成 文章目录 TLS证书生成 简介 工具下载 创建CA认证中心 CA证书申请文件 生成CA证书和私钥 配置证书生成策略 证书验证 查看证书 验证证书 生成ETCD集群的TLS证书 服务端证 ...
- 云计算最佳实践系列之 K8s集群搭建+容器编排
身为让容器应用实现大规模工业生产的一大功臣,过去几年,Kubernetes 势头迅猛,BAT.京东.美团.字节都走上了全域容器化部署以及云原生架构的康庄大道. 而作为支撑阿里万亿级应用背后的核心,阿 ...
- 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
- .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7)系列二:k8s高可用集群搭建总结以及部署API到k8s...
前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...
- redis db0 到 db15_深入剖析Redis系列: Redis集群模式搭建与原理详解
前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...
最新文章
- 使用Cumulus和Flash Player搭建视频会议示例
- Linux下将Mysql和Apache加入到系统服务里的方法
- [JS]计算字符串中出现最多的字符和其出现次数
- Android的第一个程序
- Directed Roads CodeForces - 711D (基环外向树 )
- 单片机串口通信电平不匹配的解决电路,5V 3.3V串口通讯
- 关于设计秒杀系统的几个问题
- C++成员函数的重载、覆盖与隐藏
- 对象流--对象的序列化
- [转载] 图片(tkinter,Python3.x)
- 计算机组成原理在线实验,《计算机组成原理》实验.doc
- 工程选择LibGdx--开发环境搭建Strut2教程-java教程
- 李宏毅机器学习Homework1(代码简洁版)
- 你知道ISO27000信息安全管理标准族有多少?
- UEFI 之 HelloWorld
- 使用github下载项目压缩包,打开前端项目加载依赖报错。
- 软件测试自学还是报班好?
- python股票预测的意义是什么_股票预测python,python 设计一个名为Stock的类来表示...
- 照片调色系列教程(11):浪漫色调 温情暖暖
- linux ps显示完整command