encyklopedia.space

MySQL Cluster

MySQL Cluster jest rozproszonym systemem zarządzania bazą danych opartym na silniku NDB (Network DataBase) i zaprojektowanym do świadczenia wysokiej dostępności oraz skalowalności w środowiskach o krytycznym obciążeniu. System ten jest częścią rodziny produktów MySQL rozwijanej przez firmę Oracle Corporation po przejęciu Sun Microsystems.

Historia

Pierwsza wersja MySQL Cluster, oznaczona numerem 5.0, została wydana w 2006 roku. Projekt wywodzi się z wcześniejszego rozwiązania NDB Cluster, które pierwotnie powstało w ramach firmy MySQL AB. Po przejęciu MySQL przez Oracle, technologia ta była dalej rozwijana i zintegrowana z ekosystemem MySQL, zyskując wsparcie zarówno w wersjach komercyjnych, jak i open‑source.

Architektura

MySQL Cluster opiera się na trzech podstawowych typach węzłów:

  • Data Nodes (węzły danych) – przechowują rzeczywiste dane w rozproszonym formacie tabel NDB. Dane są replikowane pomiędzy węzłami w trybie synchronicznym, co zapewnia wysoką dostępność.
  • SQL Nodes (węzły SQL) – udostępniają interfejs MySQL (protokoły mysqld) do obsługi zapytań SQL. Dzięki temu aplikacje mogą korzystać ze standardowego API MySQL, nie wiedząc o rozproszonej naturze bazy.
  • Management Nodes (węzły zarządzania) – koordynują konfigurację klastra, monitorują jego stan i zarządzają podziałem danych (partitioning) oraz replikacją.

Komunikacja pomiędzy węzłami odbywa się przy użyciu protokołów własnych NDB oraz protokołu TCP/IP. Dzięki temu możliwe jest rozproszenie klastra zarówno w jednej fizycznej lokalizacji (np. w CentOS lub RHEL), jak i w wielu centrach danych.

Kluczowe cechy

Skalowalność horyzontalna
Możliwość dodawania kolejnych węzłów danych i SQL bez przerywania pracy systemu.
Wysoka dostępność
Replikacja synchroniczna zapewnia, że w przypadku awarii jednego węzła, pozostałe przejmują jego zadania natychmiast.
Niskie opóźnienia
Silnik NDB jest zoptymalizowany pod kątem operacji odczytu i zapisu w czasie rzeczywistym, co czyni go odpowiednim dla aplikacji o krytycznych wymaganiach czasowych, np. telekomunikacji czy e‑commerce.
Rozproszony dostęp do danych
Dane są automatycznie partycjonowane i przydzielane do węzłów danych w oparciu o klucz partycjonowania.
Elastyczność przechowywania
Wspiera zarówno pamięć RAM (dla szybkiego dostępu), jak i dyski twarde (dla trwałości).

Porównanie z innymi silnikami

Cecha MySQL Cluster (NDB) InnoDB PostgreSQL MongoDB
Model danych Relacyjny (SQL) + klucz‑wartość Relacyjny (SQL) Relacyjny (SQL) Dokument‑orientowany
Skalowanie horyzontalne Tak (rozproszony klaster) Ograniczone (sharding w wersji komercyjnej) Tak (rozszerzenia, np. Citus) Tak (sharding natywny)
Wysoka dostępność Replikacja synchroniczna Replikacja asynchroniczna Replikacja asynchroniczna / fizyczna Replikacja asynchroniczna
Obsługa transakcji ACID (w granicach węzła danych) Pełny ACID Pełny ACID Ograniczona (multi‑document)
Opóźnienia Milisekundy w RAM, wyższe przy dysku Średnie Średnie Zmienna

Zastosowania

MySQL Cluster znajduje zastosowanie w sektoraach wymagających nieprzerwanego dostępu do danych oraz bardzo krótkich czasów reakcji:

  • Systemy płatności i bankowość elektroniczna
  • Platformy telekomunikacyjne i IoT
  • Aplikacje mobilne o dużym natężeniu zapytań
  • Systemy zarządzania treścią (CMS) w trybie wysokiej dostępności
  • Rozproszone gry online (MMO)

Instalacja i konfiguracja

Podstawowy proces wdrożenia MySQL Cluster obejmuje następujące kroki:

  1. Przygotowanie środowiska Linux (np. CentOS, Ubuntu) oraz instalacja pakietów ndb-management-server, ndb-mgmd, ndbd i mysqld.
  2. Utworzenie pliku konfiguracyjnego config.ini dla węzła zarządzania, w którym definiuje się liczbę węzłów danych, ich adresy IP oraz parametry partycjonowania.
  3. Uruchomienie ndb_mgmd (management node) i dodanie węzłów danych (ndbd) oraz węzłów SQL (mysqld) do klastra.
  4. Sprawdzenie statusu klastra przy pomocy narzędzia ndb_mgm oraz weryfikacja dostępności tabel NDB.
  5. Tworzenie tabel z silnikiem ENGINE=NDBCLUSTER w standardowej konsoli MySQL.

Przykładowa konfiguracja config.ini

[ndb_mgmd]
NodeId=1
HostName=10.0.0.1

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=20M

[ndbd]
NodeId=2
HostName=10.0.0.2

[ndbd]
NodeId=3
HostName=10.0.0.3

[mysqld]
NodeId=4
HostName=10.0.0.4
    

Bezpieczeństwo

Podobnie jak w klasycznym MySQL, MySQL Cluster wspiera:

  • Uwierzytelnianie użytkowników przy użyciu tabel mysql.user oraz mysql.db.
  • Połączenia szyfrowane TLS pomiędzy klientem a węzłem SQL.
  • Kontrolę dostępu na poziomie wiersza (RLS) w ramach silnika NDB od wersji 7.5.

Rozwój i wersje

Obecnie (stan na 2026 rok) najnowszą stabilną wersją jest MySQL Cluster 8.0.35, która wprowadza m.in.:

  • Ulepszoną obsługę pamięci nieulotnej (NVMe) w warstwie disk data.
  • Nowe narzędzia diagnostyczne ndb_mgm z interfejsem REST API.
  • Wsparcie dla Docker i Kubernetes przy użyciu obrazu mysql/cluster.

Zobacz także