NATS服务集群化

  NATS支持每一个服务按照集群模式方式运行。你可以将这些服务组织在一起形成一个集群来提高服务器的容量的消息传递系统,并可以提升整个系统的弹性话和高可用性。

  注意,NATS集群服务器转发是通过一个跳跃来完成的。这意味着每个gnatsd当从一个客户端接收到消息之后通过路由信息会立即转发给对应注册的gnatsd实例。接收到的消息通过一个路由才会分发给本地的客户。因此一个完整的集群网,或完全图,建议NATS以功能作为目的方式来形象的描述整个过程。

概览

  除了可以监听一个客户端应用端口,gnatsd还可以监听一个“集群” URL(-cluster 选项)。另外,gnatsd服务器可以将该URL添加到它其中的 -routes 参数用以加入集群。这些选项可以指定在一个配置文件。

  例如:

  非集群化的启动

 gnatsd -p 4222 -m 8222

  一个最简单的集群化启动

  # Server A on 10.10.0.1
gnatsd -p 4222 -cluster nats://10.10.0.1:5222 # Server B on 10.10.0.2
gnatsd -p 4222 -cluster nats://10.10.0.2:5222 -routes nats://10.10.0.1:5222

  或者采用另外一种方式

   # Server A on 10.10.0.1
gnatsd -p 4222 -cluster nats://10.10.0.1:5222 -routes nats://10.10.0.2:5222 # Server B on 10.10.0.2
gnatsd -p 4222 -cluster nats://10.10.0.2:5222 -routes nats://10.10.0.1:5222

  客户端连接到集群中的任何一个服务器都将会保持连接到服务器集群,即使它最初的连接被关闭了,只要至少有一个服务器存活那么就可以连上整个集群。

实例

  首先,下面的例子将会演示如何在同一个主机上运行3个服务器组建的集群。我们将先启动第一个服务并使用 -d 命令行参数产生调试信息

 gnatsd -a 127.0.0.1 -p 4222 -m 8222 -cluster nats://127.0.0.1:4248 -D

  或者我们使用类似的配置文件实现和上面一样的效果,具体配置文件我们命名为 seed.conf ,内容如下:

# Cluster Seed Node
listen: 127.0.0.1:
http: cluster {
listen: 127.0.0.1:
}

  那么我们可以通过指定配置文件启动服务,其中 -config 参数可以简写为:-c

 gnatsd -config ./seed.conf -D

  运行启动服务会产生以下日志内容:

[] // ::46.007119 [INF] Starting nats-server version 0.9.
[] // ::46.007215 [DBG] Go build version go1.
[] // ::46.007224 [INF] Starting http monitor on 127.0.0.1:
[] // ::46.007347 [INF] Listening for client connections on 127.0.0.1:
[] // ::46.007391 [DBG] Server id is s03C0PiftvdfFO3MnQzrft
[] // ::46.007396 [INF] Server is ready
[] // ::46.007778 [INF] Listening for route connections on 127.0.0.1:

  接下来让我们启动另外两个服务,它们路由都指向第一个服务

 gnatsd -a 127.0.0.1 -p 5222 -m 8222 -cluster nats://localhost:5248 -routes nats://localhost:4248 -D

  在同一个主机上运行时,我们需要通过 -p 参数来指定不同的客户端连接端口以及通过参数 -cluster 来指定对应的集群用于接受其他路由。注意,参数 -routes 指定 参数 -cluster 地址为第一个服务地址(localhost:4248)
  查看日志,可以看到它连接和注册一个路由到第一个启动的服务信息

