【问题标题】:Achieve Fault Tolerance with Consul Cluster使用 Consul Cluster 实现容错
【发布时间】:2019-03-03 06:59:26
【问题描述】:

我使用本地主机中的不同端口创建了consul 服务器集群。

我为此使用了以下命令。

服务器 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_Aservice_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 Cloud 问题
  • 是的,我怎样才能让我的服务保持连接到 consul 集群?

标签: spring-boot high-availability consul service-discovery fault-tolerance


【解决方案1】:

显然,您可以在本地机器上部署一个 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 是 serf LAN 端口,用于处理 LAN 中的 gossip。甚至这个端口可以在每个节点都相同,以保持集群互联。

实现这一目标的最简单方法是在 AWS VPC 中使用私有子网。

然后您可以为每个服务器节点分配具有相同端口号的每个子网节点的单独配置,以便您的 services_A 和 service_B 使用 @EnableDiscoveryClient 注释来识别它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多