簡體   English   中英

通過領事集群實現容錯

[英]Achieve Fault Tolerance with Consul Cluster

我使用本地主機中的不同端口創建了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創建了兩個微服務,分別稱為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 ,系統無法給出結果。

我應該如何使該系統容錯,這意味着即使領事服務器出現故障,在該服務器上注冊的服務也會自動在群集中可用的另一台服務器上注冊。

此外,我需要知道領事如何在服務注冊和發現中實現高可用性和容錯能力。 希望您能收到問題。

顯然,您可以在本地計算機上部署領事群集,但是不能期望在同一本地計算機上具有任何彈性機制或容錯能力。 這是因為您的spring服務(service_A和service_B)已配置為標識在給定領事服務器端口中bootstrap.yml(默認值為8500)下運行的領事服務器。

 spring:
   cloud:
    consul:
     config:
      watch:
       enabled: true
     port: 8500
     discovery:
      instanceId: ${spring.application.name}:${random.value}

因此,每個服務都將發現在8500端口下運行的領事服務器(您可以根據需要進行更改)。 如果在同一台本地計算機上運行Consul群集,則無法為需要標識的每個群集節點分配相同的端口號(8500)。 為了在相同的IP地址下運行,它將有所不同。 為此,您需要將每個領事節點部署在具有相同端口號8500的不同IP地址下。

在此處輸入圖片說明

8301是用於處理LAN中八卦的農奴LAN端口。 甚至每個節點上的此端口也可以相同,以維持群集的相互連接。

實現此目的的最簡單方法是在AWS VPC中使用私有子網。

AWS VPC

然后,您可以為每個子網節點分配單獨的配置,並為每個服務器節點分配相同的端口號,以便您的services_A和service_B可以使用@EnableDiscoveryClient注釋對其進行標識。

客戶端和服務器在單獨的節點中

@Bazinga Punk您好,如果您尚未配置spring.cloud.consul.host,服務啟動時會注冊哪個主機?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM