MariaDB Server è uno dei server di database open source più popolari. È stato creato dagli sviluppatori originali di MySQL ed è diventato popolare per essere veloce, scalabile e robusto. MariaDB dispone di un ricco ecosistema di motori di archiviazione, plug-in e altri strumenti che lo rendono molto versatile per un'ampia varietà di casi d'uso.
I requisiti di spazio su disco e di efficienza I/O dei nostri database continuano a crescere. In questo modo siamo in grado di gestire la crescita delle nostre informazioni in modo corretto.
Per quanto riguarda il motore di archiviazione MariaDB, abbiamo diversi tipi tra cui scegliere come XtraDB, InnoDB, Aria o MyISAM. Dalla versione di MariaDB 10.2.5 è disponibile anche MyRocks. MyRocks è il tipo di motore di archiviazione che potrebbe davvero aiutarci a soddisfare i requisiti menzionati in precedenza.
In questo blog impareremo ulteriori informazioni sul nuovo motore MyRocks e su come utilizzarlo in un server MariaDB.
Cos'è MyRocks?
MyRocks è un motore di archiviazione open source basato su RocksDB originariamente sviluppato da Facebook.
MyRocks può essere una buona soluzione di archiviazione quando si hanno carichi di lavoro che richiedono una maggiore compressione ed efficienza I/O. Utilizza un'architettura Log Structured Merge (LSM) che ha una compressione migliore rispetto agli algoritmi B-tree utilizzati dal motore InnoDB (compressione 2 volte migliore rispetto ai dati compressi da InnoDB). È anche un motore di archiviazione ottimizzato per la scrittura (amplificazione di scrittura 10 volte inferiore rispetto a InnoDB) e ha un caricamento e una replica dei dati più rapidi. MyRocks scrive i dati direttamente al livello più basso, evitando tutti i costi di compattazione quando abiliti un caricamento più rapido dei dati per una sessione.
Un LSM funziona memorizzando le operazioni di modifica in un buffer (memtable) e ordinando e archiviando i dati quando questo buffer è pieno.
Per impostazione predefinita, tabelle e database sono archiviati in una directory #rocksdb all'interno della directory data di MySQL. Queste informazioni sono memorizzate in file .sst senza separazione per tabella.
MyRocks supporta i livelli isolati READ COMMITTED e REPEATABLE READ e non supporta SERIALIZABLE.
Come implementare MyRocks su un server MariaDB
Installazione
Innanzitutto, dobbiamo installare il server MariaDB. In questo esempio, utilizzeremo CentOS Linux versione 7.6 come sistema operativo.
Per impostazione predefinita, questa versione del sistema operativo tenterà di installare MariaDB 5.5, quindi aggiungeremo il repository MariaDB per installare MariaDB versione 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
E poi, installeremo il pacchetto MariaDB Server:
$ yum install MariaDB-server
Questo comando installerà diverse dipendenze del pacchetto, non solo 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)
Per impostazione predefinita, il server MariaDB è installato con il motore di archiviazione InnoDB, quindi dobbiamo installare il motore RocksDB per poterlo utilizzare.
$ 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)
Questo comando installerà alcune dipendenze richieste e abiliterà il plug-in sul server MariaDB. Creerà anche un file di configurazione in /etc/my.cnf.d/rocksdb.cnf:
[mariadb]
plugin-load-add=ha_rocksdb.so
Possiamo verificare questa installazione eseguendo il comando SHOW PLUGINS nel server 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 |
+-------------------------------+----------+--------------------+---------------+---------+
Se per qualche motivo non abbiamo il plugin abilitato, possiamo installarlo dinamicamente eseguendo il comando INSTALL SONAME o INSTALL PLUGIN:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Un'altra opzione potrebbe essere il riavvio dei servizi di database. Questa azione dovrebbe leggere il file /etc/my.cnf.d/rocksdb.cnf e abilitare il plugin.
$ service mariadb restart
Possiamo trovare informazioni dettagliate sul nostro motore RocksDB usando il seguente comando:
$ SHOW ENGINE ROCKSDB STATUS
Configurazione
Per quanto riguarda i file di configurazione, il principale è /etc/my.cnf, che include la directory /etc/my.cnf.d dove possiamo trovare il resto dei file di configurazione. In questa directory, avremo i seguenti file di configurazione per impostazione predefinita:
- enable_encryption.preset:abiliterà la crittografia dei dati a riposo.
- mysql-clients.cnf:qui ci sono configurazioni per diversi gruppi come [mysqladmin], [mysqlcheck], [mysqldump] e altri.
- rocksdb.cnf:in questo file aggiungeremo la configurazione specifica per MyRocks, come default-storage-engine o rocksdb_block_size.
- server.cnf:qui abbiamo la configurazione relativa al server del database come bind-address e binlog_format.
Tutte le variabili di sistema e di stato di MyRocks sono precedute da "rocksdb". Diamo un'occhiata a questo.
Variabili di sistema:
$ 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 |
…
+-------------------------------------------------+------------------------------------------+
Variabili di stato:
$ 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 |
…
+----------------------------------------------------+-------+
Puoi trovare maggiori informazioni sullo stato e sulle variabili di sistema sul sito web di MariaDB.
Backup per MariaDB utilizzando MyRocks
I backup sono un must in tutti gli ambienti di database. Sono essenziali per il ripristino del sistema, le migrazioni, il controllo, i test e altro ancora.
Possiamo classificare i backup in due diversi tipi, logici e fisici. Il backup logico è archiviato in un formato leggibile come SQL e il backup fisico contiene i dati binari aggiuntivi.
Per i backup logici su MariaDB con MyRocks come motore di database, lo strumento di backup più comune è il classico mysqldump:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
E per il backup fisico, possiamo usare Mariabackup che è compatibile con MyRocks:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Un'altra opzione può essere myrocks_hotbackup, creata da Facebook. Può essere utilizzato per trasferire una copia fisica da un'istanza di MyRocks in esecuzione su un server locale o remoto, senza interrompere l'istanza di origine.
Limitazioni all'uso di MyRocks per MariaDB
Diamo un'occhiata ad alcuni dei limiti dell'utilizzo del motore MyRocks...
- La replica parallela ottimistica di MariaDB potrebbe non essere supportata
- MyRocks non è disponibile per piattaforme a 32 bit
- Il cluster MariaDB (Galera Cluster) non funziona con MyRocks (solo motori di archiviazione InnoDB o XtraDB)
- La transazione deve stare in memoria
- Richiede impostazioni speciali per il caricamento dei dati
- SERIALIZABLE non è supportato
- Il tablespace trasportabile, la chiave esterna, l'indice spaziale e l'indice fulltext non sono supportati
Conclusione
MyRocks è disponibile in MariaDB a partire dalle versioni successive alla 10.2.5. Come accennato in precedenza, questo motore di archiviazione può essere utile quando si hanno carichi di lavoro che richiedono un'elevata compressione dei dati e livelli maggiori di efficienza I/O. Per saperne di più su MyRocks puoi dare un'occhiata a questo.