NATS服务集群化

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

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

概览

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

  例如:

  非集群化的启动

 gnatsd -p 4222 -m 8222

  一个最简单的集群化启动

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

  或者采用另外一种方式

   # Server A on 10.10.0.1gnatsd -p 4222 -cluster nats://10.10.0.1:5222 -routes nats://10.10.0.2:5222# Server B on 10.10.0.2gnatsd -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:4222
http: 8222cluster {listen: 127.0.0.1:4248
}

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

 gnatsd -config ./seed.conf -D

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

[12064] 2017/04/06 18:58:46.007119 [INF] Starting nats-server version 0.9.6
[12064] 2017/04/06 18:58:46.007215 [DBG] Go build version go1.8
[12064] 2017/04/06 18:58:46.007224 [INF] Starting http monitor on 127.0.0.1:8222
[12064] 2017/04/06 18:58:46.007347 [INF] Listening for client connections on 127.0.0.1:4222
[12064] 2017/04/06 18:58:46.007391 [DBG] Server id is s03C0PiftvdfFO3MnQzrft
[12064] 2017/04/06 18:58:46.007396 [INF] Server is ready
[12064] 2017/04/06 18:58:46.007778 [INF] Listening for route connections on 127.0.0.1:4248

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

 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)
  查看日志,可以看到它连接和注册一个路由到第一个启动的服务信息

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

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

[12069] 2017/04/06 19:17:04.557578 [DBG] 127.0.0.1:63928 - rid:1 - Route connection created
[12069] 2017/04/06 19:17:04.557937 [DBG] 127.0.0.1:63928 - rid:1 - Registering remote route "FZz1WSobE9ltpRnRIvVyBx"
[12069] 2017/04/06 19:17:04.557948 [DBG] 127.0.0.1:63928 - rid:1 - Route sent local subscriptions

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

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

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

[12092] 2017/04/06 19:21:45.684036 [INF] Starting nats-server version 0.9.6
[12092] 2017/04/06 19:21:45.684123 [DBG] Go build version go1.8
[12092] 2017/04/06 19:21:45.684132 [INF] Starting http monitor on 127.0.0.1:8224
[12092] 2017/04/06 19:21:45.684237 [INF] Listening for client connections on 127.0.0.1:6222
[12092] 2017/04/06 19:21:45.684266 [DBG] Server id is VFCs2SMxmVnkcCKar2eQbq
[12092] 2017/04/06 19:21:45.684270 [INF] Server is ready
[12092] 2017/04/06 19:21:45.684357 [INF] Listening for route connections on localhost:6248
[12092] 2017/04/06 19:21:45.686608 [DBG] Trying to connect to route on localhost:4248
[12092] 2017/04/06 19:21:45.687497 [DBG] 127.0.0.1:4248 - rid:1 - Route connection created
[12092] 2017/04/06 19:21:45.687518 [DBG] 127.0.0.1:4248 - rid:1 - Route connect msg sent
[12092] 2017/04/06 19:21:45.687862 [DBG] 127.0.0.1:4248 - rid:1 - Registering remote route "pC3oopm6SevB2Di1o5L5I3"
[12092] 2017/04/06 19:21:45.687875 [DBG] 127.0.0.1:4248 - rid:1 - Route sent local subscriptions
[12092] 2017/04/06 19:21:45.688174 [DBG] 127.0.0.1:63949 - rid:2 - Route connection created
[12092] 2017/04/06 19:21:45.688414 [DBG] 127.0.0.1:63949 - rid:2 - Registering remote route "FZz1WSobE9ltpRnRIvVyBx"
[12092] 2017/04/06 19:21:45.688426 [DBG] 127.0.0.1:63949 - rid:2 - Route sent local subscriptions

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

[12069] 2017/04/06 19:21:45.687523 [DBG] 127.0.0.1:63948 - rid:2 - Route connection created
[12069] 2017/04/06 19:21:45.687829 [DBG] 127.0.0.1:63948 - rid:2 - Registering remote route "VFCs2SMxmVnkcCKar2eQbq"
[12069] 2017/04/06 19:21:45.687842 [DBG] 127.0.0.1:63948 - rid:2 - Route sent local subscriptions

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

[12083] 2017/04/06 19:21:45.687990 [DBG] Trying to connect to route on 127.0.0.1:6248
[12083] 2017/04/06 19:21:45.688224 [DBG] 127.0.0.1:6248 - rid:2 - Route connection created
[12083] 2017/04/06 19:21:45.688235 [DBG] 127.0.0.1:6248 - rid:2 - Route connect msg sent
[12083] 2017/04/06 19:21:45.688383 [DBG] 127.0.0.1:6248 - rid:2 - Registering remote route "VFCs2SMxmVnkcCKar2eQbq"
[12083] 2017/04/06 19:21:45.688395 [DBG] 127.0.0.1:6248 - rid:2 - Route sent local subscriptions

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

转载于:https://www.cnblogs.com/liang1101/p/6674717.html

