sql >> Base de Datos >  >> RDS >> MariaDB

Uso del motor de almacenamiento MyRocks con el servidor MariaDB

MariaDB Server es uno de los servidores de bases de datos de código abierto más populares. Fue creado por los desarrolladores originales de MySQL y se hizo popular por ser rápido, escalable y robusto. MariaDB tiene un rico ecosistema de motores de almacenamiento, complementos y otras herramientas que lo hacen muy versátil para una amplia variedad de casos de uso.

Los requisitos de espacio en disco y eficiencia de E/S de nuestras bases de datos continúan creciendo. Esto es para que podamos administrar el crecimiento de nuestra información de manera correcta.

En cuanto al motor de almacenamiento MariaDB, tenemos diferentes tipos a elegir como XtraDB, InnoDB, Aria o MyISAM. Desde la versión 10.2.5 de MariaDB, MyRocks también está disponible. MyRocks es el tipo de motor de almacenamiento que realmente podría ayudarnos a cumplir con los requisitos que mencionamos anteriormente.

En este blog, aprenderemos más información sobre el nuevo motor MyRocks y cómo podemos usarlo en un servidor MariaDB.

¿Qué es MyRocks?

MyRocks es un motor de almacenamiento de código abierto basado en RocksDB que fue desarrollado originalmente por Facebook.

MyRocks puede ser una buena solución de almacenamiento cuando tiene cargas de trabajo que requieren mayor compresión y eficiencia de E/S. Utiliza una arquitectura Log Structured Merge (LSM) que tiene una mejor compresión que los algoritmos de árbol B utilizados por el motor InnoDB (2 veces mejor compresión en comparación con los datos comprimidos por InnoDB). También es un motor de almacenamiento optimizado para escritura (10 veces menos amplificación de escritura en comparación con InnoDB) y tiene una carga y replicación de datos más rápidas. MyRocks escribe datos directamente en el nivel más bajo, lo que evita todos los gastos generales de compactación cuando habilita una carga de datos más rápida para una sesión.

Un LSM funciona almacenando operaciones de modificación en un búfer (memtable) y ordenando y almacenando los datos cuando este búfer está lleno.

De forma predeterminada, las tablas y las bases de datos se almacenan en un directorio #rocksdb dentro del directorio de datos de MySQL. Esta información se almacena en archivos .sst sin separación por tabla.

MyRocks admite niveles aislados de LECTURA COMPROMETIDA y LECTURA REPETIBLE y no admite SERIALIZABLE.

Cómo implementar MyRocks en un servidor MariaDB

Instalación

Primero, necesitamos instalar el servidor MariaDB. En este ejemplo, usaremos CentOS Linux versión 7.6 como sistema operativo.

De forma predeterminada, esta versión del sistema operativo intentará instalar MariaDB 5.5, por lo que agregaremos el repositorio de MariaDB para instalar la versión 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

Y luego, instalaremos el paquete del servidor MariaDB:

$ yum install MariaDB-server

Este comando instalará diferentes dependencias de paquetes, no solo el servidor MariaDB.

==========================================================================================================================================================================================================
 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)

Por defecto, el servidor MariaDB viene instalado con el motor de almacenamiento InnoDB, por lo que debemos instalar el motor RocksDB para poder hacer uso de él.

$ 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)

Este comando instalará algunas dependencias requeridas y habilitará el complemento en el servidor MariaDB. También creará un archivo de configuración en /etc/my.cnf.d/rocksdb.cnf:

[mariadb]
plugin-load-add=ha_rocksdb.so

Podemos verificar esta instalación ejecutando el comando SHOW PLUGINS en el servidor 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 por alguna razón no tenemos habilitado el complemento, podemos instalarlo dinámicamente ejecutando el comando INSTALL SONAME o INSTALL PLUGIN:

$ MariaDB> INSTALL SONAME 'ha_rocksdb';

Otra opción podría ser reiniciar los servicios de la base de datos. Esta acción debería leer el archivo /etc/my.cnf.d/rocksdb.cnf y habilitar el complemento.

$ service mariadb restart

Podemos encontrar información detallada sobre nuestro motor RocksDB usando el siguiente comando:

$ SHOW ENGINE ROCKSDB STATUS

Configuración

Sobre los archivos de configuración, el principal es /etc/my.cnf, que incluye el directorio /etc/my.cnf.d donde podemos encontrar el resto de archivos de configuración. En este directorio, tendremos los siguientes archivos de configuración por defecto:

  • enable_encryption.preset:habilitará el cifrado de datos en reposo.
  • mysql-clients.cnf:aquí hay configuraciones para diferentes grupos como [mysqladmin], [mysqlcheck], [mysqldump] y más.
  • rocksdb.cnf:en este archivo, agregaremos la configuración específica para MyRocks, como default-storage-engine o rocksdb_block_size.
  • server.cnf:Aquí tenemos la configuración relacionada con el servidor de la base de datos como bind-address y binlog_format.

Todas las variables del sistema y las variables de estado de MyRocks están precedidas por "rocksdb". Echemos un vistazo a esto.

Variables del 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                                     |
…
+-------------------------------------------------+------------------------------------------+

Variables de estado:

$ 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     |
…
+----------------------------------------------------+-------+

Puede encontrar más información sobre el estado y las variables del sistema en el sitio web de MariaDB.

Copias de seguridad para MariaDB usando MyRocks

Las copias de seguridad son imprescindibles en todos los entornos de bases de datos. Son esenciales para la recuperación del sistema, migraciones, auditorías, pruebas y más.

Podemos categorizar las copias de seguridad en dos tipos diferentes, lógicas y físicas. La copia de seguridad lógica se almacena en un formato legible por humanos, como SQL, y la copia de seguridad física contiene los datos binarios adicionales.

Para copias de seguridad lógicas en MariaDB con MyRocks como motor de base de datos, la herramienta de copia de seguridad más común es el clásico mysqldump:

$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL

Y para la copia de seguridad física, podemos usar Mariabackup que es compatible con MyRocks:

$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST

Otra opción puede ser myrocks_hotbackup, creada por Facebook. Se puede usar para tomar una copia física de una instancia de MyRocks en ejecución a un servidor local o remoto, sin detener la instancia de origen.

Limitaciones del uso de MyRocks para MariaDB

Veamos algunas de las limitaciones del uso del motor MyRocks...

  • Es posible que no se admita la replicación paralela optimista de MariaDB
  • MyRocks no está disponible para plataformas de 32 bits
  • MariaDB Cluster (Galera Cluster) no funciona con MyRocks (solo motores de almacenamiento InnoDB o XtraDB)
  • La transacción debe caber en la memoria
  • Requiere una configuración especial para cargar datos
  • SERIALIZABLE no es compatible
  • No se admiten el espacio de tabla transportable, la clave externa, el índice espacial y el índice de texto completo

Conclusión

MyRocks está disponible en MariaDB a partir de versiones superiores a la 10.2.5. Como mencionamos anteriormente, este motor de almacenamiento puede resultarle útil cuando tiene cargas de trabajo que requieren una alta compresión de datos y mayores niveles de eficiencia de E/S. Para obtener más información sobre MyRocks, puede consultar esto.