• Docker搭建NSQ实时分布式消息集群


    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
  • 相关阅读:
    React之改变页面上方图标
    箭头函数参数解构
    h5项目(特别是vue)缓存严重的解决方案,配合nginx
    springboot中配置urlrewrite实现url伪静态强化网站seo
    使用docker创建mongodb
    mac下sourcetree创建git分支和合并分支
    在系统下文件上传报错:The temporary upload location [/tmp/tomcat.xxx/work/Tomcat/localhost/ROOT] is not valid
    解决Mac下SourceTree每次都让输入密码的问题
    快速生成mysql上百万条测试数据
    10年前错过比特币,如今有斯坦福区块链项目pi币,对标btc,手机免费挖矿详细教程。
  • 原文地址:https://www.cnblogs.com/Hollson/p/9160718.html
Copyright © 2020-2023  润新知