前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 EMQ百万级MQTT消息服务(分布式集群)

原 EMQ百万级MQTT消息服务(分布式集群)

作者头像
喵了个咪233
发布2018-04-16 14:38:25
2.4K0
发布2018-04-16 14:38:25
举报
在强大的单机也比不上集群,EMQ的集群模式很粗暴,只需要把EMQ服务关联在一起然后负载均衡就可以达到集群的效果,这样就算面对1000CK问题也迎刃而解

附上:

喵了个咪的博客:w-blog.cn EMQ官方地址:http://emqtt.com/ EMQ中文文档:http://emqtt.com/docs/v2/guide.html

1.集群方式接受

Erlang/OTP 最初是爱立信为开发电信设备系统设计的编程语言平台,电信设备(路由器、接入网关、…)典型设计是通过背板连接主控板卡与多块业务板卡的分布式系统。 Erlang/OTP 语言平台的分布式程序,由分布互联的 Erlang 运行系统组成,每个 Erlang 运行系统被称为节点(Node),节点(Node) 间通过 TCP 互联,消息传递的方式通信:

代码语言:javascript
复制
---------         ---------
| Node1 | --------| Node2 |
---------         ---------
    |     \     /    |
    |       \ /      |
    |       / \      |
    |     /     \    |
---------         ---------
| Node3 | --------| Node4 |
---------         ---------

EMQ 消息服务器集群基于 Erlang/OTP 分布式设计,集群原理可简述为下述两条规则:

  • MQTT 客户端订阅主题时,所在节点订阅成功后广播通知其他节点:某个主题(Topic)被本节点订阅。
  • MQTT 客户端发布消息时,所在节点会根据消息主题(Topic),检索订阅并路由消息到相关节点。

EMQ 消息服务器同一集群的所有节点,都会复制一份主题(Topic) -> 节点(Node)映射的路由表,例如:

代码语言:javascript
复制
topic1 -> node1, node2
topic2 -> node3
topic3 -> node2, node4

EMQ集群方式分别有以下方式:

  • manual 手工命令创建集群
  • static 静态节点列表自动集群
  • mcast UDP 组播方式自动集群
  • dns DNS A 记录自动集群
  • etcd 通过 etcd 自动集群
  • k8s Kubernetes 服务自动集群

为了方便我们这里使用static方式关联节点

2.集群搭建

这里已经基于Centos7.4搭建并且调优好了两台EMQ,内网IP分别是192.168.2.111和192.168.2.112

首先需要修改Node名称

代码语言:javascript
复制
vim /usr/local/emqttd/etc/emq.conf

node.name = emq@192.168.2.111

> emqttd_ctl status
Node 'emq@192.168.2.111' is started
emqttd 2.3.5 is running

修改配置文件配置使用静态方式链接节点(所有节点都需要修改)

代码语言:javascript
复制
> vim /usr/local/emqttd/etc/emq.conf 

cluster.discovery = static

##--------------------------------------------------------------------
## Cluster with static node list
cluster.static.seeds = emq@192.168.2.111,emq@192.168.2.112

为了安全Erlang 节点间通过一个相同的 cookie 进行互连认证。Erlang 节点 Cookie 设置:

代码语言:javascript
复制
# 在node1上执行
> emqttd stop
> emqttd start
> scp $HOME/.erlang.cookie root@192.168.2.112:$HOME/.erlang.cookie

通过命令查看集群状态

代码语言:javascript
复制
> emqttd_ctl cluster status

Cluster status: [{running_nodes,['emq@192.168.2.111','emq@192.168.2.112']}]

通过界面可以看到如下显示

3 总结

有了集群就解决了大规模部署的问题,但是在实际使用中还有很多需要关注的点,在下一节将介绍用户体系和ACL鉴权

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.集群方式接受
  • 2.集群搭建
  • 3 总结
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档