Для управления облачным кластером на базе PostgreSQL в нашем облаке используется Patroni. Именно он выполняет автоматическое переключение мастер-ВМ в случае проблем. Из-за высоких гарантий консистентности переключение мастера (то есть превращение одной из реплик в головной узел) — довольно деструктивное действие.
Подразумевается, что при переключении происходят следующие шаги:
Все это и делает служба Patroni (а для консенсуса между нодами она использует внешний DCS — etcd). При этом бывший мастер (если сам сервер в целом в порядке) сразу же переводится в статус реплики (используя утилиту pg_rewind). Таким образом кластер в целом продолжает работать. Было упомянуто, что переключение является деструктивным, что это значит?
Как проводилось переключение:
Следует учитывать, что переключение может быть дольше, если на кластер идет много запросов и WAL для redo может оказаться много.
Также есть возможность ручного переключения мастера. Такие переключения самые быстрые, так как patroni не ожидает таймаута (вдруг это лишь флап на мастере).
Тип диска | Время переключения |
---|---|
dp1-ssd |
не более 15 секунд |
dp1-highiops |
не более 8 секунд |
В качестве способа вывода мастера из строя — выключение сетевого интерфейса на мастере. Это довольно жесткая схема, так как из кластера пропадает и patroni демон, и etcd. Почему здесь дольше? Потому что у Patroni есть настройка ttl (по умолчанию 30 секунд). Столько он будет ждать, чтобы убедиться, что это не просто флап мастера. А потом уже начнется реальное переключение.
Тип диска | Время переключения |
---|---|
dp1-ssd |
не более 45 секунд |
dp1-highiops |
не более 40 секунд |
Опишите вашу задачу, и мы поможем вам ее решить