MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Utilisation du moteur de stockage MyRocks avec MariaDB Server

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.