База знаний

Отказоустойчивость кластеров баз данных

Для обеспечения отказоустойчивости кластеров облачных баз данных проекта CLO применяется технология «мастер-слейв», обеспечивающая бесперебойное функционирование кластера.

Принцип работы технологии мастер-слейв

У кластера есть несколько нод (узлов), содержащих одинаковые базы данных:

  • Мастер-нода, на которую производится запись и осуществляется чтение информации
  • Слейв-ноды, представляющие собой автоматически созданные копии (реплики) мастер-ноды

Примечание. В настоящий момент кластер баз данных состоит из одной мастер-ноды и одной слейв-ноды. Пользователь не может изменить количество нод.

Мастер-нода является ведущей в кластере. Все изменения в базах данных прежде всего делаются на мастер-ноде. Изменения содержимого базы данных, сделанные на мастер-ноде, автоматически копируются на слейв-ноду с помощью процесса, называемого репликацией нод.

Примечание. При некоторых условиях (большое количество транзакций, высокая нагрузка на сеть) возможно отставание слейв-ноды от мастер-ноды. Эта ситуация почти никогда не сказывается на работе кластера. Но при восстановлении кластера часть самых последних транзакций на мастер-ноде может быть утрачена.

Работоспособность нужного числа нод кластера автоматически поддерживается сервисом. Если по каким-либо причинам мастер-нода становится недоступной, кластер автоматически выполнит следующие действия:

  • назначит слейв-ноду новой мастер-нодой
  • переключит IP-адреса кластера на новую мастер-ноду
  • создаст новую слейв-ноду

Если недоступной окажется слейв-нода, то сервис автоматически создаст новую слейв-ноду и выполнит на неё репликацию мастер-ноды.

Автоматическое создание новой слейв-ноды приводит к изменению её внутреннего IP-адреса. Чтобы избежать таких проблем, мы рекомендуем всегда обращаться к кластеру через IP-адрес мастер-ноды.

Внимание! Во время восстановления целостности кластера он становится частично недоступен для чтения и записи. При этом некоторые транзакции могут потеряться.

Таким образом, наличие двух и более нод у кластера существенно повышает его отказоустойчивость, так как при недоступности одной из нод в течение определённого времени её функции сразу же берёт на себя реплика на другой ноде.

Примечание. Для повышения надёжности хранения данных ноды одного кластера располагаются на разных физических серверах.

Технология репликации нод

Репликация нод осуществляется автоматически, с использованием штатного механизма репликации конкретной СУБД:

  • Для MySQL — полусинхронно, с последовательным внесением изменений данных мастер-ноды на слейв-ноду. Консистентность данных на уровне кластера не гарантируется. Репликация поддерживает как InnoDB, так и MyISAM
  • Для PostgreSQL — синхронно, с подтверждением внесения изменений на всех нодах кластера

Примечание. Пользователь может отменить синхронизацию для каждой конкретной транзакции PostgreSQL, установив для неё synchronous_commit: off.

Репликация нод кластеров MySQL

Для репликации кластеров на базе MySQL используется Row-based технология, опирающаяся на идентификатор глобальной транзакции (GTID). С помощью этого механизма каждая транзакция на кластере получает свой идентификатор, по которому можно идентифицировать и восстановить передаваемые данные. Транзакции на мастер-ноде с помощью GTID идентифицируются и передаются на слейв-ноду. Эта технология позволяет сохранить согласованность данных между нодами.

Репликация кластеров PostgreSQL

Для кластеров на базе СУБД PostgreSQL используется стандартный механизм потоковой репликации. Все изменения БД PostgreSQL сначала помещаются в специальный журнал изменений WAL (write-ahead log), откуда изменения уже передаются в базу данных. Такой подход обеспечивает целостность данных и отсутствие конфликтов между изменениями таблиц. В журнал WAL последовательно записываются только сделанные изменения. Когда все транзакции из журнала считаются успешно применёнными, журнал удаляется. При репликации слейв-нода получает копию журнала с мастер-ноды.