MariaDB Server is een van de meest populaire open source databaseservers. Het is gemaakt door de oorspronkelijke ontwikkelaars van MySQL en het werd populair omdat het snel, schaalbaar en robuust was. MariaDB heeft een rijk ecosysteem van opslag-engines, plug-ins en andere tools die het zeer veelzijdig maken voor een breed scala aan gebruiksscenario's.
De vereisten voor schijfruimte en I/O-efficiëntie van onze databases worden steeds hoger. Dit is zodat we onze informatiegroei op een correcte manier kunnen beheren.
Wat betreft de MariaDB-opslagengine, we hebben verschillende typen om uit te kiezen, zoals XtraDB, InnoDB, Aria of MyISAM. Sinds MariaDB 10.2.5 is versie MyRocks ook beschikbaar. MyRocks is het type opslagengine dat ons echt zou kunnen helpen om aan de eerder genoemde vereisten te voldoen.
In deze blog leren we meer informatie over de nieuwe MyRocks-engine en hoe we deze in een MariaDB-server kunnen gebruiken.
Wat is MyRocks?
MyRocks is een open source opslagengine gebaseerd op RocksDB die oorspronkelijk is ontwikkeld door Facebook.
MyRocks kan een goede opslagoplossing zijn als je workloads hebt die meer compressie en I/O-efficiëntie vereisen. Het maakt gebruik van een Log Structured Merge (LSM)-architectuur met een betere compressie dan de B-tree-algoritmen die door de InnoDB-engine worden gebruikt (2x betere compressie vergeleken met gegevens die door InnoDB zijn gecomprimeerd). Het is ook een voor schrijven geoptimaliseerde opslag-engine (10x minder schrijfversterking in vergelijking met InnoDB) en het laadt en repliceert sneller gegevens. MyRocks schrijft gegevens rechtstreeks naar het onderste niveau, waardoor alle compactie-overheads worden vermeden wanneer u sneller gegevens laadt voor een sessie.
Een LSM werkt door wijzigingsbewerkingen op te slaan in een buffer (memtable) en de gegevens te sorteren en op te slaan wanneer deze buffer vol is.
Tabellen en databases worden standaard opgeslagen in een #rocksdb-directory in de MySQL-datadir. Deze informatie wordt opgeslagen in .sst-bestanden zonder scheiding per tabel.
MyRocks ondersteunt READ COMMITTED en REPEATABLE READ geïsoleerde niveaus en ondersteunt geen SERIALISEERBAAR.
Hoe MyRocks op een MariaDB-server te implementeren
Installatie
Eerst moeten we de MariaDB-server installeren. In dit voorbeeld gebruiken we CentOS Linux release 7.6 als besturingssysteem.
Standaard probeert deze OS-versie MariaDB 5.5 te installeren, dus we zullen de MariaDB-repository toevoegen om MariaDB-versie 10.3 te installeren.
$ 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
En dan zullen we het MariaDB Server-pakket installeren:
$ yum install MariaDB-server
Deze opdracht zal verschillende pakketafhankelijkheden installeren, niet alleen 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)
De MariaDB-server is standaard geïnstalleerd met de InnoDB-opslagengine, dus we moeten de RocksDB-engine installeren om er gebruik van te kunnen maken.
$ 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)
Met deze opdracht worden enkele vereiste afhankelijkheden geïnstalleerd en wordt de plug-in op de MariaDB-server ingeschakeld. Het maakt ook een configuratiebestand aan in /etc/my.cnf.d/rocksdb.cnf:
[mariadb]
plugin-load-add=ha_rocksdb.so
We kunnen deze installatie verifiëren door het commando SHOW PLUGINS in de MariaDB-server uit te voeren.
$ 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 |
+-------------------------------+----------+--------------------+---------------+---------+
Als we om de een of andere reden de plug-in niet hebben ingeschakeld, kunnen we deze dynamisch installeren door de opdracht INSTALL SONAME of INSTALL PLUGIN uit te voeren:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Een andere optie zou het herstarten van de databaseservices kunnen zijn. Deze actie zou het bestand /etc/my.cnf.d/rocksdb.cnf moeten lezen en de plug-in moeten inschakelen.
$ service mariadb restart
We kunnen gedetailleerde informatie over onze RocksDB-engine vinden door het volgende commando te gebruiken:
$ SHOW ENGINE ROCKSDB STATUS
Configuratie
Wat betreft de configuratiebestanden, de belangrijkste is /etc/my.cnf, die de directory /etc/my.cnf.d bevat waar we de rest van de configuratiebestanden kunnen vinden. In deze map hebben we standaard de volgende configuratiebestanden:
- enable_encryption.preset:het zal data-at-rest-codering inschakelen.
- mysql-clients.cnf:hier zijn configuraties voor verschillende groepen zoals [mysqladmin], [mysqlcheck], [mysqldump] en meer.
- rocksdb.cnf:in dit bestand voegen we de specifieke configuratie voor MyRocks toe, zoals standaard-storage-engine of rocksdb_block_size.
- server.cnf:hier hebben we configuratie gerelateerd aan de databaseserver, zoals bind-address en binlog_format.
Alle MyRocks-systeemvariabelen en statusvariabelen worden voorafgegaan door "rocksdb". Laten we hier eens naar kijken.
Systeemvariabelen:
$ 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 |
…
+-------------------------------------------------+------------------------------------------+
Statusvariabelen:
$ 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 |
…
+----------------------------------------------------+-------+
U kunt meer informatie over de status- en systeemvariabelen vinden op de MariaDB-website.
Back-ups voor MariaDB met MyRocks
Back-ups zijn een must in alle database-omgevingen. Ze zijn essentieel voor systeemherstel, migraties, auditing, testen en meer.
We kunnen de back-ups in twee verschillende typen indelen, logisch en fysiek. De logische back-up wordt opgeslagen in een voor mensen leesbare indeling zoals SQL, en de fysieke back-up bevat de aanvullende binaire gegevens.
Voor logische back-ups op MariaDB met MyRocks als database-engine, is de meest gebruikelijke back-uptool de klassieke mysqldump:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
En voor fysieke back-up kunnen we Mariabackup gebruiken die compatibel is met MyRocks:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Een andere optie kan myrocks_hotbackup zijn, gemaakt door Facebook. Het kan worden gebruikt om een fysieke kopie te maken van een actieve MyRocks-instantie naar een lokale of externe server, zonder de broninstantie te stoppen.
Beperkingen van het gebruik van MyRocks voor MariaDB
Laten we eens kijken naar enkele van de beperkingen van het gebruik van de MyRocks-engine...
- MariaDB's optimistische parallelle replicatie wordt mogelijk niet ondersteund
- MyRocks is niet beschikbaar voor 32-bits platforms
- MariaDB Cluster (Galera Cluster) werkt niet met MyRocks (alleen InnoDB- of XtraDB-opslagengines)
- De transactie moet in het geheugen passen
- Vereist speciale instellingen voor het laden van gegevens
- SERIALIZABLE wordt niet ondersteund
- Verplaatsbare tabelruimte, externe sleutel, ruimtelijke index en volledige tekstindex worden niet ondersteund
Conclusie
MyRocks is beschikbaar in MariaDB vanaf versies hoger dan 10.2.5. Zoals we eerder vermeldden, kan deze opslagengine nuttig voor u zijn wanneer u workloads hebt die een hoge gegevenscompressie en een grotere I/O-efficiëntie vereisen. Voor meer informatie over MyRocks kun je dit bekijken.