Em um de nossos blogs anteriores, explicamos como o Clone Plugin, um dos novos recursos mostrados no MySQL 8.0.17, pode ser usado para reconstruir um escravo de replicação. Atualmente, a ferramenta para isso, assim como para backups, é o Xtrabackup. Achamos interessante comparar como essas ferramentas funcionam e se comportam.
Comparando o desempenho
A primeira coisa que decidimos testar é o desempenho de ambos quando se trata de armazenar a cópia dos dados localmente. Usamos a instância AWS e m5d.metal com dois SSDs NVMe e executamos o clone para cópia local:
mysql> CLONE LOCAL DATA DIRECTORY='/mnt/clone/';
Query OK, 0 rows affected (2 min 39.77 sec)
Depois testamos o Xtrabackup e fizemos a cópia local:
rm -rf /mnt/backup/ ; time xtrabackup --backup --target-dir=/mnt/backup/ --innodb-file-io-threads=8 --innodb-read-io-threads=8 --innodb-write-io-threads=8 --innodb-io-capacity=20000 --parallel=16
200120 13:12:28 completed OK!
real 2m38.407s
user 0m45.181s
sys 4m18.642s
Como você pode ver, o tempo necessário para copiar os dados era basicamente o mesmo. Em ambos os casos, a limitação era o hardware, não o software.
Transferir dados para outro servidor será o caso de uso mais comum para ambas as ferramentas. Pode ser um escravo que você deseja provisionar ou reconstruir. No futuro pode ser um backup, o Clone Plugin não tem essa funcionalidade no momento, mas temos certeza que no futuro alguém tornará possível usá-lo como ferramenta de backup. Dado que o hardware é a limitação para backup local em ambos os casos, o hardware também será uma limitação para a transferência de dados pela rede. Dependendo de sua configuração, pode ser a rede, E/S de disco ou CPU.
Em operações com uso intenso de E/S, a CPU é o gargalo menos comum. Isso torna bastante comum trocar alguma utilização da CPU pela redução no tamanho do conjunto de dados. Você pode fazer isso através da compressão. Se for feito em tempo real, você ainda terá que ler a mesma quantidade de dados, mas enviará menos (já que está compactado) pela rede. Então, você terá que descompactá-lo e anotá-lo. Também é possível que os próprios arquivos sejam compactados. Nesse caso, você reduz a quantidade de dados lidos, transferidos e gravados no disco.
Tanto o Clone Plugin quanto o Xtrabackup vêm com uma compactação em tempo real (gostaríamos de agradecer a Kenny Gryp, que nos corrigiu neste bit). No Clone Plugin você pode habilitá-lo através do clone_enable_compression, que está desabilitado por padrão. O Xtrabackup também pode utilizar ferramentas externas para compactar os dados. No caso de tabelas InnoDB compactadas, a compactação externa não fará muita diferença, portanto, ambas as ferramentas devem funcionar de maneira semelhante, caso a largura de banda da rede seja o fator limitante.
Comparando a usabilidade
O desempenho é apenas uma coisa para comparar, existem muitas outras, como a facilidade de uso das ferramentas. Em ambos os casos, há várias etapas que você deve executar. Para Clone Plugin é:
- Instale o plug-in em todos os nós
- Criar usuários nos nós doadores e receptores
- Configure a lista de doadores no receptor
Essas três etapas devem ser executadas uma vez. Quando eles são definidos, você pode usar o Clone Plugin para copiar os dados. Com base no sistema init, pode ser necessário iniciar o nó MySQL após a conclusão do processo de clonagem. Isso não é necessário se, como no caso do systemd, o MySQL for reiniciado automaticamente.
O Xtrabackup requer mais algumas etapas para fazer as coisas.
- Instale o software em todos os nós
- Criar usuário no doador
Essas duas etapas devem ser executadas uma vez. Para cada backup, você deve executar as seguintes etapas:
- Configure o streaming de rede. Uma maneira simples e segura seria usar SSH, algo como:
xtrabackup --backup --innodb-file-io-threads=8 --innodb-read-io-threads=8 --innodb-write-io-threads=8 --innodb-io-capacity=20000 --parallel=8 --stream=xbstream --target-dir=/mnt/backup/ | ssh [email protected] "xbstream -x -C /mnt/backup/"
No entanto, descobrimos que, para discos rígidos mais rápidos, com SSH de thread único, a CPU se torna um gargalo. A configuração do netcat requer uma etapa adicional no receptor para garantir que o netcat esteja ativo, ouvindo e redirecionando o tráfego para o software adequado (xbstream).
-
Parar o MySQL no nó receptor
-
Execute o Xtrabackup
-
Aplicar logs do InnoDB
-
Copie de volta os dados
-
Iniciar o MySQL no nó receptor
Como você pode ver, o Xtrabackup requer que mais etapas sejam executadas.
Considerações de segurança
Clone Plugin pode ser configurado para usar SSL para transferência de dados, embora por padrão use texto simples. A clonagem dos tablespaces criptografados é possível, mas não há opção para criptografar, por exemplo, o clone local. O usuário teria que fazer isso separadamente, após a conclusão do processo de clonagem.
O próprio Xtrabackup não oferece nenhuma segurança. A segurança é determinada pela forma como você transmite os dados. Se você usar SSH para streaming, os dados em trânsito serão criptografados. Se você decidir usar o netcat, ele será enviado como texto simples. Obviamente, se os dados estiverem criptografados em tablespaces, eles já estarão protegidos, assim como no caso do Clone Plugin. O Xtrabackup também pode ser usado junto com a criptografia em tempo real para garantir que seus dados sejam criptografados também em repouso.
Recursos de plug-in
Clone Plugin é um produto novo, ainda em fase infantil. Sua principal tarefa é fornecer maneiras de provisionar nós no InnoDB Cluster e faz isso muito bem. Para outras tarefas, como backups ou provisionamento de escravos de replicação, ele pode ser usado até certo ponto, mas sofre de várias limitações. Cobrimos alguns deles em nosso blog anterior, então não vamos repetir aqui, mas o mais sério, quando falamos de provisionamento e backups, é que apenas as tabelas InnoDB são clonadas. Se acontecer de você usar qualquer outro mecanismo de armazenamento, você não pode realmente usar o Clone Plugin. Por outro lado, o Xtrabackup felizmente fará backup e transferirá os mecanismos de armazenamento mais usados:InnoDB, MyISAM (infelizmente, ainda é usado em muitos lugares) e CSV. O Xtrabackup também vem com um conjunto de ferramentas destinadas a ajudar a transmitir os dados de nó para nó ou até mesmo fazer backup de fluxo para buckets do S3.
Para resumir, quando se trata de fazer backup de dados e provisionar escravos de replicação, o xtrabackup é e provavelmente ainda será a escolha mais popular. Por outro lado, o Clone Plugin, muito provavelmente, irá melhorar e evoluir. Veremos o que o futuro reserva e como serão as coisas daqui a um ano.
Deixe-nos saber se você tem alguma opinião sobre o Clone Plugin, estamos muito interessados em ver qual é a sua opinião sobre esta nova ferramenta.