公众号:技术小厨师

关注小厨师,烹饪美味的技术餐

上文回顾

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 的集群搭建相关推荐

  1. 【运维】K8S集群部署系列之ETCD集群搭建(四)

    ETCD集群扩容和缩容 本文将介绍生产环境下如何对ETCD集群进行扩容和缩容. 文章目录 ETCD集群扩容和缩容 新节点环境准备(node3) 下载安装包并初始化环境 网络准备 生成`node3`对等 ...

  2. Flink系列之Flink集群搭建

    title: Flink系列 二.Flink集群搭建 2.1 Flink的Standalone模式集群安装 1.上传解压重命名 [root@hadoop10 software]# tar -zxvf ...

  3. 2017微服务 mysql集群_微服务架构系列之Nacos集群搭建

    上回我们说到了<微服务架构系列之Nacos 配置核心概念>,这次我们讲讲Nacos 集群环境搭建. 集群模式跟我们平时进行扩容是一样的,可以通过 Nginx 转发到多个节点,如下图: 如果 ...

  4. ElasticSearch系列零之集群搭建

    1. 参考目录 参考一: Linux服务器CentOs7对Elasticsearch7 集群搭建 参考二: Elastic 中文社区 参考三: Linux内核调优部分参数说明 2. 集群部署步骤 目录 ...

  5. 【运维】K8S集群部署系列之ETCD集群搭建(二)

    TLS证书生成 文章目录 TLS证书生成 简介 工具下载 创建CA认证中心 CA证书申请文件 生成CA证书和私钥 配置证书生成策略 证书验证 查看证书 验证证书 生成ETCD集群的TLS证书 服务端证 ...

  6. 云计算最佳实践系列之 K8s集群搭建+容器编排

    身为让容器应用实现大规模工业生产的一大功臣,过去几年,Kubernetes  势头迅猛,BAT.京东.美团.字节都走上了全域容器化部署以及云原生架构的康庄大道. 而作为支撑阿里万亿级应用背后的核心,阿 ...

  7. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  8. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7)系列二:k8s高可用集群搭建总结以及部署API到k8s...

    前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...

  9. redis db0 到 db15_深入剖析Redis系列: Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

最新文章

  1. 使用Cumulus和Flash Player搭建视频会议示例
  2. Linux下将Mysql和Apache加入到系统服务里的方法
  3. [JS]计算字符串中出现最多的字符和其出现次数
  4. Android的第一个程序
  5. Directed Roads CodeForces - 711D (基环外向树 )
  6. 单片机串口通信电平不匹配的解决电路,5V 3.3V串口通讯
  7. 关于设计秒杀系统的几个问题
  8. C++成员函数的重载、覆盖与隐藏
  9. 对象流--对象的序列化
  10. [转载] 图片(tkinter,Python3.x)
  11. 计算机组成原理在线实验,《计算机组成原理》实验.doc
  12. 工程选择LibGdx--开发环境搭建Strut2教程-java教程
  13. 李宏毅机器学习Homework1(代码简洁版)
  14. 你知道ISO27000信息安全管理标准族有多少?
  15. UEFI 之 HelloWorld
  16. 使用github下载项目压缩包,打开前端项目加载依赖报错。
  17. 软件测试自学还是报班好?
  18. python股票预测的意义是什么_股票预测python,python 设计一个名为Stock的类来表示...
  19. 照片调色系列教程(11):浪漫色调 温情暖暖
  20. linux ps显示完整command

热门文章

  1. 【PTA】【Python】【拼题A 2022 跨年挑战赛】太神奇了
  2. Ocata Neutron代码分析(六)——APIRouter的初始化(1)加载core plugin和service plugin...
  3. 基于C#制作一个ChatGPT桌面助手
  4. 顶点计划2-2调研报告
  5. 网页制作HTML代码全攻略
  6. 20+主流跨境电商平台API地址大全
  7. 马云控股“文化中国”暗藏啥玄机?
  8. 英语中what的用法
  9. 微信朋友圈视频变长从6秒增加为10秒
  10. 浅谈脑机接口:传统神经学科的颠覆者