spring-boot - 使用 Consul Cluster 实现容错
问题描述
我已经consul
使用 localhost 中的不同端口创建了服务器集群。
我为此使用了以下命令。
服务器 1:
consul agent -server -bootstrap-expect=3 -data-dir=consul-data -ui -bind=127.0.0.1 -dns-port=8601 -http-port=8501 -serf-lan-port=8303 -serf-wan-port=8304 -server-port=8305 -node=node1
服务器 2:
consul agent -server -bootstrap-expect=3 -data-dir=consul-data2 -ui -bind=127.0.0.1 -dns-port=8602 -http-port=8502 -serf-lan-port=8306 -serf-wan-port=8307 -server-port=8308 -node=node2 -join=127.0.0.1:8303
服务器 3:
consul agent -server -bootstrap-expect=3 -data-dir=consul-data1 -ui -bind=127.0.0.1 -node=node3 -join=127.0.0.1:8303
然后我使用 spring boot 创建了 2 个微服务,service_A
称为service_B
.
Service_B
调用service_A
以获取一些数据。
两种服务都注册到上述服务器之一。
在application.properties 中:
spring.cloud.consul.port=8501 #For service_A
spring.cloud.consul.port=8502 #For service_B
这工作正常,因为 Service_B 发现 Service_A 没有任何问题。
现在,当我杀死已service_A
注册的领事服务器时,系统无法给出结果,因为Service_B
找不到Service_A
。
我应该如何使这个系统容错,这意味着即使 consul 服务器出现故障,在该服务器上注册的服务也会自动在集群中可用的另一台服务器上注册。
进一步我需要知道 consul 如何在服务注册和发现中实现高可用性和容错。希望你得到这个问题。
解决方案
显然,您可以在本地机器上部署一个 consul 集群,但您不能指望在同一台本地机器上有任何弹性机制或容错。这是因为您的 spring 服务(service_A 和 service_B)已配置为识别在 bootstrap.yml 下的给定 consul 服务器端口中运行的 consul 服务器(默认为 8500)。
spring:
cloud:
consul:
config:
watch:
enabled: true
port: 8500
discovery:
instanceId: ${spring.application.name}:${random.value}
所以每个服务都会发现在 8500 端口下运行的 consul 服务器(你可以随意改变它)。如果您在同一台本地机器上运行您的 consul 集群,则无法为需要识别的每个集群节点分配相同的端口号 (8500)。为了在相同的IP地址下运行,它将有所不同。为此,您需要将每个 consul 节点部署在具有相同端口号 8500 的不同 IP 地址下。
8301是用于处理局域网内八卦的农奴局域网端口。甚至这个端口也可以在每个节点中保持相同的集群互连。
实现这一点的最简单方法是在 AWS VPC 中使用私有子网。
然后,您可以为每个服务器节点分配具有相同端口号的每个子网节点的单独配置,以便您的 services_A 和 service_B 使用@EnableDiscoveryClient注释来识别它。
推荐阅读
- opengl-es - 编译着色器后程序停止绘制
- r - 得到一个错误,ggplot2_3.2.0 不能为每组绘制一个以上的箱线图
- python-3.x - Flask/Pymongo 我在哪里/如何应用验证?
- javascript - 是否有使用 navigator.serial 的示例站点?
- python - 如何检查我的列表是否只有 2 个可以重复的特定元素?
- node.js - 如何从环回自定义方法中检索原始正文缓冲区以验证来自 webhook POST 的条带签名?
- spring - 如何修复 spring-mvc Hibernate 中的 Autowired 依赖项失败
- xamarin - 该命令启用 Xamarin Prism 中的按钮
- html - 在 div 中添加部分背景
- php - 仅当从我的推荐网站加载网站时如何执行脚本?