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…

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

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

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

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

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. 设计目标设计一个具备治理,监控,服务发现能力的…

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

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

java数据结构期末复习_java数据结构复习02

1.递归问题1.1计算阶乘packageinterview.recursion;importjava.util.Scanner;public classFact {public static voidmain(String[] args) {System.out.println("请输入n的值:");Scanner in newScanner(System.in);int n in.nextInt();int num fact(n);Sys…

java中methods方法_java中Class.getMethod方法

Method Class.getMethod(String name, Class>... parameterTypes)的作用是获得对象所声明的公开方法该方法的第一个参数name是要获得方法的名字,第二个参数parameterTypes是按声明顺序标识该方法形参类型。person.getClass().getMethod("Speak", null)…

centos6 yum快速安装mysql_centos6.10 yum安装mysql 5.6-Go语言中文社区

一、检查系统是否安装其他版本的MYSQL数据#yum list installed | grep mysql#yum -y remove 文件名二、安装及配置# wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm# rpm -ivh mysql-community-release-el6-5.noarch.rpm# yum repolist all | grep mysq…

二叉树两节点距离java,求二叉树中两个节点的最远距离

问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节…

php cli 编程,php-cli下编程如何分层架构、面向对象、统一入口文件?

以往写cli下运行的业务或者测试代码,总是新建文件,面向过程编写代码。几次之后,cli目录下好多文件,即便勉强在一个cli测试文件中写了一个类,也是让其中的一个方法自启动,要测试别的方法,总是要修…

php中gd为什么是乱码的,php gd库中文乱码怎么解决?

php gd库中文乱码怎么解决?,中文,乱码,字符,选项,字体php gd库中文乱码怎么解决?易采站长站,站长之家为您整理了php gd库中文乱码怎么解决?的相关内容。解决方法:1、网站整站使用UTF8编码,如果已使用GB2312…

php实现飘窗,JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)

原标题:JS实现网站图片飘窗效果,JavaScript悬浮广告(附详细代码)JS实现网站图片飘窗效果,Java悬浮广告,郑州SEO提供以下代码,仅供参考:飘窗效果-丁光辉博客(www.dingguanghui.com)*{margin:0px;padding:0px…

oracle中orand使用,Postgres兼容Oracle研究——orafce调研

一、背景PostgreSQL是和Oracle最接近的企业数据库,包括数据类型,功能,架构和语法等几个方面。甚至大多数的日常应用的性能也不会输给Oracle。但是Oracle有些函数或者包,默认PostgreSQL是没有的,需要安装orafce包来实现…

labview linux 内核 不匹配,Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃。...

Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃。我安装了LabVIEW pro 2017 for Linux(另外也试了2016版的都是一样的效果),VISA也试了4.1.0、4.4.0、5.1.1、15.0.0、15.5.0、16.0.0、17.0.0版本都试过了&#…

kali linux子远程桌面,适用于kali linux的远程桌面开启方法(从windows xp 远程登录到kali linux )...

为了解决Windows远程桌面访问Ubuntu 12.04 之一 中提到的VNC远程桌面的缺点(见http://www.linuxidc.com/Linux/2012-07/64801.htm),我们采用第二种方法XRDP,该方法支持多用户登录并远程桌面。1、首先参考Windows远程桌面访问Ubuntu 12.04 之安装VNC中提到…

linux装redis环境变量,linux 怎样安装redis

人到中年有点甜获取Redis1、通过官网http://redis.io/获取稳定版源码包下载地址;2、通过wget http://download.redis.io/releases/redis-3.0.2.tar.gz下载 源码包;2编译安装Redis1、解压源码安装包,通过tar -xvf redis-3.0.2.tar.gz解压源码&…

word2016能识别linux换行符,word文章中的换行符如何批量替换为回车符

word文件中有换行符很正常,但是想要将换行符全部替换为回车符,该怎么替换?以下是学习啦小编为您带来的关于word文章中的换行符批量替换为回车符,希望对您有所帮助。word文章中的换行符批量替换为回车符1、在打开的word中,依次点击…