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

Понижение роли или отключение исходного первичного кластера

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

Схема двух первичных кластеров

Если кроме повышенного кластера остался другой вторичный кластер, он по-прежнему указывает на кластер A. Сначала назначьте ему основным кластер B. Порядок приведен в разделе Смена назначенного основного кластера.

Если исходный кластер A снова начинает принимать запросы, на нем роль по-прежнему основная. Работают два независимых первичных кластера, и наборы данных расходятся. Описание расхождения приведено в статье Общие сведения.

Выберите один из двух вариантов:

  • понизьте роль кластера A и подключите его как вторичный к кластеру B

  • отключите на кластере A репликацию DR

Оба кластера должны работать на одной версии StarVault. Если во время аварии вы обновили кластер B, сначала обновите кластер A до той же версии. Иначе репликация на кластер A не выполняется.

1. Смена назначенного основного кластера

Выполните этот раздел, если после повышения роли кластера B остался другой вторичный кластер и он все еще указывает на кластер A. Назначьте ему основным кластер B.

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

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

Смена назначенного основного очищает пользовательские данные в локальном хранилище Raft на обновляемом вторичном кластере. Затем начинается синхронизация с кластером B.

1.1. Токен активации на кластере B

На новом основном кластере B сформируйте токен активации вторичного кластера. Сохраните его: он понадобится на обновляемом вторичном кластере.

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

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

  3. В разделе вторичных кластеров нажмите Добавить secondary.

    recovered update 2
  4. В поле ID Secondary введите идентификатор обновляемого вторичного кластера, нажмите Сгенерировать токен и скопируйте токен.

    recovered update 3
С помощью CLI
starvault write sys/replication/dr/primary/secondary-token id="dr-secondary"
Пример вывода:
Key                              Value
---                              -----
wrapping_token:                  eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9...
wrapping_accessor:               uZ2ODJ0zBXZDMgXs34a1AXT1
wrapping_token_ttl:              30m
wrapping_token_creation_time:    2026-08-14 17:26:20.651075 +0300 MSK
wrapping_token_creation_path:    sys/replication/dr/primary/secondary-token

Сохраните значение wrapping_token.

С помощью API

Вызовите конечную точку /sys/replication/dr/primary/secondary-token.

curl \
  --header "X-Vault-Token: ..." \
  --request POST \
  --data '{"id": "dr-secondary"}' \
  http://127.0.0.1:8200/v1/sys/replication/dr/primary/secondary-token

Сохраните значение wrap_info.token. Описание запроса см. в разделе Генерация токена активации вторичного кластера.

1.2. Назначение кластера B основным

Выполните шаги на вторичном кластере, который нужно обновить. Передайте токен операций DR и токен активации с кластера B.

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

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

  1. Запустите пользовательский интерфейс обновляемого вторичного кластера.

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

  3. Нажмите Обновить primary.

    recovered update 5
  4. В поле токена операций DR введите токен операций DR. Вставьте токен активации, скопированный с кластера B, и нажмите Обновить.

    recovered update 6
С помощью CLI
starvault write sys/replication/dr/secondary/update-primary \
  dr_operation_token="<dr-operation-token>" \
  token="<wrapping-token>"
Пример вывода:
WARNING! The following warnings were returned from Vault:

* Vault has successfully found secondary information; it may take a while to
perform setup tasks. Vault will be unavailable until these tasks and initial
sync complete.
С помощью API

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

curl \
  --header "X-Vault-Token: ..." \
  --request POST \
  --data '{"dr_operation_token": "<dr-operation-token>", "token": "<wrapping-token>"}' \
  http://127.0.0.1:8200/v1/sys/replication/dr/secondary/update-primary

Описание запроса см. в разделе Обновление основного кластера для вторичного.

Вторичный кластер на короткое время будет недоступен. Обслуживание возобновится после начальной синхронизации с кластером B.

