MariaDB Server je jedním z nejpopulárnějších databázových serverů s otevřeným zdrojovým kódem. Byl vytvořen původními vývojáři MySQL a stal se oblíbeným pro svou rychlost, škálovatelnost a robustnost. MariaDB má bohatý ekosystém úložišť, pluginů a dalších nástrojů, díky kterým je velmi univerzální pro širokou škálu případů použití.
Požadavky na prostor na disku a efektivitu I/O našich databází stále rostou. Je to proto, abychom byli schopni řídit náš růst informací správným způsobem.
Pokud jde o úložiště MariaDB, máme na výběr různé typy, jako je XtraDB, InnoDB, Aria nebo MyISAM. Od verze MariaDB 10.2.5 jsou k dispozici také MyRocks. MyRocks je typ úložiště, který by nám mohl skutečně pomoci splnit požadavky, které jsme zmínili dříve.
V tomto blogu se dozvíme více informací o novém enginu MyRocks a o tom, jak jej můžeme použít na serveru MariaDB.
Co je MyRocks?
MyRocks je open source storage engine založený na RocksDB, který byl původně vyvinut Facebookem.
MyRocks mohou být dobrým řešením úložiště, pokud máte pracovní zátěž, která vyžaduje větší kompresi a efektivitu I/O. Používá architekturu Log Structured Merge (LSM), která má lepší kompresi než algoritmy B-tree používané enginem InnoDB (2x lepší komprese ve srovnání s daty komprimovanými InnoDB). Je to také úložiště optimalizované pro zápis (10x menší zesílení zápisu ve srovnání s InnoDB) a má rychlejší načítání a replikaci dat. MyRocks zapisuje data přímo na nejspodnější úroveň, čímž se vyhnete všem režijním nákladům na komprimaci, když povolíte rychlejší načítání dat pro relaci.
LSM funguje tak, že ukládá modifikační operace do vyrovnávací paměti (memtable) a třídí a ukládá data, když je tato vyrovnávací paměť plná.
Ve výchozím nastavení jsou tabulky a databáze uloženy v adresáři #rocksdb v datadir MySQL. Tyto informace jsou uloženy v souborech .sst bez oddělení podle tabulky.
MyRocks podporuje READ COMMITTED a REPEATABLE READ izolované úrovně a nepodporuje SERIALIZABLE.
Jak implementovat MyRocks na serveru MariaDB
Instalace
Nejprve musíme nainstalovat server MariaDB. V tomto příkladu použijeme jako operační systém CentOS Linux vydání 7.6.
Ve výchozím nastavení se tato verze operačního systému pokusí nainstalovat MariaDB 5.5, takže k instalaci MariaDB verze 10.3 přidáme úložiště MariaDB.
$ 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 pak nainstalujeme balíček MariaDB Server:
$ yum install MariaDB-server
Tento příkaz nainstaluje různé závislosti balíčků, nejen server MariaDB.
==========================================================================================================================================================================================================
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)
Ve výchozím nastavení je server MariaDB nainstalován s úložištěm InnoDB, takže musíme nainstalovat stroj RocksDB, abychom jej mohli používat.
$ 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)
Tento příkaz nainstaluje některé požadované závislosti a povolí plugin na serveru MariaDB. Vytvoří také konfigurační soubor v /etc/my.cnf.d/rocksdb.cnf:
[mariadb]
plugin-load-add=ha_rocksdb.so
Tuto instalaci můžeme ověřit spuštěním příkazu SHOW PLUGINS na serveru 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 |
+-------------------------------+----------+--------------------+---------------+---------+
Pokud z nějakého důvodu nemáme plugin povolený, můžeme jej nainstalovat dynamicky spuštěním příkazu INSTALL SONAME nebo INSTALL PLUGIN:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Další možností může být restartování databázových služeb. Tato akce by měla přečíst soubor /etc/my.cnf.d/rocksdb.cnf a povolit plugin.
$ service mariadb restart
Podrobné informace o našem enginu RocksDB můžeme najít pomocí následujícího příkazu:
$ SHOW ENGINE ROCKSDB STATUS
Konfigurace
Co se týče konfiguračních souborů, hlavní je /etc/my.cnf, který obsahuje adresář /etc/my.cnf.d, kde najdeme zbytek konfiguračních souborů. V tomto adresáři budeme mít ve výchozím nastavení následující konfigurační soubory:
- enable_encryption.preset:Povolí šifrování dat v klidu.
- mysql-clients.cnf:Zde jsou konfigurace pro různé skupiny jako [mysqladmin], [mysqlcheck], [mysqldump] a další.
- rocksdb.cnf:Do tohoto souboru přidáme konkrétní konfiguraci pro MyRocks, jako je default-storage-engine nebo rocksdb_block_size.
- server.cnf:Zde máme konfiguraci související s databázovým serverem, jako je adresa vazby a formát binlog.
Všechny systémové proměnné a stavové proměnné MyRocks mají předponu „rocksdb“. Pojďme se na to podívat.
Systémové proměnné:
$ 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 |
…
+-------------------------------------------------+------------------------------------------+
Stavové proměnné:
$ 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 |
…
+----------------------------------------------------+-------+
Více informací o stavu a systémových proměnných najdete na webu MariaDB.
Zálohy pro MariaDB pomocí MyRocks
Zálohy jsou nutností ve všech databázových prostředích. Jsou nezbytné pro obnovu systému, migraci, auditování, testování a další.
Zálohy můžeme kategorizovat do dvou různých typů, logické a fyzické. Logická záloha je uložena ve formátu čitelném pro člověka, jako je SQL, a fyzická záloha obsahuje další binární data.
Pro logické zálohy na MariaDB s MyRocks jako databázovým strojem je nejběžnějším zálohovacím nástrojem klasický mysqldump:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
A pro fyzické zálohování můžeme použít Mariabackup, který je kompatibilní s MyRocks:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Další možností může být myrocks_hotbackup, vytvořený Facebookem. Lze jej použít k převzetí fyzické kopie ze spuštěné instance MyRocks na místní nebo vzdálený server, aniž by bylo nutné zastavit zdrojovou instanci.
Omezení používání MyRocks pro MariaDB
Podívejme se na některá omezení používání enginu MyRocks...
- Optimistická paralelní replikace MariaDB nemusí být podporována
- MyRocks není k dispozici pro 32bitové platformy
- MariaDB Cluster (Galera Cluster) nefunguje s MyRocks (pouze úložiště InnoDB nebo XtraDB)
- Transakce se musí vejít do paměti
- Vyžaduje speciální nastavení pro načítání dat
- SERIALIZABLE není podporována
- Přenosný tabulkový prostor, cizí klíč, prostorový index a fulltextový index nejsou podporovány
Závěr
MyRocks jsou dostupné v MariaDB od verzí vyšších než 10.2.5. Jak jsme zmínili dříve, tento modul úložiště vám může být užitečný, když máte pracovní zátěž, která vyžaduje vysokou kompresi dat a vyšší úroveň efektivity I/O. Chcete-li se dozvědět více o MyRocks, můžete se podívat na toto.