Coolpy7技术手册
  • COOLPY7千万级MQTT消息服务器
  • 开始使用
    • Coolpy7消息服务器简介
    • 一分钟运行 Coolpy7
    • 单机千万级连接测试
    • 消息并发压力测试
    • 部署架构
    • 程序安装
    • 分布式集群
    • Docker部署CP7(Win&Linux)
    • 消息通信功能测试
    • DbPoxy代理服务
    • 内核功能扩展
    • 规则引擎
    • 启动参数及内核特殊功能
    • 功能性API接口说明
    • 使用JWT身份验证
    • 消息组播
    • HTTP、CoAP推送消息
    • MQTT-SN代理服务
    • 客户端SDK示例库
    • 常见问题总汇
  • CGP通用IOT物联网控制协议
    • CGP协议
    • CGP协议安全模式
  • OAuth2用户中心应用
    • 用户中心
  • COOLPY7领域应用
    • CP7领域应用指南简略图
    • 使用paho-mqtt.js库实时聊天室
    • 微信小程序实时通信聊天室应用
    • 使用MQTT.js库连接CP7
    • Paho.mqtt.golang客户端连接示例
  • MQTT协议基础知识
    • MQTT协议
    • MQTT-SN 协议
    • MQTT应用指南
Powered by GitBook
On this page
  • Coolpy7分布集群设计
  • 手动配置管理集群
  • 自动愈合,自动清除异常节点
  • 消息桥接
  • 防火墙设置
  • 关于docker部署方式

Was this helpful?

  1. 开始使用

分布式集群

Coolpy7分布式技术,支持多个Coolpy7 Core提供跨数据中心(多活)模式组建群集,支持群集零手动维护(基于Gossip分布式协议作为群集节点状态维护)。Coolpy7从版本号V7.3.2.3开始支持本功能。请到Coolpy7之github项目release下载相关版本https://github.com/Coolpy7/Coolpy7/releases。也可以通过docker安装。

Previous程序安装NextDocker部署CP7(Win&Linux)

Last updated 3 years ago

Was this helpful?

Coolpy7分布集群设计

Coolpy7消息服务器集群基于Gossip协议作为服务发现,基于UDP作为集群节点间消息转发通信的分布式设计,集群原理可简述为下述几条规则:

  1. 所有节点独立维护自有的身份验证、订阅、取消订阅事件处理

  2. 集群之间只会转发PUBLISH消息,并且消息体少于64K的消息

  3. 节点内组播消息不被转发,只在当前节点有效

  4. 集群之间不保证消息不丢失,只转发消息到所有在线节点,转发会忽略离线节点

  5. 客户端连接某一个节点后,将会收到来自其他节点给它的消息(于订阅的主题)

Coolpy7集群架构图

消息分发流

手动配置管理集群

假设部署三台服务器 192.168.1.100, 192.168.1.101, 192.168.1.102 上部署集群:

节点名

IP

node1@192.168.1.100

192.168.1.100

node2@192.168.1.101

192.168.1.101

node3@192.168.1.102

192.168.1.102

1.节点名不允许重复,否则群集将无法自动维护集群状态

2.当使用外网IP或域名进行跨数据中心集群时,通过“节点名@IP地址或域名”进行指定IP设置。

节点1:192.168.1.100节点设置

# 下载服务器端
wget https://github.com/Coolpy7/Coolpy7/raw/master/go_build_Coolpy7_go_linux.zip
# 解压文件
unzip go_build_Coolpy7_go_linux.zip
# 提权
chmod -R 777 go_build_Coolpy7_go_linux
# 启动Coolpy7 启动参数
# csk 集群服务同步验证token,集群各节点转发消息时验证此口令,防止恶意入侵集群
# nid 集群节点名称,必须集群中唯一
# mbs 连接集群其他节点,只需填其他节点信息,以半角豆号分隔多个节点信息
./go_build_Coolpy7_go_linux -csk=12345678 -nid=node1@192.168.1.100 -mbs=192.168.1.101:7946,192.168.1.102:7946

# 启动成功后会打印如下信息,即说明服务端已正常启动,host于1883端口,请确保相关防火墙配置可用
2020/02/14 14:48:27 cluster on udp 192.168.1.100:7946
2020/02/14 14:48:27 cluster sync on udp port 7947
2020/02/14 14:48:27 Coolpy7 v7.3.2.3 tcp [::]:1883 plugin build golang v1.13.1

