Глава 25. Высокая доступность, балансировка нагрузки и репликация#

Глава 25. Высокая доступность, балансировка нагрузки и репликация

Глава 25. Высокая доступность, балансировка нагрузки и репликация

Серверы баз данных могут работать вместе, чтобы позволить второму серверу быстро взять на себя работу, если первый сервер выходит из строя (высокая доступность), или чтобы позволить нескольким компьютерам обслуживать одни и те же данные (балансировка нагрузки). В идеале, серверы баз данных могут работать вместе без проблем. Веб-серверы, обслуживающие статические веб-страницы, могут быть легко объединены путем балансировки запросов к нескольким машинам. Фактически, серверы баз данных только для чтения также могут быть относительно легко объединены. К сожалению, большинство серверов баз данных имеют смесь запросов на чтение и запись, и серверы для чтения и записи гораздо сложнее объединить. Это связано с тем, что хотя данные только для чтения нужно размещать на каждом сервере только один раз, запись на любой сервер должна быть передана всем серверам, чтобы будущие запросы на чтение к этим серверам возвращали последовательные результаты.

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

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

Некоторые решения являются синхронными, что означает, что изменяющая данные транзакция не считается завершенной, пока все серверы не завершат транзакцию. Это гарантирует, что сбой не приведет к потере данных и что все серверы сбалансированной нагрузки будут возвращать согласованные результаты, независимо от того, какой сервер был запрошен. В отличие от этого, асинхронные решения позволяют некоторую задержку между моментом коммита и его распространением на другие серверы, открывая возможность потери некоторых транзакций при переключении на резервный сервер и возвращения немного устаревших результатов серверами сбалансированной нагрузки. Асинхронное взаимодействие используется, когда синхронное взаимодействие слишком медленное.

Решения также могут быть классифицированы по их детализации. Некоторые решения могут работать только с целым сервером баз данных, в то время как другие позволяют управлять на уровне таблицы или базы данных.

Производительность должна учитываться при любом выборе. Обычно существует компромисс между функциональностью и производительностью. Например, полностью синхронное решение через медленную сеть может снизить производительность более чем в два раза, в то время как асинхронное решение может иметь минимальное влияние на производительность.

Остаток этого раздела описывает различные решения по отказоустойчивости, репликации и балансировке нагрузки.