Обеспечить отказоустойчивость кластера консул



Я создал кластер серверов 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 микросервисов с использованием Spring загрузки, называется service_A и service_B.

Service_B вызывает service_A, чтобы получить некоторые данные.

Обе службы регистрируются на одном из вышеуказанных серверов.

В применение.свойства:

spring.cloud.consul.port=8501  #For service_A
spring.cloud.consul.port=8502  #For service_B

Это прекрасно работает, так как Service_B обнаруживает Service_B без каких-либо проблем.

Теперь, когда я убиваю сервер консула, который service_A зарегистрировался, система не дает результатов, так как Service_B не может найти Service_A.

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

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

71   1  

1 ответ:

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

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

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

Введите описание изображения здесь

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

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

AWS VPC

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

Клиенты и серверы в отдельных узлах

    Ничего не найдено.

Добавить ответ:
Отменить.