etcd: База данных для пар ключ-значение

В настоящее время многие разработчики используют распределенные системы, такие как облачные платформы. В результате масштабируемые кластеры заменяют отдельные базы данных, а ИТ-менеджеры сталкиваются с новыми проблемами. Среди актуальных тем — сетевые сбои, задержки, конечная пропускная способность данных, малые системные компоненты и транспортная безопасность.

Одним из возможных решений является создание центрального хранилища для изменяемых данных, которое было бы отказоустойчивым, отказоустойчивым и последовательным. Именно здесь на помощь приходит etcd.

Что такое etcd?

etcd — это распределенное хранилище ключевых значений, разработанное командой CoreOS. Как и многие другие инструменты, работающие в среде Docker, etcd был написан на языке программирования Google — Go. Целью разработчиков было создание безопасного хранилища для критически важных данных в распределенных приложениях с простыми функциями управления.

Название происходит от названия конфигурационных файлов в операционных системах GNU/Linux: «/etc». Дополнительная буква «d» означает «distributed». etcd сейчас является открытым исходным кодом и управляется Cloud Native Computing Foundation.

Как работает etcd?

Чтобы понять работу etcd, необходимо знать три ключевые концепции, связанные с управлением хранилищами и кластерами:

  • Лидер
  • Выборы
  • Термины

В системах на базе Raft кластер выбирает лидера на определенный срок. Лидер обрабатывает все запросы на хранение, которые требуют консенсуса кластера. Запросы, не требующие консенсуса кластера (например, чтение), могут быть выполнены любым членом кластера. Если лидер принимает изменение, etcd обеспечивает репликацию информации на узлы-последователи. Как только последователи подтверждают получение, лидер фиксирует изменения.

Подобная система, в которой лидер использует базу данных etcd для координации изменений с узлами кластера, очень важна для распределенных приложений. Если изменения могут повлиять на работу узла, он может заблокировать их. Это гарантирует, что приложение останется стабильным, и сводит к минимуму связанные с этим проблемы.

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

Для того чтобы на выборах всегда было большинство, в кластере должно быть нечетное количество узлов. По соображениям производительности кластеры не должны иметь более семи узлов.

Совет

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

Преимущества etcd

Помимо обеспечения стабильной работы приложений, etcd обладает множеством других преимуществ:

  • Полная репликация: Все хранилище доступно на каждом узле кластера.
  • Высокая доступность: базы данных etcd разработаны таким образом, чтобы избежать единых точек отказа при возникновении аппаратных или сетевых проблем.
  • Согласованность: При каждом чтении возвращается последняя запись на всех узлах.
  • Простота использования: etcd имеет четко определенный, удобный API (gRPC), основанный на REST и JSON.
  • Безопасность: etcd автоматически реализует безопасную передачу данных через SSL/TLS и предлагает опциональную аутентификацию клиентского сертификата.
  • Скорость: etcd имеет базовую скорость 10 000 записей в секунду.
  • Надежность: Алгоритм Raft гарантирует, что хранилище всегда распределяется корректно.

Пример etcd: Хранилище ключевых значений на практике

Разработчики внедрили etcd в Kubernetes в 2014 году, что привело к быстрому расширению сообщества etcd. Облачные провайдеры, такие как AWS, Google Cloud Platform и Azur, последовали их примеру и успешно интегрировали etcd в свои производственные среды.

Но давайте вернемся к первому примеру etcd — Kubernetes. Kubernetes сама по себе является распределенной системой, которая работает на кластере из нескольких машин. Это означает, что она может многое выиграть от такого распределенного хранилища данных, как etcd, которое обеспечивает безопасность критически важных данных. В Kubernetes база данных etcd выступает в качестве основного хранилища данных, содержащего данные о конфигурации, состоянии и метаданные. Когда запрашиваются изменения, etcd убеждается, что все узлы в кластере Kubernetes могут читать и записывать данные. В то же время, он использует «функцию наблюдения» для мониторинга фактического и идеального состояния системы. Если эти два состояния расходятся, Kubernetes вносит необходимые изменения для их согласования.

Примечание

Команда «kubectl» извлекает считанные значения из базы данных etcd, а изменения, сделанные с помощью «kubectl apply», создают или обновляют записи в хранилище etcd. Системные сбои также автоматически изменяют значения в etcd.

Оцените статью
cdelat.ru
Добавить комментарий