NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub。NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。

NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。另外,官方还提供了拆箱即用Go和Python库。如果读者兴趣构建自己的客户端的话,还可以参考官方提供的协议规范。

一. 搭建主NSQ服务

1. 创建主服务器(虚拟机)

IP: 192.168.0.210

2. 拉取NSQ镜像

> docker pull nsqio/nsq  #拉取nsq镜像
> docker images #查看nsq镜像

3. 启动nsqlookupd服务

> docker run -d --name lookupd -p 4160:4160 -p 4161:4161 nsqio/nsq:latest /nsqlookupd

> #docker exec -ti lookupd /bin/sh    #进入容器,查看nsq目录结构
> #docker rm -f `docker ps -qa` #删除所有容器

最重要的服务,是整个集群的总控室,包括服务发现和节点拓扑信息的管理。nsqlookupd有以下特点:

  1. 唯一性,在集群中的节点只能指向唯一的nsqlookupd服务
  2. 去中心化,即使nsqlookupd崩溃,也会不影响正在运行的nsqd服务
  3. 充当nsqd和naqadmin信息交互的中间件
  4. 提供一个http查询服务,给客户端定时更新nsqd的地址目录

4. 启动nsqadmin管理系统

> docker run -d --name nsqadmin -p 4171:4171 nsqio/nsq /nsqadmin --lookupd-http-address=192.168.0.210:4161

nsqadmin可以部署在任何一个安装有nsq服务的机器上,只需要指定唯一的lookupd-http-address服务IP地址

浏览器打开:http://192.168.0.210:4171/ ,此时的NSQd Nodes为空

二. 部署NSQd节点服务

1.在主服务器(192.168.0.210)上开启一个nsqd节点服务

> docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=192.168.0.210 --lookupd-tcp-address=192.168.0.210:4160

2.创建从服务器(IP:192.168.0.159),拉取镜像docker pull nsqio/nsq,启动一个nsqd服务,此时已有两个nsqd节点

> docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=192.168.0.159 --lookupd-tcp-address=192.168.0.210:4160

--broadcast-address:当前服务器IP地址,--lookupd-tcp-address:指向的lookupd服务器IP地址

三. 测试

1.打开任意一个shell终端,执行:

> curl -d 't1' 'http://192.168.0.210:4151/pub?topic=p1' #一个topic可多次添加
> curl -d 't2' 'http://192.168.0.210:4151/pub?topic=p2'
> curl -d 't1' 'http://192.168.0.159:4151/pub?topic=q1'
> curl -d 't2' 'http://192.168.0.159:4151/pub?topic=q2'
> curl -d 't3' 'http://192.168.0.159:4151/pub?topic=q3'

2.nsqlookupd奔溃测试(在主服务器):

> docker stop lookupd  #停止nsqlookupd服务
> curl -d 'tpp' 'http://192.168.0.210:4151/pub?topic=pp' # topic可以正常发布
> docker stop nsqd #停止nsqd服务
> curl -d 'tpp' 'http://192.168.0.210:4151/pub?topic=pp' # topic可以正常发布
#显式: curl: (7) Failed connect to 192.168.0.210:4151; 拒绝连接

> 参考:
> https://www.cnblogs.com/li-peng/p/7729174.html

Docker搭建NSQ实时分布式消息集群的更多相关文章

  1. hbase单机环境的搭建和完全分布式Hbase集群安装配置

    HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. @hbase单机环境的搭建 ...

  2. 【分布式事务】基于RocketMQ搭建生产级消息集群?

    导读 目前很多互联网公司的系统都在朝着微服务化.分布式化系统的方向在演进,这带来了很多好处,也带来了一些棘手的问题,其中最棘手的莫过于数据一致性问题了.早期我们的软件功能都在一个进程中,数据的一致性可 ...

  3. 使用Docker Swarm搭建分布式爬虫集群

    https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653195618&idx=2&sn=b7e992da6bd1b2 ...

  4. 【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安装ik分词器

    系列文章:[建议从第二章开始] [ELK][docker][elasticsearch]1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎应用 集群,安 ...

  5. 使用 Docker 一步搞定 ZooKeeper 集群的搭建

    背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽 ...

  6. Docker 一步搞定 ZooKeeper 集群的搭建

    Docker 一步搞定 ZooKeeper 集群的搭建 背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 ...

  7. 分布式 PostgreSQL 集群(Citus)官方示例 - 实时仪表盘

    Citus 提供对大型数据集的实时查询.我们在 Citus 常见的一项工作负载涉及为事件数据的实时仪表板提供支持. 例如,您可以是帮助其他企业监控其 HTTP 流量的云服务提供商.每次您的一个客户端收 ...

  8. cAdvisor0.24.1+InfluxDB0.13+Grafana4.0.2搭建Docker1.12.3 Swarm集群性能监控平台

    目录 [TOC] 1.基本概念 ​ 既然是对Docker的容器进行监控,我们就不自己单独搭建cAdvisor.InfluxDB.Grarana了,本文中这三个实例,主要以Docker容器方式运行. 本 ...

  9. Solr集群的搭建以及使用(内涵zookeeper集群的搭建指南)

    1   什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

随机推荐

  1. 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. windows系统镜像 微软官方资源便捷下载教程

    今天跟小师弟学到了一个下载软件的好办法,省得到各种网站下载带有病毒,插件的资源. 这个神奇的网站叫做   MSDN, 我告诉你,这是一个私人维护的网站,里面有各种官方软件的下载地址.可以直接用下载工具 ...

  3. 求最长公共子串 Longest Common Subsequence

    最长公共子串 // Longest Common Subsequence 子串有别于子序列, 子串是连续的, 而子序列可以不连续 /*--------------------------------- ...

  4. TCP/IP 协议图--传输层中的 TCP 和 UDP

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP. TCP 是面向连接的.可靠的流协议.流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但 ...

  5. c++计算器后续(1)

    自娱自乐: 大概是一直在说的代码规范,大概是玩一玩,以上. 代码规范: 参考原文:链接 相关节选: 4 程序的版式 4.4规则:较长的语句(>80字符)要分成多行书写. 4.5规则:不允许把多个 ...

  6. easy_encode_decode

    s = input("输入:") result = '' for i in range(len(s)): result += chr(ord(s[i])^2000) print(r ...

  7. 使用android studio检测app内存泄漏【转载】

    Android开发中难免会遇到各种内存泄漏,如果不及时发现处理,会导致出现内存越用越大,可能会因为内存泄漏导致出现各种奇怪的crash,甚至可能出现因内存不足而导致APP崩溃. 一般检测android ...

  8. python open 追加

    今天操作失误,导致home目录没空间了,结果跑了3天的程序断了,还好代码可以重新运行. 读写的文件使用追加方式: # a # 打开一个文件用于追加(只写),写入内容为str # 如果该文件已存在,文件 ...

  9. showDoc项目文档管理工具

    1:下载showdoc代码文件 https://github.com/star7th/showdoc https://www.showdoc.cc/help?page_id=14 官方帮助文档 2:安 ...

  10. 随手练——O(n)解决无序数组排序后的相邻最大差值

    题目从这儿看到的 : https://mp.weixin.qq.com/s/2OXg67MfBuQjDPAJxxD8rQ,但是公众号上讲错了,问题还挺严重的. 题目知识点:桶排序. 题目:有一个无序数 ...