8. Режим обслуживания
Добавлено в v0.1.0.
8.1. О режиме обслуживания
Режим обслуживания позволяет временно приостановить полноценную работу кластера, при этом не теряя состояние master/slave узлов.
Это полезно при обновлениях СУБД и отладке кластера.
В режиме обслуживания выполняются следующие действия:
Ручная остановка rdbserver игнорируется и не приведет к demote или отключению slave от кластера
При остановке cook не останавливает rdbserver
При запуске cook не запускает rdbserver
cookd в режиме master игнорирует потерю блокировки в Consul
cookd в режиме slave игнорирует потерю master и не выполняет promote
cookd в режиме slave подключится к новому master, если он появится в кластере
cookd выполнит ручной promote и demote игнорируя любые ограничения
Для того, чтобы перевести кластер в режим обслуживания нужно выполнить команду cookctl maintenance с параметром 1.
Опционально можно добавить параметр –wait, чтобы дождаться, когда все узлы применят новую конфигурацию и войдут в режим обслуживания:
cookctl -c config.yml maintenance 1 --wait
Enabling maintenance mode
cookctl status показывает режим обслуживания для всего кластера и отдельно для узлов:
cookctl -c config.yml status
testcluster (c93e02c8-0e7d-49ee-b286-c7195c221b6a, 0.2.0) generation 2 (585866d6-85b0-45e9-8002-a257619e8157), locked by node1, MAINTENANCE
node0 (slave) API URL http://127.0.0.1:5030, RDB 3.0.9.0 on 3050 and AUX 3060 (127.0.0.1/3050), failover enabled, pending restart, MAINTENANCE
/tmp/cook/node0/database1.fdb (testdb1, 4b2780bd-0d3d-4da3-b037-98fb3b0b9e01) 2:0 127.0.0.1/3050:testdb1
/tmp/cook/node0/database2.fdb (testdb2, 010228a8-33d2-4058-bbe5-5b441d1acbbc) 2:0 127.0.0.1/3050:testdb2
node1 (master) API URL http://127.0.0.1:5031, RDB 3.0.9.0 on 3051 and AUX 3060 (127.0.0.1/3051), failover enabled, pending restart, MAINTENANCE
/tmp/cook/node1/database1.fdb (testdb1, 4b2780bd-0d3d-4da3-b037-98fb3b0b9e01) 2:0 127.0.0.1/3051:testdb1
/tmp/cook/node1/database2.fdb (testdb2, 010228a8-33d2-4058-bbe5-5b441d1acbbc) 2:0 127.0.0.1/3051:testdb2
Узлы в режиме обслуживания добавляют (MAINTENANCE) в логах:
[node1 (MAINTENANCE)] INFO:2022-04-25 14:34:00,568 - cook.mind:436 - Processing locked cluster as master. Lock owned by node1
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,569 - cook.mind:458 - Updating data state...
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,569 - cook.rdb:535 - Updating master data position...
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,569 - cook.rdb:995 - Selecting data from mon$replication
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,575 - cook.rdb:538 - Master position of /tmp/cook/node1/database1.fdb (testdb1, 4b2780bd-0d3d-4da3-b037-98fb3b0b9e01) is 2:0
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,576 - cook.rdb:995 - Selecting data from mon$replication
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,581 - cook.rdb:538 - Master position of /tmp/cook/node1/database2.fdb (testdb2, 010228a8-33d2-4058-bbe5-5b441d1acbbc) is 2:0
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,582 - cook.mind:462 - Updating master lock...
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,582 - cook.arbiter:281 - Updating master lock
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,582 - cook.arbiter:283 - Renewing consul session...
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,585 - cook.mind:464 - Master lock and cluster position updated
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,585 - cook.mind:197 - Updating my status in cluster
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:00,606 - cook.mind:197 - Updating my status in cluster
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:05,544 - cook.mind:64 - Node step
[node1 (MAINTENANCE)] DEBUG:2022-04-25 14:34:05,545 - cook.mind:197 - Updating my status in cluster
Для того, чтобы перевести кластер в нормальный режим нужно выполнить команду cookctl maintenance с параметром 0.
cookctl -c config.yml maintenance 0 --wait
Disabling maintenance mode
8.2. Пример использования режима обслуживания
При выполнении обновления RedDatabase необходимо остановить сервер СУБД, кластера это означает остановка сервиса cook и, если обновление выполняется на master, то demote текущего и promote нового. Для того чтобы этого избежать можно:
Перевести cookd в режим maintenance
Остановить rdbserver вручную
Обновить дистрибутив RedDatabase
Запустить rdbserver вручную
Перевести cookd в нормальный режим