MariaDB Server est l'un des serveurs de base de données open source les plus populaires. Il a été créé par les développeurs originaux de MySQL et il est devenu populaire pour sa rapidité, son évolutivité et sa robustesse. MariaDB dispose d'un riche écosystème de moteurs de stockage, de plugins et d'autres outils qui le rendent très polyvalent pour une grande variété de cas d'utilisation.
Les exigences d'espace disque et d'efficacité d'E/S de nos bases de données continuent de croître. Cela nous permet de gérer correctement la croissance de nos informations.
En ce qui concerne le moteur de stockage MariaDB, nous avons le choix entre différents types, tels que XtraDB, InnoDB, Aria ou MyISAM. Depuis la version MariaDB 10.2.5, MyRocks est également disponible. MyRocks est le type de moteur de stockage qui pourrait vraiment nous aider à répondre aux exigences que nous avons mentionnées précédemment.
Dans ce blog, nous apprendrons plus d'informations sur le nouveau moteur MyRocks et comment nous pouvons l'utiliser dans un serveur MariaDB.
Qu'est-ce que MyRocks ?
MyRocks est un moteur de stockage open source basé sur RocksDB qui a été initialement développé par Facebook.
MyRocks peut être une bonne solution de stockage lorsque vous avez des charges de travail qui nécessitent une compression et une efficacité d'E/S supérieures. Il utilise une architecture Log Structured Merge (LSM) qui a une meilleure compression que les algorithmes B-tree utilisés par le moteur InnoDB (2x meilleure compression par rapport aux données compressées par InnoDB). C'est également un moteur de stockage optimisé en écriture (10 fois moins d'amplification en écriture par rapport à InnoDB) et il a un chargement et une réplication des données plus rapides. MyRocks écrit les données directement au niveau le plus bas, ce qui évite tous les frais généraux de compactage lorsque vous activez un chargement de données plus rapide pour une session.
Un LSM fonctionne en stockant les opérations de modification dans un tampon (memtable) et en triant et stockant les données lorsque ce tampon est plein.
Par défaut, les tables et les bases de données sont stockées dans un répertoire #rocksdb à l'intérieur du répertoire de données MySQL. Ces informations sont stockées dans des fichiers .sst sans séparation par table.
MyRocks prend en charge les niveaux isolés READ COMMITTED et REPEATABLE READ et ne prend pas en charge SERIALIZABLE.
Comment implémenter MyRocks sur un serveur MariaDB
Installation
Tout d'abord, nous devons installer le serveur MariaDB. Dans cet exemple, nous utiliserons CentOS Linux version 7.6 comme système d'exploitation.
Par défaut, cette version du système d'exploitation essaiera d'installer MariaDB 5.5, nous allons donc ajouter le référentiel MariaDB pour installer la version 10.3 de 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
Et ensuite, nous installerons le package MariaDB Server :
$ yum install MariaDB-server
Cette commande installera différentes dépendances de package, pas seulement 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)
Par défaut, le serveur MariaDB est installé avec le moteur de stockage InnoDB, nous devons donc installer le moteur RocksDB pour pouvoir l'utiliser.
$ 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)
Cette commande installera certaines dépendances requises et activera le plug-in sur le serveur MariaDB. Il créera également un fichier de configuration dans /etc/my.cnf.d/rocksdb.cnf :
[mariadb]
plugin-load-add=ha_rocksdb.so
Nous pouvons vérifier cette installation en exécutant la commande SHOW PLUGINS dans le serveur 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 |
+-------------------------------+----------+--------------------+---------------+---------+
Si pour une raison quelconque nous n'avons pas activé le plugin, nous pouvons l'installer dynamiquement en exécutant la commande INSTALL SONAME ou INSTALL PLUGIN :
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Une autre option pourrait être de redémarrer les services de base de données. Cette action devrait lire le fichier /etc/my.cnf.d/rocksdb.cnf et activer le plugin.
$ service mariadb restart
Nous pouvons trouver des informations détaillées sur notre moteur RocksDB en utilisant la commande suivante :
$ SHOW ENGINE ROCKSDB STATUS
Configuration
Concernant les fichiers de configuration, le principal est /etc/my.cnf, qui comprend le répertoire /etc/my.cnf.d où l'on peut trouver le reste des fichiers de configuration. Dans ce répertoire, nous aurons par défaut les fichiers de configuration suivants :
- enable_encryption.preset :cela activera le chiffrement des données au repos.
- mysql-clients.cnf :ici, il y a des configurations pour différents groupes comme [mysqladmin], [mysqlcheck], [mysqldump] et plus.
- rocksdb.cnf :dans ce fichier, nous ajouterons la configuration spécifique pour MyRocks, comme default-storage-engine ou rocksdb_block_size.
- server.cnf :Ici, nous avons une configuration liée au serveur de base de données comme bind-address et binlog_format.
Toutes les variables système MyRocks et les variables d'état sont précédées de "rocksdb". Jetons un coup d'œil à cela.
Variables système :
$ 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 |
…
+-------------------------------------------------+------------------------------------------+
Variables d'état :
$ 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 |
…
+----------------------------------------------------+-------+
Vous pouvez trouver plus d'informations sur l'état et les variables système sur le site Web de MariaDB.
Sauvegardes pour MariaDB à l'aide de MyRocks
Les sauvegardes sont indispensables dans tous les environnements de bases de données. Ils sont essentiels pour la récupération du système, les migrations, l'audit, les tests, etc.
Nous pouvons classer les sauvegardes en deux types différents, logique et physique. La sauvegarde logique est stockée dans un format lisible par l'homme comme SQL, et la sauvegarde physique contient les données binaires supplémentaires.
Pour les sauvegardes logiques sur MariaDB avec MyRocks comme moteur de base de données, l'outil de sauvegarde le plus courant est le classique mysqldump :
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
Et pour la sauvegarde physique, on peut utiliser Mariabackup qui est compatible avec MyRocks :
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Une autre option peut être myrocks_hotbackup, créé par Facebook. Il peut être utilisé pour prendre une copie physique d'une instance MyRocks en cours d'exécution vers un serveur local ou distant, sans arrêter l'instance source.
Limites de l'utilisation de MyRocks pour MariaDB
Regardons quelques-unes des limites de l'utilisation du moteur MyRocks...
- La réplication parallèle optimiste de MariaDB peut ne pas être prise en charge
- MyRocks n'est pas disponible pour les plates-formes 32 bits
- MariaDB Cluster (Galera Cluster) ne fonctionne pas avec MyRocks (uniquement les moteurs de stockage InnoDB ou XtraDB)
- La transaction doit tenir en mémoire
- Nécessite des paramètres spéciaux pour le chargement des données
- SERIALIZABLE n'est pas pris en charge
- Tablespace transportable, clé étrangère, index spatial et index de texte intégral ne sont pas pris en charge
Conclusion
MyRocks est disponible dans MariaDB à partir des versions supérieures à 10.2.5. Comme nous l'avons mentionné précédemment, ce moteur de stockage peut vous être utile lorsque vous avez des charges de travail qui nécessitent une compression élevée des données et des niveaux plus élevés d'efficacité des E/S. Pour en savoir plus sur MyRocks, vous pouvez consulter ceci.