
Доклад на тему
«Consul cluster»
Введение.
В современных приложениях часто используется микросервисная архитектура, где каждый компонент работает независимо, но все они должны взаимодействовать друг с другом. Чтобы гарантировать, что все сервисы могут найти друг друга, правильно работать и автоматически обновляться, нужна система для управления этими сервисами. Проблемы, с которыми сталкиваются без такой системы:
Трудности с масштабированием — когда появляется новый сервис, нужно вручную обновлять конфигурации и настройки.
Ошибки и сбои — без автоматического мониторинга сервисы могут выйти из строя, и система не заметит это вовремя.
Устаревшие конфигурации — без централизованного хранилища настроек сервисы могут работать с неверными данными.
Медленное реагирование на изменения — в больших системах обновления вручную занимают много времени.
Consul — это инструмент с открытым исходным кодом от HashiCorp, предназначенный для решения этих задач. Он предоставляет способы для обнаружения сервисов, управления конфигурациями, а также для обеспечения высокой доступности и надежности через использование кластеров.
Что было до Consul Cluster?
До появления таких инструментов как Consul Cluster задачи решались менее эффективно и с большим количеством ручных операций. Ранее для этого часто использовались такие инструменты, как:
DNS-системы — для поиска сервисов, но они не подходят для динамично изменяющейся инфраструктуры.
Apachi Zookeeper — для координации сервисов, но с ним сложно работать.
Etcd — для хранения конфигураций, но он тоже не так удобен для всей инфраструктуры.
Consul был создан, чтобы решить эти проблемы более гибко и масштабируемо. Он предоставляет все необходимые функции: сервисную регистрацию, обнаружение, мониторинг и управление конфигурациями.
Consul cluster.
Consul Cluster — это многофункциональная система для управления конфигурациями и сервисами, используемая в современных микросервисных архитектурах и контейнеризованных приложениях. Она решает несколько важных задач:
Обнаружение сервисов (Service Discovery): позволяет приложениям находить друг друга через централизованный каталог сервисов. Это особенно важно в средах с динамическим масштабированием (например, в облаке или при использовании Kubernetes).
Управление конфигурациями (Configuration Management): хранение и распределение конфигураций для различных компонентов системы, что позволяет менять параметры конфигурации без перезагрузки сервисов.
Здоровье сервисов (Health Checking): мониторинг состояния сервисов и компонентов, что помогает автоматически исключать из работы неработающие сервисы.
Межсервисная связь (Service Mesh): предоставление механизмов для связи между сервисами, включая шифрование трафика и управление доступом.
Consul Cluster — это группа серверов, которая работает совместно для обеспечения надежности и масштабируемости системы. Кластер обеспечивает хранение данных (например, конфигурации или состояния сервисов) с репликацией и синхронизацией между несколькими серверами.
Концептуально кластер Consul состоит из двух типов узлов:
Consul серверы - это специальные компьютеры, которые работают с программой Consul, которая обеспечивает сетевое взаимодействие между сервисами.
Агенты - это программы, которые работают на тех же компьютерах, что и сервисы, и регистрируют их в кластере Consul.
Серверы в кластере используют алгоритм Raft для синхронизации данных и обеспечения консенсуса. Это позволяет системе оставаться согласованной, даже если один или несколько серверов выйдут из строя. Серверы и агенты обмениваются информацией о состоянии сервисов с помощью протокола gossip, который гарантирует быструю и надежную синхронизацию данных.
Практическая часть:
Работа через Docker-образ
Образ docker использую потому что Сonsul под санкциями и нашел способ запустить через контейнеры (т.е временный Consul)
1.интерфейс
Обзор
Панель управления Consul предоставляет пользователю обзор состояния кластера, включая информацию о серверах, узлах и сервисах, работающих в системе. В данный момент он не доступен т.к я работаю через Docker-образ
Сервисы
Раздел отображает все сервисы, доступные в кластере. Пользователь может просматривать список активных и неактивых сервисов, их статус и метаданные, а также управлять их конфигурацией.
Узлы
Здесь отображается информация о всех узлах (нодах) в кластере и их состояние
Ключи/Значения
Consul поддерживает систему хранения ключей и значений. Этот раздел позволяет просматривать и управлять хранимыми данными, которые могут быть использованы для конфигурации сервисов или хранения метаданных.
Намерения
Намерения — это правила, которые определяют, как сервисы могут взаимодействовать друг с другом. (не работает)
Управление доступом
В этом разделе настроек можно управлять правами доступа в Consul:
Токены
Токены используются для аутентификации и авторизации в Consul. С помощью токенов можно ограничить доступ к ресурсам и операциям на основе ролей и политик.
Политики
Политики определяют правила и ограничения для доступа к данным и действиям в системе. Здесь можно настроить, какие пользователи и сервисы могут выполнять определенные операции.
Роли
Роли в Consul позволяют группировать пользователей и сервисы, определяя, какие действия они могут выполнять в рамках определенных политик.
Методы аутентификации
Здесь настраиваются различные способы аутентификации для пользователей и сервисов, включая использование токенов и других
Организация
Этот раздел посвящен управлению взаимодействием между различными кластерами и узлами.
Пиры
Список всех пиров (других экземпляров Consul), с которыми соединен ваш кластер. Это позволяет видеть, как каждый узел взаимодействует с другими, а также выполнять операции синхронизации и репликации данных.
2.Установка и настройка контейнеров
Установка Consul Cluster с помощью Docker (т.к программа заблокирована на территории РФ)
sudo apt update
sudo apt install docker.io
добавлю узел в контейнер
sudo docker run -d --name=consul-server-33 -e CONSUL_BIND_INTERFACE=eth0 -e CONSUL_CLIENT_INTERFACE=eth0 -p 8533:8500 -p 8633:8600/udp hashicorp/consul:1.15.0 consul agent -data-dir=/consul/data -node=agent -join=172.17.0.2 -client=0.0.0.0
пояснение:
-d: Запуск в фоне.
--name=consul-server-33: Присваивает имя контейнеру.
Команда -e CONSUL_BIND_INTERFACE=eth0 Использует интерфейс eth0 для подключения к другим сервисам
команда -e CONSUL_CLIENT_INTERFACE=eth0 Устанавливает интерфейс для обработки запросов от клиентов.
команда -p 8533:8500 Открывает порт 8533 на хосте для доступа к интерфейсу и API Consul
Команда -p 8633:8600/udp: Прокси-порт для DNS-сервиса Consul через порт 8633
команда -data-dir=/consul/data Указывает директорию для хранения данных
Команда -node=agent Устанавливает имя узла (агента)
Команда -join=172.17.0.2 Подключается к кластеру по адресу 172.17.0.2
Команда -client=0.0.0.0 Разрешает подключение от любых клиентов
Освободить память (если вдруг есть контейнер с таким же названием)
sudo docker rm -f consul-server-33
Запустим первый сервер в кластере. Это будет основой для всех других узлов.
sudo docker run -d \
--name=consul-server-1 \
-e CONSUL_BIND_INTERFACE=eth0 \
-p 8500:8500 \
-p 8600:8600/udp \
hashicorp/consul:1.15.0 \
consul agent -server -data-dir=/consul/data -bind=0.0.0.0 -client=0.0.0.0 -bootstrap-expect=3
-ui=true
команда -server указывает, что этот контейнер будет сервером в кластере
команда -bootstrap-expect=3 указывает, что кластер ожидает 3 сервера
команда -bind=0.0.0.0 позволяет привязать Consul к любому IP
команда -client=0.0.0.0 позволяет доступ к Consul API с любого устройства
Теперь запускаем еще два сервера, которые будут частью кластера:
sudo docker run -d \
--name=consul-server-33 \
-e CONSUL_BIND_INTERFACE=eth0 \
-p 8533:8500 \
-p 8633:8600/udp \
hashicorp/consul:1.15.0 \
consul agent -server -data-dir=/consul/data -bind=0.0.0.0 -client=0.0.0.0 -join=172.17.0.1
sudo docker run -d \
--name=consul-server-3 \
-e CONSUL_BIND_INTERFACE=eth0 \
-p 8502:8500 \
-p 8602:8600/udp \
hashicorp/consul:1.15.0 \
consul agent -server -data-dir=/consul/data -bind=0.0.0.0 -client=0.0.0.0 -join=172.17.0.1
проверяем наличие узлов в контейнерах в консоли
sudo docker ps (если контейнер есть в списке то ок)
команда которая выводит лидера кластера
curl http://localhost:8500/v1/status/leader
3.настройка ключей
работа с ключами доступа
curl --request PUT --data 'my_value' http://localhost:8500/v1/kv/my_key2
получим ключ
curl http://localhost:8500/v1/kv/my_key2
или можно создать в графическом интерфейсе
Откройте вкладку Key/Value и создайте пару ключ-значение на сервере.
На клиенте выполните запрос к серверу через консоль:
curl http://localhost:8500/v1/kv/hello (можно посмотреть ключ)
4.Проверка подключений
Тут видно все узлы и их состояние
5. Проверки
Логи: sudo docker logs consul-server-1
Обзор узлов: consul agent -server -data-dir=/consul/data -join=172.17.0.2 (недоступна т.к у меня образ)
Вывод
В результате работы мы рассмотрели историю создания Consul claster, а также разобрались с функционалом и назначением этой программы. Наглядно изучили механизмы работы программы в графическом интерфейсе
Список литературы
1)документация Consul - https://developer.hashicorp.com/consul/docs
2)Туториалы Consul - https://developer.hashicorp.com/consul/tutorials
3)git (работа с Raft) - https://raft.github.io/
4) git (Consul) - https://github.com/hashicorp/consul
5)habr (Consul) - https://habr.com/ru/articles/278085/
6) установка и настройка - https://luxmsbi.com/docs/guides/sysadm-guide/appendix/dbcluster/