Top.Mail.Ru
Удаление экземпляров | Tarantool
 
Репликация / Удаление экземпляров
Репликация / Удаление экземпляров

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

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

Let’s assume that we have the following configured replica set with 3 instances (instance1, instance2 and intance3) and we want to remove 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' } }

Take a look at box.info.replication on instance2 to check that instance1 and instance3 were disconnected (notice that the status of replication.{1,3}.downstream is 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']
...

2.Проверьте корректность id и uuid instance2 и удалите их из кластера:

tarantool> box.space._cluster:delete(2)
---
- [2, '0a756d14-e437-4296-85b0-d27a0621613e']
...

Финальная проверка

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