VK Object Storage logo
Помощь
Обновлена 17 июля 2026 г. в 15:35

Восстановление Etcd

Если остались работающие узлы Etcd, восстанавливать сбойный узел из резервной копии не требуется.

  1. Удалите сбойный узел и добавьте в кластер повторно:

    $ mkdir /var/lib/etcd/default.etcd/old$ mv /var/lib/etcd/default.etcd/member/ /var/lib/etcd/default.etcd/old/$ export ETCDCTL_API=2$ etcdctl --endpoints=http://<IP_АДРЕС_ЖИВОГО_УЗЛА_КЛАСТЕРА>:2379 member list$ etcdctl --endpoints=http://<IP_АДРЕС_ЖИВОГО_УЗЛА_КЛАСТЕРА>:2379 member remove <ID_СБОЙНОГО_УЗЛА>$ etcdctl --endpoints=http://<IP_АДРЕС_ЖИВОГО_УЗЛА_КЛАСТЕРА>:2379 member add <ИМЯ_СБОЙНОГО_УЗЛА> http://<АДРЕС_СБОЙНОГО_УЗЛА>:2380
  2. Отредактируйте на сбойном узле конфигурационный файл /etc/etcd/etcd.conf, указав в параметре:

    $ ETCD_INITIAL_CLUSTER_STATE="existing"
  3. Запустите сбойный узел.

    Подробная информация о восстановлении описана на официальном сайте.

Чтобы восстановить Etcd, если кластер утерян полностью:

  1. На всех узлах выполните команды:

    $ systemctl stop etcd$ mkdir /var/lib/etcd/default.etcd/old$ mv /var/lib/etcd/default.etcd/member/ /var/lib/etcd/default.etcd/old/
  2. На первом узле:

    1. Распакуйте содержимое архива резервной копии:

      $ tar xvf meta-1#etcd#<DATETIME>.tar.gz
    2. Перед каждым параметром конфигурационного файла /etc/etcd/etcd.conf введите export и загрузите в текущие переменные окружения, кроме ETCD_DATA_DIR.

      Пример вывода
      export ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"export ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"export ETCD_NAME="meta-1"export ETCD_ELECTION_TIMEOUT="2000"export ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.30:2380export ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.30:2379export ETCD_INITIAL_CLUSTER="meta-2=http://meta-2:2380,meta-1=http://meta-1:2380,meta-3=http://meta-3:2380"export ETCD_INITIAL_CLUSTER_STATE="existing"export ETCD_INITIAL_CLUSTER_TOKEN="etcd-token"export ETCD_ENABLE_V2="true"export ETCD_AUTO_COMPACTION_RETENTION="3"
    3. Запустите Etcd в single node cluster с использованием восстановленных данных:

      $ /usr/bin/etcd --force-new-cluster --data-dir="<ПУТЬ_К_РАСПАКОВАННОМУ_БЕКАПУ>/"
    4. Оставьте консоль работать, не закрывайте процесс.

  3. Зайдите на второй узел:

    1. Подключитесь через Etcdctl к первому узлу и проверьте список членов кластера:

      $ etcdctl --endpoints=http://meta-1:2379 member list
    2. Оставьте эту консоль открытой.

  4. Консоль первого узла, где работает процесс Etcd, остановите через CTRL+C. Затем запустите повторно, но уже без ключа --force-new-cluster:

    $ /usr/bin/etcd --data-dir="<ПУТЬ_К_РАСПАКОВАННОМУ_БЕКАПУ>/"
  5. Вернитесь к консоли второго узла:

    1. Добавьте второй узел в кластер:

      $ etcdctl --endpoints=http://meta-1:2379 member add meta-2 http://meta-2:2380
    2. Строки конфигурации, полученные на предыдущем шаге, добавьте в файл /etc/etcd/etcd.conf на втором узле. Если такие строки существуют, замените их.

    3. Запустите сервис на втором узле:

      $ systemctl start etcd
    4. Закройте консоль второго сервера.

  6. Перейдите на третий сервер:

    1. Добавьте в Etcd третий сервер:

      $ etcdctl --endpoints=http://meta-1:2379 member add meta-3 http://meta-3:2380
    2. Строки конфигурации, полученные на предыдущем шаге, добавьте в файл /etc/etcd/etcd.conf на третьем узле. Если такие строки существуют, замените их. Параметр ETCD_INITIAL_CLUSTER будет отличаться от параметра второго узла.

    3. Запустите третий сервер:

      $ systemctl start etcd
  7. Остановите в консоли первого сервера процесс Etcd, нажав CTRL+C.

  8. На третьем или втором сервере:

    1. Запросите список серверов на втором или третьем сервере:

      $ etcdctl --endpoints=http://meta-3:2379 member list
    2. Там же удалите первый сервер и добавьте его повторно:

      $ etcdctl --endpoints=http://meta-3:2379 member remove 8369eb9c5f01$ etcdctl --endpoints=http://meta-3:2379 member add meta-1 http://meta-1:2380
    3. Строки конфигурации, полученные на предыдущем шаге, добавьте в файл /etc/etcd/etcd.conf на третьем узле. Если такие строки существуют, замените их. Параметр ETCD_INITIAL_CLUSTER будет отличаться от параметров предыдущих узлов.

  9. Запустите сервис Etcd на первом сервере не из консоли, а как обычный сервис:

    $ systemctl start etcd
  10. Проверьте состояние кластера Etcd:

    $ etcdctl cluster-health
  11. Если серверов Etcd в кластере было больше трех, продолжайте добавлять аналогично третьему серверу.

  12. После добавления новых серверов в кластер Etcd пропишите список всех серверов с Etcd на каждом сервере кластера — в параметр ETCD_INITIAL_CLUSTER файла конфигурации /etc/etcd/etcd.conf.