Удаление экземпляров | Tarantool
Документация на русском языке
поддерживается сообществом
Примеры и руководства Replication tutorials Удаление экземпляров

Удаление экземпляров

Предположим, что у нас настроен следующий набор реплик с 3 экземплярами (instance1, instance2 и instance3), и мы хотим удалить instance2.

../../../_images/replication.svg

Чтобы правильно удалить экземпляр из набора реплик, выполните следующие шаги:

  1. Отключите instance2 от кластера.
  2. Отключите кластер от instance2.
  3. Исключите instance2 из системного спейса _cluster.
../../../_images/replicationX.svg

Шаг 1: отключение экземпляра от кластера

На отключаемом instance2 выполните box.cfg{} с пустым источником репликации:

tarantool> box.cfg{replication=''}

Теперь проверьте, что экземпляр был отсоединен. Взгляните на box.info.replication на instance2 (заметьте, что строки для replication.{1,3}.upstream отсутствуют):

tarantool> box.info.replication
---
- 1:
   id: 1
   uuid: db89978f-7115-4537-8417-9982bb5a256f
   lsn: 9
-- upstream is absent
   downstream:
      status: follow
      idle: 0.93983899999876
      vclock: {1: 9}
2:
   id: 2
   uuid: 0a756d14-e437-4296-85b0-d27a0621613e
   lsn: 0
3:
   id: 3
   uuid: bb362584-c265-4e53-aeb6-450ae818bf59
   lsn: 0
-- upstream is absent
   downstream:
      status: follow
      idle: 0.26624799999991
      vclock: {1: 9}
...

Проверьте также instance1 и instance3 (заметьте, что статус replication.2.downstream поменялся на stopped):

-- instance1
tarantool> box.info.replication
---
- 1:
   id: 1
   uuid: db89978f-7115-4537-8417-9982bb5a256f
   lsn: 9
2:
   id: 2
   uuid: 0a756d14-e437-4296-85b0-d27a0621613e
   lsn: 0
   upstream:
      status: follow
      idle: 0.3533439999992
      peer: replicator@localhost:3302
      lag: 0.0001220703125
   downstream:
      status: stopped     -- status has changed:
      message: unexpected EOF when reading from socket, called on fd 13, aka [::1]:3301,
      peer of [::1]:53776
      system_message: Broken pipe
3:
   id: 3
   uuid: bb362584-c265-4e53-aeb6-450ae818bf59
   lsn: 0
   upstream:
      status: follow
      idle: 0.35327999999936
      peer: replicator@localhost:3303
      lag: 0.00018095970153809
   downstream:
      status: follow
      idle: 0.68685100000221
      vclock: {1: 9}
...

Шаг 2: отключение кластера от удаляемого экземпляра

На всех остальных экземплярах в кластере уберите instance2 из списка box.cfg{ replication } и вызовите актуальный список box.cfg{ replication = {instance1, instance3} }:

tarantool> box.cfg{ replication = { 'instance1-uri', 'instance3-uri' } }

Взгляните на box.info.replication на instance2, чтобы убедиться, что instance1 и instance3 были отсоединены (заметьте, что статус replication.2.downstream поменялся на stopped):

tarantool> box.info.replication
---
- 1:
   id: 1
   uuid: db89978f-7115-4537-8417-9982bb5a256f
   lsn: 9
   downstream:
      status: stopped    -- status has changed
      message: unexpected EOF when reading from socket, called on fd 16, aka [::1]:3302,
      peer of [::1]:53832
      system_message: Broken pipe
2:
   id: 2
   uuid: 0a756d14-e437-4296-85b0-d27a0621613e
   lsn: 0
3:
   id: 3
   uuid: bb362584-c265-4e53-aeb6-450ae818bf59
   lsn: 0
   downstream:
      status: stopped    -- status has changed
      message: unexpected EOF when reading from socket, called on fd 18, aka [::1]:3302,
      peer of [::1]:53825
      system_message: Broken pipe
...

Проверьте также instance1 и instance3 (заметьте, что статус replication.2.upstream поменялся на stopped):

-- instance1
tarantool> box.info.replication
---
- 1:
   id: 1
   uuid: db89978f-7115-4537-8417-9982bb5a256f
   lsn: 9
2:
   id: 2
   uuid: 0a756d14-e437-4296-85b0-d27a0621613e
   lsn: 0
   downstream:
      status: stopped   -- status has changed
      message: unexpected EOF when reading from socket, called on fd 13, aka [::1]:3301,
      peer of [::1]:53776
      system_message: Broken pipe
3:
   id: 3
   uuid: bb362584-c265-4e53-aeb6-450ae818bf59
   lsn: 0
   upstream:
      status: follow
      idle: 0.50240100000156
      peer: replicator@localhost:3303
      lag: 0.00015711784362793
   downstream:
      status: follow
      idle: 0.14237199999843
      vclock: {1: 9}
...

Шаг 3: окончательное удаление

Если выбывший экземпляр снова вернется в кластер, то он получит информацию обо всех изменениях, которые произошли на остальных экземплярах за время его отсутствия.

Если экземпляр нужно вывести из эксплуатации навсегда, то нужно очистить cluster спейс. Для этого сначала узнайте id и uuid удаляемого экземпляра. На instance2 вызовите return box.info.id, box.info.uuid:

tarantool> return box.info.id, box.info.uuid
---
- 2
- '0a756d14-e437-4296-85b0-d27a0621613e'
...

Запомните id and uuid.

Теперь выберите любой мастер из оставшегося кластера и выполните на нем следующие действия (предположим, это будет instance1):

  1. Запросите все записи из спейса _cluster:
tarantool> box.space._cluster:select{}
---
- - [1, 'db89978f-7115-4537-8417-9982bb5a256f']
- [2, '0a756d14-e437-4296-85b0-d27a0621613e']
- [3, 'bb362584-c265-4e53-aeb6-450ae818bf59']
...
  1. Check if the id and uuid of instance2 are correct and remove them from the cluster:
tarantool> box.space._cluster:delete(2)
---
- [2, '0a756d14-e437-4296-85b0-d27a0621613e']
...

Final checks

После всех модификаций выполните box.info.replication, чтобы проверить, что состояние кластера теперь корректное.

Нашли ответ на свой вопрос?
Обратная связь