O MariaDB Server é um dos servidores de banco de dados de código aberto mais populares. Ele foi criado pelos desenvolvedores originais do MySQL e se tornou popular por ser rápido, escalável e robusto. O MariaDB possui um rico ecossistema de mecanismos de armazenamento, plugins e outras ferramentas que o tornam muito versátil para uma ampla variedade de casos de uso.
Os requisitos de espaço em disco e eficiência de E/S de nossos bancos de dados continuam crescendo. Isso é para que possamos gerenciar nosso crescimento de informações de maneira correta.
Quanto ao mecanismo de armazenamento MariaDB, temos diferentes tipos para escolher, como XtraDB, InnoDB, Aria ou MyISAM. Desde a versão 10.2.5 do MariaDB, o MyRocks também está disponível. MyRocks é o tipo de mecanismo de armazenamento que realmente pode nos ajudar a atender aos requisitos mencionados anteriormente.
Neste blog, aprenderemos mais informações sobre o novo mecanismo MyRocks e como podemos usá-lo em um servidor MariaDB.
O que é MyRocks?
MyRocks é um mecanismo de armazenamento de código aberto baseado em RocksDB que foi originalmente desenvolvido pelo Facebook.
O MyRocks pode ser uma boa solução de armazenamento quando você tem cargas de trabalho que exigem maior compactação e eficiência de E/S. Ele usa uma arquitetura Log Structured Merge (LSM) que tem melhor compactação do que os algoritmos de árvore B usados pelo mecanismo InnoDB (compressão 2x melhor em comparação com dados compactados pelo InnoDB). Também é um mecanismo de armazenamento otimizado para gravação (10x menos amplificação de gravação quando comparado ao InnoDB) e possui carregamento e replicação de dados mais rápidos. O MyRocks grava dados diretamente no nível mais baixo, o que evita todas as sobrecargas de compactação quando você habilita o carregamento de dados mais rápido para uma sessão.
Um LSM funciona armazenando operações de modificação em um buffer (memtable) e ordenando e armazenando os dados quando este buffer estiver cheio.
Por padrão, tabelas e bancos de dados são armazenados em um diretório #rocksdb dentro do diretório de dados do MySQL. Essas informações são armazenadas em arquivos .sst sem separação por tabela.
MyRocks suporta níveis isolados READ COMMITTED e REPEATABLE READ e não suporta SERIALIZABLE.
Como implementar MyRocks em um servidor MariaDB
Instalação
Primeiro, precisamos instalar o servidor MariaDB. Neste exemplo, usaremos o CentOS Linux versão 7.6 como sistema operacional.
Por padrão, esta versão do SO tentará instalar o MariaDB 5.5, então adicionaremos o repositório MariaDB para instalar o MariaDB versão 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 então, vamos instalar o pacote MariaDB Server:
$ yum install MariaDB-server
Este comando instalará diferentes dependências de pacotes, não apenas o 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)
Por padrão, o MariaDB Server é instalado com o mecanismo de armazenamento InnoDB, portanto, devemos instalar o mecanismo RocksDB para poder usá-lo.
$ 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á algumas dependências necessárias e habilitará o plugin no MariaDB Server. Ele também criará um arquivo de configuração em /etc/my.cnf.d/rocksdb.cnf:
[mariadb]
plugin-load-add=ha_rocksdb.so
Podemos verificar esta instalação executando o comando SHOW PLUGINS no 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 |
+-------------------------------+----------+--------------------+---------------+---------+
Se por algum motivo não tivermos o plugin habilitado, podemos instalá-lo dinamicamente executando o comando INSTALL SONAME ou INSTALL PLUGIN:
$ MariaDB> INSTALL SONAME 'ha_rocksdb';
Outra opção pode ser reiniciar os serviços de banco de dados. Esta ação deve ler o arquivo /etc/my.cnf.d/rocksdb.cnf e habilitar o plugin.
$ service mariadb restart
Podemos encontrar informações detalhadas sobre nosso mecanismo RocksDB usando o seguinte comando:
$ SHOW ENGINE ROCKSDB STATUS
Configuração
Sobre os arquivos de configuração, o principal é o /etc/my.cnf, que inclui o diretório /etc/my.cnf.d onde podemos encontrar o restante dos arquivos de configuração. Neste diretório, teremos os seguintes arquivos de configuração por padrão:
- enable_encryption.preset:habilita a criptografia de dados em repouso.
- mysql-clients.cnf:Aqui há configurações para diferentes grupos como [mysqladmin], [mysqlcheck], [mysqldump] e mais.
- rocksdb.cnf:neste arquivo, adicionaremos a configuração específica para MyRocks, como default-storage-engine ou rocksdb_block_size.
- server.cnf:aqui temos a configuração relacionada ao servidor de banco de dados, como bind-address e binlog_format.
Todas as variáveis de sistema e variáveis de status do MyRocks são precedidas por "rocksdb". Vamos dar uma olhada nisso.
Variáveis do 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 |
…
+-------------------------------------------------+------------------------------------------+
Variáveis de status:
$ 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 |
…
+----------------------------------------------------+-------+
Você pode encontrar mais informações sobre o status e as variáveis do sistema no site do MariaDB.
Backups para MariaDB usando MyRocks
Os backups são obrigatórios em todos os ambientes de banco de dados. Eles são essenciais para recuperação de sistemas, migrações, auditorias, testes e muito mais.
Podemos categorizar os backups em dois tipos diferentes, lógicos e físicos. O backup lógico é armazenado em um formato legível como SQL, e o backup físico contém os dados binários adicionais.
Para backups lógicos no MariaDB com MyRocks como mecanismo de banco de dados, a ferramenta de backup mais comum é o mysqldump clássico:
$ mysqldump -hHOST -uUSER -p DATABASE > FILE.SQL
E para backup físico, podemos usar o Mariabackup que é compatível com MyRocks:
$ mariabackup --backup --target-dir=/backup/ --user=USER --password=PASSWORD --host=HOST
Outra opção pode ser myrocks_hotbackup, criado pelo Facebook. Ele pode ser usado para fazer uma cópia física de uma instância MyRocks em execução para um servidor local ou remoto, sem interromper a instância de origem.
Limitações do uso do MyRocks para MariaDB
Vejamos algumas das limitações do uso do mecanismo MyRocks...
- A replicação paralela otimista do MariaDB pode não ser suportada
- MyRocks não está disponível para plataformas de 32 bits
- MariaDB Cluster (Galera Cluster) não funciona com MyRocks (somente mecanismos de armazenamento InnoDB ou XtraDB)
- A transação deve caber na memória
- Requer configurações especiais para carregar dados
- SERIALIZABLE não é compatível
- Tablespace transportável, chave estrangeira, índice espacial e índice de texto completo não são suportados
Conclusão
MyRocks está disponível no MariaDB a partir de versões superiores a 10.2.5. Como mencionamos anteriormente, esse mecanismo de armazenamento pode ser útil quando você tem cargas de trabalho que exigem alta compactação de dados e níveis maiores de eficiência de E/S. Para saber mais sobre MyRocks você pode conferir isso.