NATS_11:NATS集群构建与验证
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:4222 http: 8222 cluster { 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集群就已经搭建完毕。
相关文章
- nginx+tomcat集群负载均衡(实现session复制)
- 如何快速搭建一个docker swarm集群?
- CDH构建大数据平台-集群配置优化实战之HDFS集群调优
- ElasticSearch 集群 & 数据备份 & 优化
- Redis第二十一讲 Redis高可用集群与数据分区
- solr集群构建的基本流程介绍
- 单机部署redis5.0集群环境
- Spring Boot 2.x基础教程:使用EhCache缓存集群
- 《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——1.6 服务器遭受攻击后的处理过程
- 《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——第2章 Linux网络安全运维 2.1 网络实时流量监测工具iftop
- 配置两个不同kerberos认证中心的集群间的互信
- 《Hadoop集群与安全》一第1章 构建Hadoop集群
- Linux Redis集群搭建与集群客户端实现
- 通过命令管理ceph集群
- prometheus监控redis集群
- [LeetCode] 1192. Critical Connections in a Network 查找集群内的关键连接
- Spark-----Spark 与 Hadoop 对比,Spark 集群搭建与示例运行,RDD算子简单入门
- Kubernetes 多集群管理工具Rancher 使用介绍