УДК   004.657                                                               Шевченко В.Ю.

Национальный горный университет

Методика построения кластера баз данных MySQL

В данной статье будет рассмотрен кластер MySQL основанный на нескольких равносильных узлах, его основные особенности и недостатки. Будет проведено тестирование и сравнение производительности кластера построенного на одном, двух, четырех узлах, с использованием одной, двух, четырех реплик.

Кластер – это группа компьютеров, объединённых высокоскоростными каналами связи в единую сеть.

В современной индустрии информационных технологий существует много реализаций кластеров БД, в частности эту технологию в том или ином виде используют такие серверы БД как MS SQL, PostgreSQL, MySQL.  В данной статье мы рассмотрим реализацию кластера на основе сервера БД MySQL.

Ограничения, которые накладываются на кластер под управлением MySQL:

А) Вся БД должна быть расположена в ОЗУ – для конфигурации из 2-х узлов хранения данных – целиком на каждом из узлов. При этом под информацию, хранимую на диске каждым из узлов, рекомендуется резервировать 12-кратный размер БД.

Б) Таблицы могут иметь только фиксированную длину строки.

В) Строка таблицы не должна превышать 8KB.

Г) В таблице не должно быть более 128 столбцов.

MySQL кластер использует свой способ хранение данных, так называемый NDBcluster, это дает возможность выполнения нескольких серверов MySQL внутри одного кластера. MySQL кластер представляет новую технологию, позволяющую использовать кластеризацию в оперативной памяти, без совместных ресурсов. В MySQL кластере каждая часть кластера именуется node (узел), он является процессом. Может иметься любое число узлов на одном компьютере. MySQL кластер состоит из нескольких узлов, каждый выполняет свою роль: сервер MySQL, узлы хранения NDB, а также сервер управления.

В технологии MySQL кластер используются такие понятия как реплика, группа узлов, нода хранения данных, MySQL нода и нода управляющего сервера.

Реплика представляет собой полную копию данных, хранящихся в базе данных.

Группа узлов состоит из нескольких узлов, на которых хранится столько копий данных, сколько указанно реплик.

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

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

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

Тестирование проводилось на пяти равносильных узлах (компьютерах) под управлением операционной системы Windows Server 2003. Версия программного обеспечения кластера 7.1.9а.

Ping между узлами: 1 мс.

Запущенные ноды на узлах и схема соединения узлов в сеть отображены на Схеме 1.

 

Нода управляющего сервера

+

MySQL нода

Нода хранения данных 1

Нода хранения данных 1

Нода хранения данных 1

Нода хранения данных 1

Router

Схема 1: Расположение нод кластера на узлах, и схема сетевых соединений.

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

Тестирование проводилось тремя скриптами:

1.     Insert 1000 строк в таблицу состоящую из индекса и текстового поля.

2.     Insert 50000 строк в таблицу состоящую их индекса и текстового поля.

3.     Select с условием и объединением двух таблиц с помощью inner join. Таблицы содержат по 50000 строк.

4.     Select с условием к одной таблице. Таблица содержит 50000 строк.

 

SQL скрипт с использованием   inner join, сек

SQLскрипт без использования inner join, сек

1 нода 1 реплика

88.859

6.485

2 ноды 1 реплика

98.313

4.500

2 ноды 2 реплики

93.594

4.485

4 ноды 2 реплики

102.063

3.781

4 ноды 4 реплики

101.672

3.734

Таблица 1. Результаты тестирования.

 

Insert 1000 строк, сек

Insert 50000 строк, сек

1 нода 1 реплика

2.138

116.152

2 ноды 1 реплика

2.203

120.234

2 ноды 2 реплики

3.984

200.828

4 ноды 2 реплики

4.078

208.781

4 ноды 4 реплики

6.250

331.907

Таблица 2. Результаты тестирования

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

         Что касается добавления записей в таблицы, то тут ситуация вполне однозначна, чем больше узлов хранения данных, тем дольше новая запись будет добавляться в базу данных. Еще более важную роль играет количество копий данных, при добавлении одной копии данных, время добавления новой записи увеличивается на 60-80% в зависимости от программной и аппаратной конфигурации кластера.

 

За ценные замечания и советы автор выражает благодарность научному руководителю доценту кафедры ПЗКС Национального горного университета Савельеву Владимиру Андреевичу.

 

Список литературы:

1.     http://dev.MySQL.com/doc/MySQL-cluster-excerpt/5.1/en/index.html

2.     http://dev.1c-bitrix.ru/community/blogs/cluster_db/201.php

3.     http://phpclub.ru/MySQL/doc/table-types.html