Введение

Технология автоматического шардирования для баз данных MySQL

MySQL Cluster – это технология, обеспечивающая кластеризацию типа "shared nothing" и автоматическое шардирование для системы управления базами данных MySQL. Она разработана для обеспечения высокой доступности и высокой пропускной способности с низкой задержкой, а также практически линейной масштабируемости. MySQL Cluster реализуется посредством хранилища NDB или NDBCLUSTER для MySQL ("NDB" расшифровывается как Network Database).

Архитектура

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

Репликация

Внутри MySQL Cluster использует синхронную репликацию посредством двухфазного механизма фиксации, чтобы гарантировать запись данных на несколько узлов при подтверждении операции. (Это отличается от обычной "MySQL Replication", которая является асинхронной.) Для обеспечения доступности требуется две копии данных (известные как реплики). MySQL Cluster автоматически создает "группы узлов" на основе количества реплик и узлов данных, указанных пользователем. Обновления синхронно реплицируются между участниками группы узлов для защиты от потери данных и обеспечения быстрого переключения между узлами. Также возможна асинхронная репликация между кластерами, которую иногда называют "MySQL Cluster Replication" или "географической репликацией". Обычно это используется для репликации кластеров между центрами обработки данных для аварийного восстановления или для снижения влияния сетевой задержки за счет физического размещения данных ближе к пользователям. В отличие от стандартной репликации MySQL, географическая репликация MySQL Cluster использует оптимистичный контроль параллелизма и концепцию эпох (Epochs) для обеспечения механизма обнаружения и разрешения конфликтов, что позволяет организовать активное/активное кластерирование между центрами обработки данных. Начиная с MySQL Cluster 7.2, поддержка синхронной репликации между центрами обработки данных реализована с помощью функции Multi Site Clustering.

Горизонтальное разделение данных (автоматическое разделение)

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

Гибридные хранилища

MySQL Cluster позволяет хранить и получать доступ к наборам данных, размер которых превышает емкость одного сервера, распределяя их по нескольким серверам. MySQL Cluster поддерживает все индексированные столбцы в распределенной памяти. Неиндексированные столбцы также могут храниться в распределенной памяти или на диске с использованием кэша страниц в памяти. Хранение неиндексированных столбцов на диске позволяет MySQL Cluster хранить наборы данных, превышающие суммарный объем памяти всех серверов кластера. MySQL Cluster записывает журналы Redo на диск для всех изменений данных, а также регулярно создает контрольные точки данных на диске. Это обеспечивает согласованное восстановление кластера с диска после полного сбоя. Поскольку журналы Redo записываются асинхронно относительно фиксации транзакций, при полном сбое кластера может быть потеряно небольшое количество транзакций, однако этого можно избежать, используя географическую репликацию или многосайтовый кластер, описанные выше. Текущая задержка асинхронной записи по умолчанию составляет 2 секунды и может быть настроена. Обычные сценарии с единой точкой отказа не приводят к потере данных благодаря синхронной репликации данных внутри кластера. Когда таблица MySQL Cluster хранится в памяти, кластер обращается к дисковому хранилищу только для записи журналов Redo и контрольных точек. Поскольку эти записи выполняются последовательно и включают ограниченное количество операций случайного доступа, MySQL Cluster может достигать более высокой скорости записи при использовании ограниченного дискового оборудования по сравнению с традиционной СУБД, использующей дисковое кэширование. Создание контрольных точек данных таблиц в памяти на диске может быть отключено (для каждой таблицы отдельно), если не требуется постоянное хранение данных на диске.

Ничего не делились .

MySQL Cluster разработан таким образом, чтобы не иметь единой точки отказа. При правильной настройке кластера, отказ любого отдельного узла, системы или компонента оборудования не приведет к отказу всего кластера. Общий диск (SAN) не требуется. В качестве межсоединений между узлами могут использоваться стандартные Ethernet, Gigabit Ethernet, InfiniBand или SCI.

Управление кластерами MySQL

Часть коммерческого MySQL Cluster CGE, MySQL Cluster Manager — это инструмент, разработанный для упрощения создания и администрирования базы данных MySQL Cluster CGE за счет автоматизации типовых задач управления, включая онлайн-масштабирование, обновления, резервное копирование/восстановление и переконфигурацию. MySQL Cluster Manager также осуществляет мониторинг и автоматическое восстановление узлов приложений MySQL Server и управляющих узлов, а также узлов данных MySQL Cluster.

История

MySQL AB приобрела технологию MySQL Cluster у Alzato, небольшой венчурной компании, созданной Ericsson. NDB изначально разрабатывался для рынка телекоммуникаций, предъявлявшего высокие требования к доступности и производительности. MySQL Cluster, основанный на хранилище NDB, впоследствии был интегрирован в продукт MySQL, а его первый выпуск состоялся в MySQL 4.1.

Поддержка

MySQL Cluster распространяется под лицензией GPLv2. Коммерческая поддержка доступна в составе MySQL Cluster CGE, который также включает в себя компоненты, не являющиеся открытым исходным кодом, такие как MySQL Cluster Manager, MySQL Enterprise Monitor, а также MySQL Enterprise Security и MySQL Enterprise Audit.

Другое

Проектирование и моделирование параллельного сервера данных для телекоммуникационных приложений (1997). Исходная мотивация разработки MySQL Cluster.