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

Повышение роли вторичного кластера DR до первичного

Данный функционал недоступен в StarVault, поставляемого в составе Nova Container Platform.

На данном этапе перевод вторичного кластера в первичный выполняется в случае сбоя, который делает основной кластер неработоспособным.

Схема отказа первичного кластера

Для повышения роли нужен токен операций Disaster Recovery (DR).

Токен можно подготовить заранее на основном кластере: это пакетный токен. Порядок приведен в статье Токен операций DR. Если пакетного токена нет, выпустите токен на вторичном кластере по частям ключа распечатывания (unseal key). Этот порядок описан ниже.

Нельзя реплицировать данные с более новой версии StarVault на более старую. При обновлении сначала обновляйте вышестоящие кластеры, затем нижестоящие.

1. Генерация токена операций DR

Этот раздел нужен, если пакетный токен операций DR на кластере A не выпускали.

Пакетный токен готовят заранее на основном кластере, пока он работает. Порядок приведен в статье Токен операций DR. Такой токен реплицируется на кластер B, и им можно повысить роль, даже если кластер A уже недоступен. Если пакетный токен есть и срок его жизни не истек, пропустите этот раздел и переходите к повышению роли.

Если пакетного токена нет, выпустите токен операций DR на вторичном кластере B в момент переключения. Для выпуска нужен порог частей ключа распечатывания, которые появились при инициализации кластера A. При автоматическом распечатывании используйте ключи восстановления. Каждую часть передает держатель соответствующего ключа. Процедура похожа на выпуск корневого токена. У этого токена нет срока жизни: после операции его удаляют.

С помощью веб-интерфейса
  1. Запустите пользовательский интерфейс кластера B.

  2. Перейдите в раздел Репликация и нажмите на панель Аварийное восстановление

    promote 1
  3. В нижней части интерфейса нажмите Создать DR operation token.

    promote 2
  4. В появившемся окне обратите внимание на возможность шифрования токена с помощью ключа PGP. Выберите Инициализировать.

    promote 3
  5. Далее отобразится OTP. Он потребуется для декодирования сгенерированного токена. Скопируйте его в буфер обмена.

    promote 3 1
  6. Для создания нового токена используйте части ключа распечатывания.

    promote 4
  7. Далее отобразится закодированный токен операции аварийного восстановления. Если одноразовый пароль (OTP) еще доступен, он будет в выходных данных. Если OTP недоступен, возьмите значение из предыдущего шага. Нажмите значок copy, чтобы скопировать команду токена.

    promote 5
  8. Выполните скопированную команду в терминале. Подставьте OTP из предыдущего шага.

    starvault operator generate-root -dr-token -otp="d9YRLdGt6xmGmAxGW2sMD4Ny" -decode="J1UxNw9dLgFmIFU+JjY3EQZKPzQBeQku"
    Пример вывода:
    hvs.5Jw2qwxzwnYrgswSoNLoYqQC

    Сохраните полученный токен. Он понадобится для повышения роли.

С помощью CLI

Выполните действия, указанные ниже, на вторичном кластере аварийного восстановления (кластер B).

  1. На кластере B запустите генерацию токена операций DR.

    starvault operator generate-root -dr-token -init
    Пример вывода:
    A One-Time-Password has been generated for you and is shown in the OTP field.
    You will need this value to decode the resulting root token, so keep it safe.
    Nonce         b4738404-0a11-63aa-2cb6-e77dfd96946f
    Started       true
    Progress      0/3
    Complete      false
    OTP           EYHAkPQYvvz93e8iI3pg1maQ
    OTP Length    24

    Сохраните OTP. Сохраните nonce.

  2. Подставьте nonce из предыдущего шага и часть ключа распечатывания исходного основного кластера.

    starvault operator generate-root -dr-token \
      -nonce=b4738404-0a11-63aa-2cb6-e77dfd96946f \
      <unseal-key>
    Пример вывода после первой части:
    Nonce            b4738404-0a11-63aa-2cb6-e77dfd96946f
    Started          true
    Progress         1/3
    Complete         false
  3. Когда передан порог частей, в выводе появляется закодированный токен.

    Пример вывода:
    Nonce            b4738404-0a11-63aa-2cb6-e77dfd96946f
    Started          true
    Progress         3/3
    Complete         true
    Encoded Token    djw4BR1iaDUFIBxaAwpiCC1YGhQHHDMf
  4. Расшифруйте токен. Подставьте закодированный токен и OTP из первого шага.

    starvault operator generate-root -dr-token \
      -decode="djw4BR1iaDUFIBxaAwpiCC1YGhQHHDMf" \
      -otp="EYHAkPQYvvz93e8iI3pg1maQ"
    Пример вывода:
    hvs.5xsAyncmt1OPEHhMFPMKcYAG

    Сохраните полученный токен. Он понадобится для повышения роли.

С помощью API

