EMQ百萬級MQTT消息服務(分布式集群)



原創 喵了_個咪 最后發布於2018-04-08 15:10:18 閱讀數 5217 收藏
展開

 

 


在強大的單機也比不上集群,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 互聯,消息傳遞的方式通信:

---------         ---------
| Node1 | --------| Node2 |
---------         ---------
    |     \     /    |
    |       \ /      |
    |       / \      |
    |     /     \    |
---------         ---------
| Node3 | --------| Node4 |
---------         ---------

  

EMQ 消息服務器集群基於 Erlang/OTP 分布式設計,集群原理可簡述為下述兩條規則:

    MQTT 客戶端訂閱主題時,所在節點訂閱成功后廣播通知其他節點:某個主題(Topic)被本節點訂閱。
    MQTT 客戶端發布消息時,所在節點會根據消息主題(Topic),檢索訂閱並路由消息到相關節點。

EMQ 消息服務器同一集群的所有節點,都會復制一份主題(Topic) -> 節點(Node)映射的路由表,例如:

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名稱

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

修改配置文件配置使用靜態方式鏈接節點(所有節點都需要修改)

> 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 設置:

# 在node1上執行
> emqttd stop
> emqttd start
> scp $HOME/.erlang.cookie root@192.168.2.112:$HOME/.erlang.cookie

  

通過命令查看集群狀態

> emqttd_ctl cluster status

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


通過界面可以看到如下顯示

 

 



3 總結

有了集群就解決了大規模部署的問題,但是在實際使用中還有很多需要關注的點,在下一節將介紹用戶體系和ACL鑒權

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!
————————————————
版權聲明:本文為CSDN博主「喵了_個咪」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011142688/article/details/79852310


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM