MariaDB
 sql >> Database >  >> RDS >> MariaDB

Utilizzo di MyRocks Storage Engine con MariaDB Server

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.