MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Usando o mecanismo de armazenamento MyRocks com o servidor MariaDB


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.