Вызовы выполняются на кластере B из корневого пространства имен. Одновременно может идти только одна попытка генерации.

  1. Запустите генерацию токена, вызвав конечную точку /sys/replication/dr/secondary/generate-operation-token/attempt.

    curl \
      --header "X-Vault-Token: ..." \
      --request POST \
      http://127.0.0.1:8200/v1/sys/replication/dr/secondary/generate-operation-token/attempt
    Пример ответа
    {
      "started": true,
      "nonce": "2dbd10f1-8528-6246-09e7-82b25b8aba63",
      "progress": 1,
      "required": 3,
      "encoded_token": "",
      "otp": "2vPFYG8gUSW9npwzyvxXMug0",
      "otp_length": 24,
      "complete": false
    }

    Сохраните nonce и otp. Чтобы зашифровать токен ключом PGP, передайте в теле запроса параметр pgp_key — открытый ключ PGP в кодировке Base64.

  2. Передайте части ключа распечатывания, вызвав конечную точку /sys/replication/dr/secondary/generate-operation-token/update. Повторяйте вызов, пока complete не станет true. В каждом вызове указывайте один и тот же nonce.

    $ tee payload.json <<EOF
    {
      "key": "acbd1234",
      "nonce": "2dbd10f1-8528-6246-09e7-82b25b8aba63"
    }
    EOF
    curl \
      --header "X-Vault-Token: ..." \
      --request POST \
      --data @payload.json \
      http://127.0.0.1:8200/v1/sys/replication/dr/secondary/generate-operation-token/update
    Пример ответа после достижения порога
    {
      "started": true,
      "nonce": "2dbd10f1-8528-6246-09e7-82b25b8aba63",
      "progress": 3,
      "required": 3,
      "pgp_fingerprint": "",
      "complete": true,
      "encoded_token": "FPzkNBvwNDeFh4SmGA8c+w=="
    }
  3. Расшифруйте encoded_token с помощью OTP из первого шага.

    starvault operator generate-root -dr-token \
      -decode="FPzkNBvwNDeFh4SmGA8c+w==" \
      -otp="2vPFYG8gUSW9npwzyvxXMug0"
    Пример вывода:
    hvs.5xsAyncmt1OPEHhMFPMKcYAG

    Сохраните полученный токен. Он понадобится для повышения роли.

    Описание запросов см. в разделе Генерация токена операций DR.

2. Повышение роли вторичного кластера

К основному кластеру можно подключить только один вторичный кластер.

Выполните шаги на вторичном кластере B, в случае неработоспособности первичного кластера A.

Кластер B проверяет запрос повышения роли. Затем кластер B инициализирует журнал упреждающей записи (WAL) для роли основного. Кластер B становится основным. На короткое время кластер будет недоступен, затем обслуживание возобновится.

Передайте токен операций DR: пакетный токен из статьи Токен операций DR либо токен, выпущенный в разделе Генерация токена операций DR.

С помощью веб-интерфейса

Если в конфигурации кластера не задан cluster_addr, укажите Адрес Primary кластера.

  1. Запустите пользовательский интерфейс кластера B.

  2. Перейдите в раздел Репликация и нажмите на панель Аварийное восстановление.

  3. Нажмите Повысить secondary.

    promote 6
  4. Введите токен операций DR и адрес основного кластера. Нажмите Подтвердить.

    promote 7
С помощью CLI

Повысьте роль вторичного кластера B. Передайте токен операций DR.

starvault write sys/replication/dr/secondary/promote \
  dr_operation_token="<dr-operation-token>"
Пример вывода:
WARNING! The following warnings were returned from Vault:

* This cluster is being promoted to a replication primary. Vault will be
unavailable for a brief period and will resume service shortly.

Чтобы повысить роль принудительно, добавьте параметр force=true.

starvault write sys/replication/dr/secondary/promote \
  dr_operation_token="<dr-operation-token>" \
  force=true
С помощью API

Если в конфигурации кластера не задан cluster_addr, в запросе /v1/sys/replication/dr/secondary/promote явно укажите primary_cluster_addr.

  1. Создайте полезную нагрузку с токеном операций DR.

    $ tee payload.json <<EOF
    {
      "dr_operation_token": "ijH8tphEHaBtgx+IvPfxDsSi2LV4j9k+Lad6eqT5cJw="
    }
    EOF

    Параметры запроса:

    • dr_operation_token (string: <required>) — токен операций DR для авторизации запроса

    • primary_cluster_addr (string: "") — адрес кластера, который основной кластер передает вторичному. Укажите значение, если адрес основного кластера недоступен напрямую, например через балансировщик

    • force (bool: false) — если true, кластер будет повышен даже при ошибках отдельных проверок безопасности. Принудительное повышение может привести к потере данных, если репликация не завершена

  2. Повысьте роль вторичного кластера, вызвав конечную точку /sys/replication/dr/secondary/promote.

    curl \
      --header "X-Vault-Token: ..." \
      --request POST \
      --data @payload.json \
      http://127.0.0.1:8200/v1/sys/replication/dr/secondary/promote
    Пример ответа
    {
      "request_id": "ad8f9074-0e24-d30e-83cd-595c9652ff89",
      "lease_id": "",
      "renewable": false,
      "lease_duration": 0,
      "data": null,
      "wrap_info": null,
      "warnings": [
        "This cluster is being promoted to a replication primary. Vault will be unavailable for a brief period and will resume service shortly."
      ],
      "auth": null
    }

    Описание запроса и ответа API см. в разделе Повышение роли вторичного кластера.

Обновите все клиенты StarVault, чтобы они указывали на новый основной кластер (кластер B).

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

В паре репликации DR только один кластер выполняет роль основного. Если исходный первичный кластер снова начинает принимать запросы, работают два независимых первичных кластера, и наборы данных могут расходиться. StarVault не выполняет автоматическое переключение. Дальнейшие действия в этом случае описаны в статье Понижение роли или отключение исходного первичного кластера.