[] // ::04.551954 [INF] Starting nats-server version 0.9.
[] // ::04.552038 [DBG] Go build version go1.
[] // ::04.552047 [INF] Starting http monitor on 127.0.0.1:
[] // ::04.552139 [INF] Listening for client connections on 127.0.0.1:
[] // ::04.552170 [DBG] Server id is FZz1WSobE9ltpRnRIvVyBx
[] // ::04.552174 [INF] Server is ready
[] // ::04.552266 [INF] Listening for route connections on localhost:
[] // ::04.556239 [DBG] Trying to connect to route on localhost:
[] // ::04.557549 [DBG] 127.0.0.1: - rid: - Route connection created
[] // ::04.557578 [DBG] 127.0.0.1: - rid: - Route connect msg sent
[] // ::04.557891 [DBG] 127.0.0.1: - rid: - Registering remote route "pC3oopm6SevB2Di1o5L5I3"
[] // ::04.557905 [DBG] 127.0.0.1: - rid: - Route sent local subscriptions

  查看第一个服务的日志信息,我们可以看到反馈日志信息

[] // ::04.557578 [DBG] 127.0.0.1: - rid: - Route connection created
[] // ::04.557937 [DBG] 127.0.0.1: - rid: - Registering remote route "FZz1WSobE9ltpRnRIvVyBx"
[] // ::04.557948 [DBG] 127.0.0.1: - rid: - Route sent local subscriptions

  最后,我们来启动第三个也就是最后一个服务

 gnatsd -a 127.0.0.1 -p 6222 -m 8224 -cluster nats://localhost:6248 -routes nats://localhost:4248 -D

  当前服务打印日志信息如下

[] // ::45.684036 [INF] Starting nats-server version 0.9.
[] // ::45.684123 [DBG] Go build version go1.
[] // ::45.684132 [INF] Starting http monitor on 127.0.0.1:
[] // ::45.684237 [INF] Listening for client connections on 127.0.0.1:
[] // ::45.684266 [DBG] Server id is VFCs2SMxmVnkcCKar2eQbq
[] // ::45.684270 [INF] Server is ready
[] // ::45.684357 [INF] Listening for route connections on localhost:
[] // ::45.686608 [DBG] Trying to connect to route on localhost:
[] // ::45.687497 [DBG] 127.0.0.1: - rid: - Route connection created
[] // ::45.687518 [DBG] 127.0.0.1: - rid: - Route connect msg sent
[] // ::45.687862 [DBG] 127.0.0.1: - rid: - Registering remote route "pC3oopm6SevB2Di1o5L5I3"
[] // ::45.687875 [DBG] 127.0.0.1: - rid: - Route sent local subscriptions
[] // ::45.688174 [DBG] 127.0.0.1: - rid: - Route connection created
[] // ::45.688414 [DBG] 127.0.0.1: - rid: - Registering remote route "FZz1WSobE9ltpRnRIvVyBx"
[] // ::45.688426 [DBG] 127.0.0.1: - rid: - Route sent local subscriptions

  再来看第一个服务终端日志打印信息

[] // ::45.687523 [DBG] 127.0.0.1: - rid: - Route connection created
[] // ::45.687829 [DBG] 127.0.0.1: - rid: - Registering remote route "VFCs2SMxmVnkcCKar2eQbq"
[] // ::45.687842 [DBG] 127.0.0.1: - rid: - Route sent local subscriptions

  而第二个服务终端也会打印出相应连接信息如下

[] // ::45.687990 [DBG] Trying to connect to route on 127.0.0.1:
[] // ::45.688224 [DBG] 127.0.0.1: - rid: - Route connection created
[] // ::45.688235 [DBG] 127.0.0.1: - rid: - Route connect msg sent
[] // ::45.688383 [DBG] 127.0.0.1: - rid: - Registering remote route "VFCs2SMxmVnkcCKar2eQbq"
[] // ::45.688395 [DBG] 127.0.0.1: - rid: - Route sent local subscriptions

  从以上的日志信息可以看出,一个完整的网络NATS集群就已经搭建完毕。

NATS_11:NATS集群构建与验证的更多相关文章

  1. Orleans的集群构建

    Orleans的集群构建 这是Orleans系列文章中的一篇.首篇文章在此 听闻一周前,微软公布了.net core2.0,以及各种各样的其他core2.0.大家都很兴奋.微妈的诚意真是满满的.这次开 ...

  2. RabbitMQ从零到集群高可用(.NetCore5.0) -高可用集群构建落地

    系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...

  3. 学习Hadoop+Spark大数据巨量分析与机器学习整合开发-windows利用虚拟机实现模拟多节点集群构建

    记录学习<Hadoop+Spark大数据巨量分析与机器学习整合开发>这本书. 第五章 Hadoop Multi Node Cluster windows利用虚拟机实现模拟多节点集群构建 5 ...

  4. Mongodb分片集群技术+用户验证

    随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...

  5. Elasticsearch-6.7.0系列(二)ES集群安装与验证

    准备3台centos7机器/虚拟机,每台都安装上elasticsearch6.7.0 ,安装过程参考我的另一篇博客<Elasticsearch-6.7.0系列(一)9200端口 .tar.gz版 ...

  6. [k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成

    另一个结合harbor自动构建镜像的思路: 即code+baseimage一体的方案 - 程序员将代码提交到代码仓库gitlab - 钩子触发jenkins master启动一次构建 - jenkin ...

  7. spark集群构建

    一.spark启动有standalong.yarn.cluster,具体的他们之间的区别这里不在赘述,请参考官网.本文采用的是standalong模式进行搭建及将接使用. 1.首先去官网下载需要的sp ...

  8. Elasticsearch 7.1.1 集群 + 配置身份验证

    一.安装Elasticsearch 1.1 环境说明 Centos7.6 Elasticsearch7.1.1 #挂载数据盘 fdisk /dev/vdb n,p,,回车,回车,wq fdisk -l ...

  9. elasticsearch集群安装+安全验证+kibana安装

    准备环境 启动4个centos容器, 并暴露相对应端口 (我的本机ip为172.16.1.236,以下涉及到的地方需要修改为自己的ip) node_name ip http port transpor ...

随机推荐

  1. 互评Alpha作品——Hello World!团队作品空天猎

    基于NABCD评论作品 1.Need需求:市面上同类型的手机及PC端飞行射击类游戏有很多,所以从需求方面来说,这款游戏的潜在客户非常有局限性.近些年较火的飞行射击类游戏,例如腾讯14年发行的<全 ...

  2. 团队作业7——第二次项目冲刺(Beta版本12.04——12.07)

    1.当天站立式会议照片 本次会议在5号公寓3楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据项目要求还没做的完成. 2.每个人的工作 经过会议讨论后确定了每个人的分工 组员 任务 陈福鹏 实现 ...

  3. 3、第一个Python程序

    现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需 ...

  4. mac下搭建MySql环境基本步骤

    准备工作做完后,开始: 创建数据库 step1: 在mac中->系统偏好设置->最下边点MySQL 在弹出页面中 关闭mysql服务(点击stop mysql server) step2: ...

  5. 基于windowsphone7的控制ppt播放

    最近突然想起了一个学长的一个利用手机控制ppt播放的一个创意,并想将其在windows phone7上实现一下. 经过几天的努力已经可以控制ppt的播放,暂停,上一张,下一张了,并且电脑会将当前ppt ...

  6. n位格雷曼实现

    参考: 格雷码的实现 问题:产生n位元的所有格雷码.   格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同. 例如以下为 ...

  7. HDU 2107 Founding of HDU

    http://acm.hdu.edu.cn/showproblem.php?pid=2107 Problem Description 经过慎重的考虑,XHD,8600, LL,Linle以及RPG等A ...

  8. GDI+缩放图片

    uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ; var  Bitmap1: TGPBitmap;  Bitmap2: TBitmap;  Graphic: TGPGraphi ...

  9. 关于.net服务启动注册到zookeeper,但是注册节点20分钟自动消失解决办法

        ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,作用简单描述就是相当于一个中介,服务提供者将服务注册到zk,服务调用者直接从zk获取,zk的作用就是协调     最近碰到公 ...

  10. [转帖]DAS、SAN、NAS

    http://blog.itpub.net/26736162/viewspace-2214368/ DAS(Direct-attached Storage) 直连存储 直连式存储与服务器主机之间的连接 ...