Кластер базы данных и балансировка нагрузки


149

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

Ответы:


132

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

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

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

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

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

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

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

    Плюсом является то, что это легче сделать, чем мультимастер, и это обычно сохраняет свойства ACID.

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


1
Ах, забыл про репликацию :) Да, вы можете добиться балансировки нагрузки таким образом в сочетании с логикой уровня приложения :). +1
Джимми Чандра

1
Документы Postgresql по-разному относятся к «кластеру базы данных»: «Прежде чем что-либо делать, необходимо инициализировать область хранения базы данных на диске. Мы называем это кластером базы данных. (В SQL используется термин« кластер каталога ».) Кластер базы данных - это коллекция баз данных, управляемых одним экземпляром работающего сервера баз данных. " postgresql.org/docs/8.3/static/creating-cluster.html
Donato,

1
Что означают свойства ACID, или, скорее, что именно вы теряете, если не сохраняете их?
TheStoryCoder

@TheStoryCoder В компьютерных науках ACID (атомарность, непротиворечивость, изоляция, долговечность) - это набор свойств транзакций базы данных, предназначенных для гарантии достоверности даже в случае ошибок, сбоев питания и т. Д. В контексте баз данных последовательность баз данных Операции, которые удовлетворяют свойствам ACID (и их можно воспринимать как одну логическую операцию над данными), называются транзакциями. Например, перевод средств с одного банковского счета на другой, даже с несколькими изменениями, такими как дебетование одного счета и зачисление на другой, представляет собой одну транзакцию.
fizampou

17

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

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

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

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


9

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

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


6

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.