Версия:

Руководство пользователя / Replication / Восстановление после сбоя
Руководство пользователя / Replication / Восстановление после сбоя

Восстановление после сбоя

Восстановление после сбоя

«Сбой» – это ситуация, когда мастер становится недоступен вследствие проблем с оборудованием, сетевых неполадок или программной ошибки.

../../../_images/mr-degraded.svg

В конфигурации мастер-реплика, если мастер пропадает, на репликах выводятся сообщения об ошибке с указанием потери соединения:

$ # сообщения из журнала реплики
          2017-06-14 16:23:10.993 [19153] main/105/applier/replicator@192.168.0. I> can't read row
          2017-06-14 16:23:10.993 [19153] main/105/applier/replicator@192.168.0. coio.cc:349 !> SystemError
          unexpected EOF when reading from socket, called on fd 17, aka 192.168.0.101:57815,
          peer of 192.168.0.101:3301: Broken pipe
          2017-06-14 16:23:10.993 [19153] main/105/applier/replicator@192.168.0. I> will retry every 1 second
          2017-06-14 16:23:10.993 [19153] relay/[::ffff:192.168.0.101]:/101/main I> the replica has closed its socket, exiting
          2017-06-14 16:23:10.993 [19153] relay/[::ffff:192.168.0.101]:/101/main C> exiting the relay loop

… а статус мастера выводится как «отключенный»:

# отчет от реплики №1
            tarantool> box.info.replication
            ---
            - 1:
                id: 1
                uuid: 70e8e9dc-e38d-4046-99e5-d25419267229
                lsn: 542
                upstream:
                  peer: replicator@192.168.0.101:3301
                  lag: 0.00026607513427734
                  status: disconnected
                  idle: 182.36929893494
                  message: connect, called on fd 13, aka 192.168.0.101:58244
              2:
                id: 2
                uuid: fb252ac7-5c34-4459-84d0-54d248b8c87e
                lsn: 0
              3:
                id: 3
                uuid: fd7681d8-255f-4237-b8bb-c4fb9d99024d
                lsn: 0
                downstream:
                  vclock: {1: 542}
            ...
# отчет от реплики №2
            tarantool> box.info.replication
            ---
            - 1:
                id: 1
                uuid: 70e8e9dc-e38d-4046-99e5-d25419267229
                lsn: 542
                upstream:
                  peer: replicator@192.168.0.101:3301
                  lag: 0.00027203559875488
                  status: disconnected
                  idle: 186.76988101006
                  message: connect, called on fd 13, aka 192.168.0.101:58253
              2:
                id: 2
                uuid: fb252ac7-5c34-4459-84d0-54d248b8c87e
                lsn: 0
                upstream:
                  status: follow
                  idle: 186.76960110664
                  peer: replicator@192.168.0.102:3301
                  lag: 0.00020599365234375
              3:
                id: 3
                uuid: fd7681d8-255f-4237-b8bb-c4fb9d99024d
                lsn: 0
            ...

Чтобы объявить, что одна из реплик должна стать новым мастером:

  1. Убедитесь, что старый мастер окончательно недоступен:
    • измените правила маршрутизации в сети, чтобы больше не отправлять пакеты на мастер, или
    • отключите мастер-экземпляр, если у вас есть доступ к машине, или
    • отключите питание контейнера или машины.
  2. Выполните box.cfg{read_only=false, listen=URI} на реплике и box.cfg{replication=URI} на других репликах в наборе.

Примечание

Если на старом мастере есть обновления, не переданные до выхода старого мастера из строя, примените их вручную на новом мастере с помощью команд tarantoolctl cat и``tarantoolctl play``.

Реплика не может автоматически определить, что мастер не будет доступен в будущем, поскольку причины отказа и среды репликации могут существенно отличаться друг от друга. Поэтому обнаруживать сбой должен человек.