Удаление экземпляров
Предположим, что у нас настроен следующий набор реплик с 3 экземплярами (instance1, instance2 и instance3), и мы хотим удалить instance2.
Чтобы правильно удалить экземпляр из набора реплик, выполните следующие шаги:
- Отключите instance2 от кластера.
- Отключите кластер от instance2.
- Исключите instance2 из системного спейса
_cluster
.
Шаг 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):
- Запросите все записи из спейса
_cluster
:
tarantool> box.space._cluster:select{}
---
- - [1, 'db89978f-7115-4537-8417-9982bb5a256f']
- [2, '0a756d14-e437-4296-85b0-d27a0621613e']
- [3, 'bb362584-c265-4e53-aeb6-450ae818bf59']
...
- Check if the
id
anduuid
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
, чтобы проверить, что состояние кластера теперь корректное.