Добиться отказоустойчивости с консул кластера - PullRequest
0 голосов
/ 27 сентября 2018

Я создал 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

Затем я создал 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.

Как сделать эту систему отказоустойчивой, что означает, что даже при сбое консул-сервера службы, зарегистрированные на этом сервере, автоматически регистрируются на другом сервере, доступном в кластере.

Далее мне нужно знать, как консул достигает высокой доступности и отказоустойчивости при регистрации и обнаружении услуг.Надеюсь, вы получите вопрос.

1 Ответ

0 голосов
/ 08 октября 2018

Очевидно, вы можете развернуть кластер консул на своем локальном компьютере, но вы не можете ожидать какого-либо механизма устойчивости или отказоустойчивости на этом же локальном компьютере.Это потому, что ваши весенние сервисы (service_A & service_B) были настроены для идентификации сервера консула, который работает на заданном порте сервера консула в bootstrap.yml (по умолчанию 8500).

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

Таким образом, каждая служба обнаружит серверы консула, которые работают под портом 8500 (вы можете изменить его по своему желанию).Если вы используете кластер консул на том же локальном компьютере, вы не можете назначить один и тот же номер порта (8500) каждому узлу кластера, который необходимо идентифицировать.Это будет отличаться для того, чтобы работать под тем же IP-адресом.Для этого вам нужно будет развернуть каждый консул по разным ip-адресам с одинаковым номером порта 8500.

enter image description here

8301 - это крепостнойПорт локальной сети, используемый для обработки сплетен в локальной сети.Даже этот порт может быть одинаковым в каждом узле для поддержки межсетевого взаимодействия кластера.

Самый простой способ добиться этого - использовать частную подсеть в VPC AWS.

AWS VPC

И затем вы можете назначить отдельные конфигурации для каждого узла подсети с одинаковым номером порта для каждого узла сервера, чтобы он мог быть идентифицирован вашими services_A & service_B с помощью @ EnableDiscoveryClient аннотация.

Clients and Servers in separate nodes

...