NATS_11:NATS集群构建与验证相关推荐

  1. Docker——docker-registry私有仓库集群构建

    摘要 随着docker使用的镜像越来越多,就需要有一个保存镜像的地方,这就是仓库.目前常用的两种仓库:公共仓库和私有仓库.最方便的就是使用公共仓库上传和下载,下载公共仓库的镜像是不需要注册的,但是上传 ...

  2. KubeSphere——KubeSphere集群构建实战

    摘要 KubeSphere 愿景是打造一个以 Kubernetes 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支 ...

  3. Orleans的集群构建

    听闻一周前,微软公布了.net core2.0,以及各种各样的其他core2.0.大家都很兴奋.微妈的诚意真是满满的.这次开源势头让我感觉到了微妈的技术实力之雄厚.我在这里祝福C#越来越好.细心的人似 ...

  4. 基于YARN集群构建运行PySpark Application

    文章转载:https://www.tuicool.com/articles/eaYVN3v Spark Application可以直接运行在YARN集群上,这种运行模式,会将资源的管理与协调统一交给Y ...

  5. kubernetes入门到精通(一):内容编排与k8s介绍,集群构建教程,如何开启dashboard

    集群环境容器部署的困境 怎么分配这 10 台服务器?2 万台呢? 容器编排工具 docker compose,单机容器编排工具 docker swam 跨主机的,集群容器编排工具 kubernetes ...

  6. mongodb 集群shard_mongodb集群构建方案(二)

    0.创建网段 docker network create mongo 1.编写yaml文件,,这里我命名fates-mongo-compose.yaml 以下这个文件,建立3个mongo shard服 ...

  7. Docker 中的网络管理与集群构建

    Docker中的网络与数据管理 一.Docker网络管理 1.Docker默认网络管理 docker的网络模式 注:docker有三种网络模式,默认的为bridge,配置后可以和宿主机通信,host和 ...

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

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

  9. MongodDB集群设置登录账号密码(增加key-file以供集群内部相互验证身份)

    在部署mongodb集群的时候,有些安全性要求比较高的地方,需要启用密码验证的方式,登录mongo集群. 下面的方式是在mongodb 3.6版本的基础上,3个节点的集群里设置的. 生成集群验证key ...

  10. DockerCompose MongoDB 副本集(集群) (客户端验证密码 - 集群内部使用mongodbKeyfile验证 ) 部署

    本部署MongoDB副本集是没有用其他的配置什么的(例如: mongodb-compass).是最简单的一个 我是为了mongodb的事务才配置的这个副本集,要使用mongodb的事务必须要副本集. ...

最新文章

  1. 才知道百度也提供了智能DNS服务 - 加速乐
  2. Serendipity解决IE缓存为0
  3. RDCL报表的两种使用方法/为DataSet添加两个Table_AX
  4. 【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序...
  5. 你对Java网络编程了解的如何?Java BIO 网络编程 | Netty 前期知识
  6. Javascript 盲区和 操作实例 笔记
  7. Dubbo项目简单实践
  8. Git(4):远程仓库
  9. c语言的case有什么作用,c语言case的用法
  10. 摄像头黑屏等问题及解决方案汇总
  11. win10网络诊断为DNS服务器未响应,Win10系统下电脑无法连接网络诊断提示DNS服务器未响应解决方法...
  12. 对《java程序员上班那点事》笔者对数组占用内存质疑
  13. 英语四级计算机二级的微信推文,简明·实用 | 瞬间高大上的微信公众号推文制作...
  14. 不纠缠的协议书怎么写_保证书互不纠缠怎么写
  15. 怎么将pdf转换成word?
  16. 最近三年收藏网站,做一次云备份
  17. Gdk-CRITICAL **: IA__gdk_drawable_get_size: assertion `GDK_IS_DRAWABLE (drawable)‘ failed
  18. 《传奇4》背后公司股价涨幅400%,秘密或在“区块链”?
  19. 重磅并购频现大风口下光伏企业待重新估值
  20. [Github] 把自己做完的代码提交(commit以及push)到线上公共项目中

热门文章

  1. 有的编译器,for (i=1; i 《 1; i++)会执行循环体
  2. 最近几天,VirtualBox虚拟机坏了多次,备份很重要
  3. 周报中竟然出现学习时间,主管怎么当的
  4. 绝大多数程序员不会测试
  5. mysql linux 表名区分大小写吗_MySQL在linux下的表名如何不区分大小写
  6. java 地图渲染_离屏渲染在车载导航中的应用
  7. php 检查txt中全角大写字母的个数
  8. java怎么让二维数组不重复_java - 如何创建具有随机产生的,非重复数二维数组? [重复] - SO中文参考 - www.soinside.com...
  9. matlab ctrl c,Matlab:实现CTRL + C的功能,但在代码中
  10. data1 op data2 c语言,编写一个简单计算器程序,输入格式为:data1 op data2。其中data1和data2是参加...