docker 分布式管理群集_Coolpy7分布式物联网MQTT集群搭建

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

Coolpy7分布集群设计‌

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

  1. 所有节点独立维护自有的身份验证、订阅、取消订阅事件处理
  2. 集群之间只会转发PUBLISH消息,并且消息体少于63K的消息
  3. 节点内组播消息不被转发,只在当前节点有效
  4. 集群之间不保证消息不丢失,只转发消息到所有在线节点,转发会忽略离线节点
  5. 客户端连接某一个节点后,将会收到来自其他节点给它的消息(于订阅的主题)

Coolpy7集群架构图

abca9b730ad535dafc28e41cc507785b.png

消息分发流

363fa4e83c9b26df33f49c854f493750.png

手动配置管理集群

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

节点名 IP

node1 192.168.1.100

node2 192.168.1.101

node3 192.168.1.102

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

节点1:192.168.1.100节点设置

# 下载服务器端sudo wget https://github.com/Coolpy7/Coolpy7/releases/download/7.3.2.3/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 -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:79462020/02/14 14:48:27 cluster sync on udp port 79472020/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节点设置

# 下载服务器端sudo wget https://github.com/Coolpy7/Coolpy7/releases/download/7.3.2.3/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 -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:79462020/02/14 14:48:27 cluster sync on udp port 79472020/02/14 14:48:27 Coolpy7 v7.3.2.3 tcp [::]:1883 plugin build golang v1.13.1

节点3:192.168.1.102节点设置

# 下载服务器端sudo wget https://github.com/Coolpy7/Coolpy7/releases/download/7.3.2.3/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 -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:79462020/02/14 14:48:27 cluster sync on udp port 79472020/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. 添加该节点到在线列表

防火墙设置

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

关于docker部署方式

最新版本docker镜像已更新到latest标签版本下,docker hub地址:https://hub.docker.com/r/coolpy7/coolpy7_core ,docker相关部署方式请参阅本手册相关章节。Docker部署(Windows运行CP7)/kai-shi-shi-yong/docker-bu-shu-windows-yun-hang-cp7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 数值 拼接字符串_【Vue原理】Compile - 白话版

写文章不容易,点个赞呗兄弟 专注 Vue 源码分享,文章分为白话版和 源码版,白话版助于理解工作原理,源码版助于了解内部详情,让我们一起学习吧 研究基于 Vue版本 【2.5.17】如果你觉得排版难看,请点击 下面链…

gpio驱动蜂鸣器出现破音_五款蜂鸣器驱动电路原理图

蜂鸣器驱动电路图一:典型的蜂鸣器驱动电路,蜂鸣器驱动电路一般包含:一个三极管、一个蜂鸣器、一个续流二极管、一个滤波电容。1、蜂鸣器:发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声&am…

php和mysql的实践报告_PHP+MySQL项目开发与实践

前言部分基础篇任务一PHP基础知识简介1.1静态网页与动态网页的工作原理1.1.1静态网页与工作原理1.1.2动态网页与工作原理1.2初识PHP1.3习题任务二PHP程序的运行环境搭建2.1配置Apache服务器2.1.1安装Apache服务器2.1.2Apache服务器安装过程中的问题及解决方案2.1.3Apache主目录…

mediumint 在mysql 中是什么类型_mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围...

mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,搜集了些资料,整理分享出来,这篇为有关mysql整型bigint、int、mediumint、smallint 和 tinyint的语法介绍,如下:1、bigi…

mysql备份还原数据库操作系统_mysql 命令行备份还原数据库操作

一 备份操作1.备份全部数据库mysqldump -uroot -p --all databases > aa.sql2.备份某个数据库并压缩mysqldump -uroot -p databasename |gzip > aa.sql.gz3 .备份单个表mysqldump -uroot -p -table dbname tbname1 tbname2 >aa.sql4.同时备份多个数据库mysqldump -ur…

python表示当前对象_对象操作

[TOC]# 对象操作## help:返回对象的帮助信息~~~>>> help(str)Help on class str in module builtins:class str(object)| str(object) -> str| str(bytes_or_buffer[, encoding[, errors]]) -> str|| Create a new string object from the given object. If enc…

中国大学慕课python答案第七章_中国大学慕课mooc用Python玩转数据章节答案

嵌体来源A.嵌入牙冠内的修复体 B.没有覆盖前牙唇面或后牙颊面的部分冠修复体艺术不是象牙塔里的_____ ,所谓的“为艺术而艺术”,说到底不过是唯美主义_____的志向。自古以来,艺小轿车的速度比卡车的速度每小时快6千米,小轿车和卡车…