打印消息提示,群集使用UDP的7946端口进行集群服务发现,UDP的7947端口进行消息同步服务。

如需自定义端口可通过启动参数

-crp int 集群发现端口(UDP) (default 7946)

-csp int 集群同步端口(UDP) (default 7947)

节点2:192.168.1.101节点设置

# 下载服务器端
wget https://github.com/Coolpy7/Coolpy7/raw/master/go_build_Coolpy7_go_linux.zip
# 解压文件
unzip go_build_Coolpy7_go_linux.zip
# 提权
chmod -R 777 go_build_Coolpy7_go_linux
# 启动Coolpy7 启动参数
# csk 集群服务同步验证token,集群各节点转发消息时验证此口令,防止恶意入侵集群
# nid 集群节点名称,必须集群中唯一
# mbs 连接集群其他节点,只需填其他节点信息,以半角豆号分隔多个节点信息
./go_build_Coolpy7_go_linux -csk=12345678 -nid=node2@192.168.1.101 -mbs=192.168.1.100:7946,192.168.1.102:7946

# 启动成功后会打印如下信息,即说明服务端已正常启动,host于1883端口,请确保相关防火墙配置可用
2020/02/14 14:48:27 cluster on udp 192.168.1.101:7946
2020/02/14 14:48:27 cluster sync on udp port 7947
2020/02/14 14:48:27 Coolpy7 v7.3.2.3 tcp [::]:1883 plugin build golang v1.13.1

节点3:192.168.1.102节点设置

# 下载服务器端
wget https://github.com/Coolpy7/Coolpy7/raw/master/go_build_Coolpy7_go_linux.zip
# 解压文件
unzip go_build_Coolpy7_go_linux.zip
# 提权
chmod -R 777 go_build_Coolpy7_go_linux
# 启动Coolpy7 启动参数
# csk 集群服务同步验证token,集群各节点转发消息时验证此口令,防止恶意入侵集群
# nid 集群节点名称,必须集群中唯一
# mbs 连接集群其他节点,只需填其他节点信息,以半角豆号分隔多个节点信息
./go_build_Coolpy7_go_linux -csk=12345678 -nid=node3@192.168.1.102 -mbs=192.168.1.100:7946,192.168.1.101:7946

# 启动成功后会打印如下信息,即说明服务端已正常启动,host于1883端口,请确保相关防火墙配置可用
2020/02/14 14:48:27 cluster on udp 192.168.1.102:7946
2020/02/14 14:48:27 cluster sync on udp port 7947
2020/02/14 14:48:27 Coolpy7 v7.3.2.3 tcp [::]:1883 plugin build golang v1.13.1

至此集群搭建完毕,现在即可通过MQTT客户端工具(MQTTLens)等进行相关集群功能测试。可从A节点连接的客户端推送消息,然后B,C节点的客户端如果订阅了相同主题将会收到相关跨节点消息。

自动愈合,自动清除异常节点

集群自动恢复功能说明:

  1. 节点网络异常离线各节点会发现ping包没有响应,

  2. 随后邀请其他在线节点向异常节点发起ping测试,

  3. 如经过三轮周期没有得到异常节点响应

  4. 当前节点设置该节点为离线状态

  5. 移出在线节点列表。

  6. 异常节点再次上线

  7. 所有在线节点收到状态信号

  8. 所有节点设置该节点为在线

  9. 添加该节点到在线列表

消息桥接

消息桥接是为CP7集群各节点间的消息同步提供可配置性的相关功能。

通过启动参数进行配置相关桥接主题指定主题消息过滤桥接。默认参数值以 # 号表示全量消息桥接。需指定特定主题是以半角豆号隔开多个主题,如:aaa/#,bbb/#

防火墙设置

Coolpy7使用UDP协议进行集群节点状态信号和消息同步通信,所以需要开启相关UDP端口防火墙

关于docker部署方式

最新版本docker镜像已更新到latest标签版本下,docker hub地址: ,docker相关部署方式请参阅本手册相关章节。

https://hub.docker.com/r/coolpy7/coolpy7_core
Docker部署(Windows运行CP7)/kai-shi-shi-yong/docker-bu-shu-windows-yun-hang-cp7
消息桥接示意图