2. Вариант 1. Понижение роли кластера A

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

Кластер A по-прежнему считает себя основным. Войдите в него корневым токеном.

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

Смена назначенного основного полностью очищает пользовательские данные в локальном хранилище Raft на кластере A. Затем начинается синхронизация с кластером B.

2.1. Понижение роли

Выполните шаги на кластере A. После понижения кластер не пытается подключиться к основному, но сохраняет идентификатор кластера.

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

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

  3. Нажмите Понизить primary.

    recovered 2
  4. В окне подтверждения введите ключевое слово и нажмите Подтвердить.

    recovered 3

    Кластер A не пытается подключиться к основному серверу, но сохраняет информацию о своем идентификаторе кластера и может повторно подключиться к тому же набору репликации DR без очистки локального хранилища. Продолжите выполнение операции обновления основного сервера.

С помощью CLI
starvault write -f sys/replication/dr/primary/demote
Пример вывода:
WARNING! The following warnings were returned from StarVault:

* This cluster is being demoted to a replication secondary. Vault will be
unavailable for a brief period and will resume service shortly.
С помощью API

Вызовите конечную точку /sys/replication/dr/primary/demote.

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

+ Описание запроса см. в разделе Понижение роли основного кластера.

Кластер A не пытается подключиться к основному, но сохраняет идентификатор кластера. Дальше выпустите токен активации на кластере B, токен операций DR на кластере A и смените назначенный основной кластер.

2.2. Генерация токена операций DR на кластере A

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

С помощью веб-интерфейса
  1. На кластере A откройте раздел Репликация и нажмите на панель Аварийное восстановление.

  2. В блоке генерации токена операций нажмите Создать DR operation token.

    recovered token 2
  3. В окне можно зашифровать токен ключом PGP. Выберите Сгенерировать токен операции.

    recovered token 3
  4. Нажмите значок копирования и сохраните одноразовый пароль (OTP). Он понадобится, чтобы расшифровать токен.

    recovered token 4
  5. Введите части ключа распечатывания. Каждую часть передает держатель соответствующего ключа.

    recovered token 5
  6. После достижения порога отобразится закодированный токен. Если OTP еще на экране, он будет в выходных данных. Если OTP нет, возьмите значение из предыдущего шага. Нажмите значок Копировать, чтобы скопировать команду токена.

    recovered token 6
  7. Выполните скопированную команду в терминале. Подставьте OTP.

    starvault operator generate-root -dr-token \
      -decode="Gx4fYAMjOGM0aXcgOiFFHHQaDBZkDwwgFws" \
      -otp="h0wSwoA6vP6tnN4f9JEPUFJWzy"
    Пример вывода:
    s.h3tLyUB9ATToqzMPIF1IFwmr

    Сохраните токен. Он понадобится, чтобы назначить кластер B основным.

С помощью CLI
  1. На кластере A запустите генерацию токена.

    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         829b8057-a486-cd02-6ce0-0a2c5d5ab0ce
    Started       true
    Progress      0/3
    Complete      false
    OTP           WEaATFbgIi01meg1AUGNNySFle
    OTP Length    24

    Сохраните OTP. Передайте nonce каждому держателю ключа распечатывания.

  2. Каждый держатель ключа передает свою часть.

    starvault operator generate-root -dr-token \
      -nonce=829b8057-a486-cd02-6ce0-0a2c5d5ab0ce \
      <unseal-key>
  3. Когда передан порог частей, расшифруйте закодированный токен.

    starvault operator generate-root -dr-token \
      -decode="JGsAeTApUAQsIGJTAxAIYgobcRo9TCY3IwA" \
      -otp="WEaATFbgIi01meg1AUGNNySFle"
    Пример вывода:
    s.a8do2ceIRbnuoSKN6Ts5uqOe
