Кластер базы данных и балансировка нагрузки - PullRequest
137 голосов
/ 22 июля 2009

Что такое кластеризация базы данных? Если вы разрешите одной и той же базе данных находиться на 2 разных серверах, как они будут синхронизировать данные между ними? И чем это отличается от распределения нагрузки с точки зрения сервера базы данных?

Ответы [ 4 ]

122 голосов
/ 22 июля 2009

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

Репликация определяет метод, с помощью которого набор серверов остается синхронизированным без необходимости совместно использовать хранилище, которое может быть географически рассредоточено, есть два основных способа сделать это:

  • репликация master-master (или multi-master): любой сервер может обновить базу данных. Об этом обычно заботится другой модуль в базе данных (или в некоторых случаях совершенно другое программное обеспечение, работающее поверх них).

    Недостатком является то, что это очень трудно сделать хорошо, и некоторые системы теряют свойства ACID в этом режиме репликации.

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

  • репликация главный-подчиненный: существует только одна копия достоверных данных, которая отправляется на подчиненные серверы.

    Недостатком является то, что он менее отказоустойчив, если мастер умирает, в подчиненных устройствах больше нет изменений.

    Недостатком является то, что это легче сделать, чем multi-master, и обычно оно сохраняет свойства ACID.

Распределение нагрузки - это другая концепция, она состоит в распределении запросов, отправляемых на эти серверы, чтобы нагрузка распределялась как можно более равномерно. Обычно это делается на прикладном уровне (или с помощью пула соединений). Единственная прямая связь между репликацией и балансировкой нагрузки заключается в том, что для балансировки нагрузки требуется некоторая репликация, иначе у вас будет один сервер.

14 голосов
/ 22 июля 2009

С точки зрения SQL Server:

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

У вас может быть активно-активный кластер, но для этого потребуется несколько экземпляров SQL Server, работающих на каждом узле. (т.е. экземпляр 1 на узле A переключается на экземпляр 2 на узле B, а экземпляр 1 на узле B - на экземпляр 2 на узле A).

Балансировка нагрузки (по крайней мере, с точки зрения SQL Server) не существует (по крайней мере, в том же смысле, что и балансировка нагрузки веб-сервера). Вы не можете сбалансировать нагрузку таким образом. Тем не менее, вы можете разделить ваше приложение для запуска в какой-либо базе данных на сервере 1, а также в другой базе данных на сервере 2 и т. Д. Это основное средство «балансировки нагрузки» в мире SQL.

8 голосов
/ 22 июля 2009

Кластеризация использует какое-то общее хранилище (например, отсек для дисков или SAN) и размещает на нем два интерфейса базы данных. Внешние серверы совместно используют IP-адрес и сетевое имя кластера, которые клиенты используют для подключения, и они сами решают, кто в настоящее время отвечает за обслуживание клиентских запросов.

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

5 голосов
/ 10 января 2013

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

Что касается обеспечения синхронизации данных, то существует сервер управления, к которому все узлы данных подключены вместе с узлом SQL для достижения этой цели (особенно в отношении MySQL).

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

...