mysql 多项式_mysql主从复制原理及实现

一.主从复制原理利用MySQL提供的Replication,其实就是Slave从Master获取Binary log文件,然后再本地镜像的执行日志中记录的操作。由于主从复制的过程是异步的,因此Slave和Master之间的数据有可能存在延迟的现象,此时只能保证数据最…

python迭代器是什么百度百科,python迭代器的接口是什么?

What are the required methods for defining an iterator? For instance, on the following Infinity iterator, are its methods sufficient? Are there other standard or de factor standard methods that define an iterator?class Infinity(object):def __init__(self…

python逻辑表达式3+45and_python入门到精通(一)| python基础语法与各种运算符的使用...

一、python中的基础语法1、输入语句 input格式:变量input(“输入提示信息”)功能:从键盘上输入一行文本信息到变量中,可以强转为各种数据类型。案例: xinput(“您的个人基本信息”)注意点:只能接受一行信息2 input语句…

java中文分词算法_Java实现逆向最大匹配中文分词算法

写道//Java实现逆向最大匹配中文分词算法public class SplitChineseCharacter {public static void main(String[] args) {String input "太好了,今天是星期六啊"; // 要匹配的字符串new Split(input).start();}}class Split {private String[] dictiona…

途牛java面试题_途牛java面试题.docx

途牛java面试题途牛java面试题  QUESTION NO: 1   publicclass Test1 {   publicstaticvoid changeStr(String str){   str"welcome";   }   publicstaticvoid main(String args) {   String str"1234";   changeStr(str);   (str);   …

java httpclient 异步请求_java_java实现HttpClient异步请求资源的方法,本文实例讲述了java实现HttpClien - phpStudy...

java实现HttpClient异步请求资源的方法本文实例讲述了java实现HttpClient异步请求资源的方法。分享给大家供大家参考。具体实现方法如下:package demo;import java.util.concurrent.CountDownLatch;import org.apache.http.HttpResponse;import org.apache.http.cli…

idea创建web项目运行报404错误_使用IDEA新建Web工程启动报404的错误

新换了一个项目组被人吐槽配置文件都能写错,所以打算从头开始一步步搭建一个项目,包含ssm基础框架、mongodb工具类、redis工具类、jsf配置、log配置等今天先来搭建一个web工程。工程搭建好运行时发现404我们都知道,一般404都是由于请求资源的…

java高效写文件_java如何高效读写10G以上大文件

有一份10G以上大文本文件,需要替换里面的一些文本信息(每一行都有),如何高效读并替换掉生成新的文件先分割成多个文件多个线程操作多个文件,避免两个线程操作同一个文件按行读文件并按行写入新的文件合并所有文件1,4用linux命令就可以了&…

java md2_GitHub - edzjx/Md2Crypto

此项目来源一个字谜解体过程一个程序猿在自己的微信公众号里出了一个字谜。其中用到了MD2加密算法,这是各很古老的加密算法。从网上搜到作者92年发布的C代码还能正常执行。此项目介绍解题过程,和使用C,C#,Java,Python3来测试代码。文章结构破…

java stringbuffer原理_深入理解Java:String

在讲解String之前,我们先了解一下Java的内存结构。一、Java内存模型按照官方的说法:Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。JVM主要管理两种类型内存:堆和非堆,堆…

java dubbo jsf_cubelink

cubelink概要设计[TOC]1. 撰写记录更新时间内容作者2017-08-23 08:39:31撰写参数回调章节内容林斌2017-08-22 21:26:52增加了异步响应和异步回调章节林斌2017-08-22 14:36:36确定文档结构和大致框架林斌2. 设计目标设计一个具备治理,监控,服务发现能力的…

用java输出图形_java基础-输出一个简单的图形。

最近写了几行代码输出下面的图形。不多说了,代码如下。 * *** ***** public class javaDemoOne {/** * @brief 主函数 * @author wks * @param args */ public static void main(String[] args) {// TODO Auto-generated method stub inputGraPh(); System.out.print("\n…

python 的案例实战_python案例实战之一

分析思路:1、明确分析目标;2、导入库、导入数据;3、简单查看下数据行列、整体情况;4、数据清洗;5、确定维度和指标;6、分析并作图1、查看整体数据情况1.1引入使用的库import numpy as npimport pandas as p…