С помощью API
  1. На кластере A запустите генерацию.

    curl \
      --header "X-Vault-Token: ..." \
      --request POST \
      http://127.0.0.1:8200/v1/sys/replication/dr/secondary/generate-operation-token/attempt

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

  2. Передавайте части ключа распечатывания, пока complete не станет true. В каждом вызове указывайте один и тот же nonce.

    curl \
      --header "X-Vault-Token: ..." \
      --request POST \
      --data '{"key": "<unseal-key>", "nonce": "<nonce>"}' \
      http://127.0.0.1:8200/v1/sys/replication/dr/secondary/generate-operation-token/update
  3. Расшифруйте encoded_token.

    starvault operator generate-root -dr-token \
      -decode="<encoded-token>" \
      -otp="<otp>"

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

2.3. Назначение кластера B основным

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

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

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

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

  2. Нажмите Обновить primary.

    recovered 8
  3. Введите токен операций DR и токен активации вторичного кластера, затем нажмите Обновить.

    recovered 9
С помощью CLI
starvault write sys/replication/dr/secondary/update-primary \
  dr_operation_token="<dr-operation-token>" \
  token="<wrapping-token>"
Пример вывода:
WARNING! The following warnings were returned from Vault:

* Vault has successfully found secondary information; it may take a while to
perform setup tasks. Vault will be unavailable until these tasks and initial
sync complete.
С помощью API

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

  1. Создайте полезную нагрузку.

    $ tee payload.json <<EOF
    {
      "dr_operation_token": "<dr-operation-token>",
      "token": "<wrapping-token>"
    }
    EOF
  2. Вызовите конечную точку /sys/replication/dr/secondary/update-primary.

    curl \
      --header "X-Vault-Token: ..." \
      --request POST \
      --data @payload.json \
      http://127.0.0.1:8200/v1/sys/replication/dr/secondary/update-primary

    Описание запроса см. в разделе Обновление основного кластера для вторичного.

Значение token — это wrapping_token, скопированный с кластера B.

Кластер A очищает локальное хранилище и подключается к кластеру B как вторичный. Кластер B реплицирует данные на кластер A.

Проверьте статус репликации. Описание запроса см. в разделе Проверка статуса DR.

Если нужно вернуть кластеру A роль основного, переходите к статье Возврат к исходной топологии.

3. Вариант 2. Отключение кластера A от DR

Когда кластер B стал новым основным, репликацию DR на исходном кластере A можно отключить, если кластер A снова принимает запросы.

В паре репликации DR только один основной кластер. Данные на кластере A устарели за время простоя.

В этом варианте кластер A полностью выходит из пары репликации DR. Возврат к исходной топологии для этого варианта не выполняется: кластер A больше не является вторичным.

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

Выполните шаги на кластере A.

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

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

  3. Нажмите Отключить DR репликацию.

    recovered 11
  4. В окне подтверждения введите Disaster Recovery и подтвердите отключение.

    recovered 12
С помощью CLI
starvault write -f sys/replication/dr/primary/disable
Пример вывода:
WARNING! The following warnings were returned from StarVault:

* This cluster is having replication disabled. Vault will be unavailable for
  a brief period and will resume service shortly.
С помощью API

Вызовите конечную точку /sys/replication/dr/primary/disable.

curl \
  --header "X-Vault-Token: ..." \
  --request POST \
  http://127.0.0.1:8200/v1/sys/replication/dr/primary/disable
Пример ответа
{
  "request_id": "92a5f57a-2f7b-11be-b9dd-0f028396fba8",
  "lease_id": "",
  "renewable": false,
  "lease_duration": 0,
  "data": null,
  "wrap_info": null,
  "warnings": [
    "This cluster is having replication disabled. Vault will be unavailable for a brief period and will resume service shortly."
  ],
  "auth": null
}

+ Описание запроса см. в разделе Отключение репликации DR на основном кластере.

Кластер A покидает пару репликации DR. Вторичный кластер больше не сможет к нему подключиться.