MariaDB Server to jeden z najpopularniejszych serwerów bazodanowych typu open source. Został stworzony przez oryginalnych programistów MySQL i stał się popularny ze względu na szybkość, skalowalność i niezawodność. MariaDB ma bogaty ekosystem silników pamięci masowej, wtyczek i innych narzędzi, dzięki czemu jest bardzo wszechstronna i nadaje się do wielu różnych zastosowań.
Wymagania dotyczące przestrzeni dyskowej i wydajności we/wy naszych baz danych stale rosną. Dzieje się tak, abyśmy byli w stanie prawidłowo zarządzać naszym wzrostem informacji.
Jeśli chodzi o silnik pamięci masowej MariaDB, mamy do wyboru różne typy, takie jak XtraDB, InnoDB, Aria lub MyISAM. Od wersji MariaDB 10.2.5 dostępny jest również MyRocks. MyRocks to rodzaj silnika pamięci masowej, który może naprawdę pomóc nam spełnić wymagania, o których wspomnieliśmy wcześniej.
W tym blogu dowiemy się więcej informacji o nowym silniku MyRocks i o tym, jak możemy go używać na serwerze MariaDB.
Co to jest MyRocks?
MyRocks to silnik pamięci masowej typu open source oparty na RocksDB, który został pierwotnie opracowany przez Facebooka.
MyRocks może być dobrym rozwiązaniem do przechowywania, gdy masz obciążenia wymagające większej kompresji i wydajności we/wy. Wykorzystuje architekturę Log Structured Merge (LSM), która ma lepszą kompresję niż algorytmy B-drzewa używane przez silnik InnoDB (2x lepsza kompresja w porównaniu do danych skompresowanych przez InnoDB). Jest to również zoptymalizowany pod kątem zapisu silnik pamięci masowej (10x mniejsze wzmocnienie zapisu w porównaniu z InnoDB) i zapewnia szybsze ładowanie i replikację danych. MyRocks zapisuje dane bezpośrednio na najniższym poziomie, co pozwala uniknąć wszelkich ogólnych kosztów kompaktowania, gdy włączysz szybsze ładowanie danych dla sesji.
LSM działa poprzez przechowywanie operacji modyfikacji w buforze (zapamiętywanym) oraz sortowanie i przechowywanie danych, gdy ten bufor jest pełny.
Domyślnie tabele i bazy danych są przechowywane w katalogu #rocksdb w katalogu danych MySQL. Te informacje są przechowywane w plikach .sst bez rozdzielania według tabeli.
MyRocks obsługuje izolowane poziomy ODCZYTU POWTARZALNEGO i ODCZYTU POWTARZALNEGO i nie obsługuje SERIALIZABLE.
Jak zaimplementować MyRocks na serwerze MariaDB
Instalacja
Najpierw musimy zainstalować serwer MariaDB. W tym przykładzie użyjemy CentOS Linux w wersji 7.6 jako systemu operacyjnego.
Domyślnie ta wersja systemu operacyjnego będzie próbowała zainstalować MariaDB 5.5, więc dodamy repozytorium MariaDB, aby zainstalować MariaDB w wersji 10.3.
$ cat > /etc/yum.repos.d/MariaDB.repo <<- EOF
# MariaDB 10.3 CentOS repository
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
A następnie zainstalujemy pakiet MariaDB Server:
$ yum install MariaDB-server
To polecenie zainstaluje różne zależności pakietów, nie tylko MariaDB Server.
==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
MariaDB-server x86_64 10.3.15-1.el7.centos mariadb 24 M
Installing for dependencies:
MariaDB-client x86_64 10.3.15-1.el7.centos mariadb 11 M
MariaDB-common x86_64 10.3.15-1.el7.centos mariadb 78 k
MariaDB-compat x86_64 10.3.15-1.el7.centos mariadb 2.8 M
boost-program-options x86_64 1.53.0-27.el7 base 156 k
galera x86_64 25.3.26-1.rhel7.el7.centos mariadb 8.1 M
libaio x86_64 0.3.109-13.el7 base 24 k
lsof x86_64 4.87-6.el7 base 331 k
make x86_64 1:3.82-23.el7 base 420 k
openssl x86_64 1:1.0.2k-16.el7_6.1 updates 493 k
perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 base 32 k
perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 base 57 k
perl-DBI x86_64 1.627-4.el7 base 802 k
perl-Data-Dumper x86_64 2.145-3.el7 base 47 k
perl-IO-Compress noarch 2.061-2.el7 base 260 k
perl-Net-Daemon noarch 0.48-5.el7 base 51 k
perl-PlRPC noarch 0.2020-14.el7 base 36 k
Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package (+16 Dependent packages)
Domyślnie serwer MariaDB jest instalowany z silnikiem pamięci masowej InnoDB, więc musimy zainstalować silnik RocksDB, aby móc z niego korzystać.
$ yum install MariaDB-rocksdb-engine
==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
MariaDB-rocksdb-engine x86_64 10.3.15-1.el7.centos mariadb 4.4 M
Installing for dependencies:
libzstd x86_64 1.3.4-1.el7 mariadb 211 k
snappy x86_64 1.1.0-3.el7 base 40 k
Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package (+2 Dependent packages)
To polecenie zainstaluje niektóre wymagane zależności i włączy wtyczkę na serwerze MariaDB. Utworzy również plik konfiguracyjny w /etc/my.cnf.d/rocksdb.cnf:
[mariadb]
plugin-load-add=ha_rocksdb.so
Możemy zweryfikować tę instalację, uruchamiając polecenie SHOW PLUGINS na serwerze MariaDB.
$ MariaDB> SHOW PLUGINS;
+-------------------------------+----------+--------------------+---------------+---------+
| Name | Status | Type | Library | License |
+-------------------------------+----------+--------------------+---------------+---------+
...
| ROCKSDB | ACTIVE | STORAGE ENGINE | ha_rocksdb.so | GPL |
| ROCKSDB_CFSTATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DBSTATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_PERF_CONTEXT | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_PERF_CONTEXT_GLOBAL | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_CF_OPTIONS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_COMPACTION_STATS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_GLOBAL_INFO | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DDL | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_SST_PROPS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_INDEX_FILE_MAP | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_LOCKS | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_TRX | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
| ROCKSDB_DEADLOCK | ACTIVE | INFORMATION SCHEMA | ha_rocksdb.so | GPL |
+-------------------------------+----------+--------------------+---------------+---------+
Jeśli z jakiegoś powodu nie mamy włączonej wtyczki, możemy zainstalować ją dynamicznie, wykonując polecenie INSTALL SONAME lub INSTALL PLUGIN:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Inną opcją może być ponowne uruchomienie usług bazy danych. Ta akcja powinna odczytać plik /etc/my.cnf.d/rocksdb.cnf i włączyć wtyczkę.
$ service mariadb restart
Szczegółowe informacje o naszym silniku RocksDB możemy znaleźć za pomocą następującego polecenia:
$ SHOW ENGINE ROCKSDB STATUS
Konfiguracja
Jeśli chodzi o pliki konfiguracyjne, głównym z nich jest /etc/my.cnf, który zawiera katalog /etc/my.cnf.d, w którym możemy znaleźć resztę plików konfiguracyjnych. W tym katalogu domyślnie będziemy mieć następujące pliki konfiguracyjne:
- enable_encryption.preset:Włączy szyfrowanie danych w stanie spoczynku.
- mysql-clients.cnf:Tutaj są konfiguracje dla różnych grup, takich jak [mysqladmin], [mysqlcheck], [mysqldump] i inne.
- rocksdb.cnf:W tym pliku dodamy specyficzną konfigurację dla MyRocks, taką jak default-storage-engine lub rocksdb_block_size.
- server.cnf:Tutaj mamy konfigurację związaną z serwerem bazy danych, taką jak bind-address i binlog_format.
Wszystkie zmienne systemowe i zmienne stanu MyRocks są poprzedzone słowem „rocksdb”. Rzućmy okiem na to.
Zmienne systemowe:
$ MariaDB> SHOW VARIABLES LIKE 'rocksdb%';
+-------------------------------------------------+------------------------------------------+
| Variable_name | Value |
+-------------------------------------------------+------------------------------------------+
| rocksdb_access_hint_on_compaction_start | 1 |
| rocksdb_advise_random_on_open | ON |
| rocksdb_allow_concurrent_memtable_write | OFF |
| rocksdb_allow_mmap_reads | OFF |
| rocksdb_allow_mmap_writes | OFF |
| rocksdb_allow_to_start_after_corruption | OFF |
| rocksdb_blind_delete_primary_key | OFF |
| rocksdb_block_cache_size | 536870912 |
| rocksdb_block_restart_interval | 16 |
| rocksdb_block_size | 4096 |
…
+-------------------------------------------------+------------------------------------------+
Zmienne stanu:
$ MariaDB> SHOW STATUS LIKE 'rocksdb%';
+----------------------------------------------------+-------+
| Variable_name | Value |
+----------------------------------------------------+-------+
| Rocksdb_rows_deleted | 0 |
| Rocksdb_rows_inserted | 0 |
| Rocksdb_rows_read | 0 |
| Rocksdb_rows_updated | 0 |
| Rocksdb_rows_deleted_blind | 0 |
| Rocksdb_rows_expired | 0 |
| Rocksdb_rows_filtered | 0 |
| Rocksdb_system_rows_deleted | 0 |
| Rocksdb_system_rows_inserted | 0 |
| Rocksdb_system_rows_read | 0 |
…
+----------------------------------------------------+-------+
Więcej informacji o stanie i zmiennych systemowych można znaleźć w witrynie MariaDB.
Kopie zapasowe dla MariaDB przy użyciu MyRocks
Kopie zapasowe są koniecznością we wszystkich środowiskach baz danych. Są niezbędne do odzyskiwania systemu, migracji, audytu, testowania i nie tylko.
Możemy podzielić kopie zapasowe na dwa różne typy, logiczne i fizyczne. Logiczna kopia zapasowa jest przechowywana w formacie czytelnym dla człowieka, takim jak SQL, a fizyczna kopia zapasowa zawiera dodatkowe dane binarne.
W przypadku logicznych kopii zapasowych w MariaDB z MyRocks jako silnikiem bazy danych, najpopularniejszym narzędziem do tworzenia kopii zapasowych jest klasyczny mysqldump:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
A do fizycznej kopii zapasowej możemy użyć Mariabackup, która jest kompatybilna z MyRocks:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Inną opcją może być myrocks_hotbackup, stworzony przez Facebooka. Może być używany do przenoszenia fizycznej kopii z działającej instancji MyRocks na lokalny lub zdalny serwer, bez zatrzymywania instancji źródłowej.
Ograniczenia korzystania z MyRocks dla MariaDB
Przyjrzyjmy się niektórym ograniczeniom korzystania z silnika MyRocks...
- Optymistyczna replikacja równoległa MariaDB może nie być obsługiwana
- MyRocks nie jest dostępny dla platform 32-bitowych
- Klaster MariaDB (klaster Galera) nie działa z MyRocks (tylko silniki pamięci masowej InnoDB lub XtraDB)
- Transakcja musi zmieścić się w pamięci
- Wymaga specjalnych ustawień do ładowania danych
- SERIALIZABLE nie jest obsługiwane
- Przenośna przestrzeń tabel, klucz obcy, indeks przestrzenny i indeks pełnotekstowy nie są obsługiwane
Wniosek
MyRocks jest dostępny w MariaDB od wersji wyższych niż 10.2.5. Jak wspomnieliśmy wcześniej, ten aparat magazynu może być przydatny, gdy masz obciążenia wymagające wysokiej kompresji danych i wyższych poziomów wydajności we/wy. Aby dowiedzieć się więcej o MyRocks, możesz to sprawdzić.