В standalone-установке Stronghold работает как сервис Linux (systemd) на отдельных серверах. Здесь администратор сам управляет конфигурацией, TLS-сертификатами, распечатыванием и сетью. Пошаговая установка описана в разделе «Установка», параметры конфигурационного файла — в разделе «Настройка».

Варианты развёртывания

ВариантСоставХранилищеНазначение
Одноузловой серверОдин сервер, подготовленный командой stronghold bootstrap serviceRaft на одном узле или filesystemТестирование, разработка, небольшие некритичные установки
HA-кластерТри и более сервера: один активный узел, остальные standbyИнтегрированное хранилище RaftProduction-установки с отказоустойчивостью

Бэкенд filesystem не поддерживает режим HA. Для HA используйте Raft.

По умолчанию stronghold bootstrap service создаёт конфигурацию с хранилищем Raft.

Команда stronghold bootstrap также генерирует Helm-чарт и Docker-образ для развёртывания в стороннем Kubernetes. Подробнее — в разделе «Быстрый старт».

Схема HA-кластера

На схеме показан HA-кластер standalone-установки:

Схема HA-кластера standalone-установки Stronghold

  • Один узел получает блокировку в хранилище и становится активным, остальные переходят в режим standby.
  • Запросы, пришедшие на standby-узел, пересылаются на активный узел или клиент перенаправляется на api_addr активного узла — в зависимости от настроек и состояния кластера. В Stronghold EE performance standby-узлы обслуживают чтения локально. Подробнее — в разделе «Performance standby».
  • Raft реплицирует данные между всеми узлами: каждый узел хранит полную копию данных, зашифрованных барьером.
  • Для кворума нужно как минимум три сервера. Кворум рассчитывается как floor(n/2)+1 голосующих узлов, где n — число голосующих узлов. Узлы, присоединённые с retry_join_as_non_voter = true (флаг -non-voter), не участвуют в голосовании.

Узел кластера

На каждом сервере:

  • бинарный файл и конфигурация: /opt/stronghold/stronghold, /opt/stronghold/config.hcl;
  • данные Raft: /opt/stronghold/data с правами 0700, владелец — системный пользователь stronghold;
  • TLS: сертификат и ключ узла и корневой CA в /opt/stronghold/tls. Для каждого узла выпускается свой сертификат;
  • systemd-unit /etc/systemd/system/stronghold.service, сервис запускается от имени пользователя stronghold с capability CAP_IPC_LOCK.

Основные параметры конфигурации узла:

# Адрес для Raft и пересылки запросов.
cluster_addr  = "https://10.20.30.10:8201"
# Адрес для клиентов и перенаправления.
api_addr      = "https://10.20.30.10:8200"
disable_mlock = true

listener "tcp" {
  address       = "0.0.0.0:8200"
  tls_cert_file = "/opt/stronghold/tls/node-1-cert.pem"
  tls_key_file  = "/opt/stronghold/tls/node-1-key.pem"
}

storage "raft" {
  path    = "/opt/stronghold/data"
  node_id = "raft-node-1"

  retry_join {
    leader_api_addr     = "https://10.20.30.11:8200"
    leader_ca_cert_file = "/opt/stronghold/tls/stronghold-ca.pem"
  }
}
  • api_addr анонсируется другим узлам для перенаправления клиентов.
  • cluster_addr анонсируется для связи между узлами. Трафик между участниками кластера всегда идёт по TLS, схема в адресе игнорируется.
  • Блоки retry_join перечисляют узлы, к которым новый узел пытается присоединиться при старте. Присоединение выполняется через API узла-лидера (порт 8200).
  • С Raft задайте disable_mlock = true и отключите своп на сервере. Отключённый своп не даёт записать на диск расшифрованные данные из памяти. Отдельный ha_storage с Raft не объявляйте.

Инициализация и распечатывание

Администратор инициализирует и распечатывает standalone-кластер в следующем порядке:

  1. Кластер инициализируется один раз, на первом узле. По умолчанию ключ распечатывания делится на 5 долей, для распечатывания нужно 3 (-key-shares, -key-threshold).
  2. При Shamir seal каждый узел распечатывается отдельно после каждого перезапуска.
  3. Чтобы не распечатывать узлы вручную, настройте автоматическое распечатывание:

Seal pkcs11 и yandexcloudkms доступны только в standalone-установке. В Deckhouse Platform seal inner-cluster в Stronghold EE настраивает сам модуль stronghold.

Резервное копирование

Доступны два способа резервного копирования:

  • Снимки Raft создаются вручную. Подробнее — в разделе «Резервное копирование в Stronghold».
  • В Stronghold EE доступны автоматические снимки по расписанию на локальный диск или в S3-совместимое хранилище. Снимки создаёт активный узел, поэтому для production храните их во внешнем объектном хранилище.

Порядок восстановления при потере кворума — на странице «Восстановление после потери кворума».

Межкластерная репликация

Несколько standalone-кластеров Stronghold EE можно связать performance-репликацией (PR) или репликацией для аварийного восстановления (DR). Для этого secondary-кластеру нужен доступ к кластерному порту primary. Архитектура и топологии описаны на странице «Архитектура репликации: Stronghold и Stronghold EE», сетевые требования — на странице «Сетевые порты».