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

Comparação de alta disponibilidade de banco de dados - Replicação MySQL / MariaDB vs Oracle Data Guard


No “State of the Open-Source DBMS Market, 2018”, o Gartner prevê que até 2022, 70% dos novos aplicativos internos serão desenvolvidos em um banco de dados de código aberto. E 50% dos bancos de dados comerciais existentes serão convertidos. Portanto, DBAs Oracle, preparem-se para começar a implantar e gerenciar novos bancos de dados de código aberto - junto com suas instâncias Oracle legadas. A menos que você já esteja fazendo isso.

Então, como a replicação do MySQL ou MariaDB se compara ao Oracle Data Guard? Neste blog, vamos comparar os dois do ponto de vista de uma solução de banco de dados de alta disponibilidade.

O que procurar


Uma arquitetura de replicação de dados moderna é baseada em designs flexíveis que permitem replicação de dados unidirecional e bidirecional, bem como failover rápido e automatizado para bancos de dados secundários em caso de interrupção de serviço não planejada. O failover também deve ser fácil de executar e confiável para que nenhuma transação confirmada seja perdida. Além disso, a alternância ou o failover devem, idealmente, ser transparentes para os aplicativos.

As soluções de replicação de dados devem ser capazes de copiar dados com latência muito baixa para evitar gargalos de processamento e garantir acesso em tempo real aos dados. As cópias em tempo real podem ser implantadas em um banco de dados diferente executado em hardware de baixo custo.

Quando usado para recuperação de desastres, o sistema deve ser validado para garantir o acesso do aplicativo ao sistema secundário com o mínimo de interrupção do serviço. A solução ideal deve permitir testes regulares do processo de recuperação de desastres.

Principais tópicos de comparação

  • Disponibilidade e consistência de dados
    • Gtid, scm
    • Mencione Replicação para vários modelos de espera, assíncrona + sincronização
    • Isolamento de espera de falhas de produção (por exemplo, replicação atrasada para mysql)
    • Evite a perda de dados (replicação de sincronização)
  • Utilização de sistemas em espera
    • Uso do modo de espera
  • Failover, Switchover e recuperação automática
    • Failover do banco de dados
    • Failover transparente do aplicativo (TAF vs ProxySQL, MaxScale)
  • Segurança
  • Facilidade de uso e gerenciamento (gerenciamento unificado de componentes pré-integrados)

Disponibilidade e consistência de dados

MySQL GTID


A replicação do MySQL 5.5 era baseada em eventos de log binários, onde tudo o que um escravo sabia era o evento preciso e a posição exata que acabava de ler do mestre. Qualquer transação única de um mestre pode ter terminado em vários logs binários de diferentes escravos, e a transação normalmente teria posições diferentes nesses logs. Era uma solução simples que vinha com limitações, as alterações de topologia podiam exigir que um administrador interrompesse a replicação nas instâncias envolvidas. Essas alterações podem causar alguns outros problemas, por exemplo, um escravo não pode ser movido para baixo na cadeia de replicação sem uma reconstrução demorada. A correção de um link de replicação quebrado exigiria determinar manualmente um novo arquivo de log binário e a posição da última transação executada no escravo e retomar a partir daí, ou uma reconstrução total. Todos nós tivemos que contornar essas limitações enquanto sonhávamos com um identificador de transação global.

O MySQL versão 5.6 (e MariaDB versão 10.0.2) introduziu um mecanismo para resolver este problema. GTID (Global Transaction Identifier) ​​fornece um melhor mapeamento de transações entre nós.

Com o GTID, os escravos podem ver uma única transação vinda de vários mestres e isso pode ser facilmente mapeado na lista de execução do escravo se precisar reiniciar ou retomar a replicação. Portanto, o conselho é sempre usar o GTID. Observe que MySQL e MariaDB têm implementações GTID diferentes.

Oracle SCN


Em 1992, com o release 7.3, a Oracle introduziu uma solução para manter uma cópia sincronizada de um banco de dados como standby, conhecido como Data Guard da versão 9i release 2. Uma configuração do Data Guard consiste em dois componentes principais, um único banco de dados primário e um banco de dados em standby. (até 30). As alterações no banco de dados primário são transmitidas pelo banco de dados em espera e essas alterações são aplicadas ao banco de dados em espera para mantê-lo sincronizado.

O Oracle Data Guard é criado inicialmente a partir de um backup do banco de dados primário. O Data Guard sincroniza automaticamente o banco de dados primário e todos os bancos de dados standby transmitindo redo do banco de dados primário - as informações usadas por cada banco de dados Oracle para proteger as transações - e aplicando-as ao banco de dados standby. A Oracle usa um mecanismo interno chamado SCN (System Change Number). O número de alteração do sistema (SCN) é o relógio do Oracle, toda vez que confirmamos, o relógio é incrementado. O SCN marca um ponto consistente no tempo no banco de dados que é um ponto de verificação que é o ato de gravar blocos sujos (blocos modificados do cache de buffer para o disco). Podemos compará-lo ao GTID no MySQL.

Os serviços de transporte do Data Guard lidam com todos os aspectos da transmissão de redo de um banco de dados primário para um banco de dados em espera. À medida que os usuários confirmam transações no primário, os registros de redo são gerados e gravados em um arquivo de log online local. Os serviços de transporte do Data Guard transmitem simultaneamente o mesmo redo diretamente do buffer de log do banco de dados primário (memória alocada na área global do sistema) para o(s) banco(s) de dados em espera onde ele é gravado em um arquivo de log de redo em espera.

Existem algumas diferenças principais entre a replicação do MySQL e o Data Guard. A transmissão direta do Data Guard da memória evita sobrecarga de E/S de disco no banco de dados primário. É diferente de como o MySQL funciona - ler dados da memória diminui a E/S em um banco de dados primário.

O Data Guard transmite apenas o redo do banco de dados. É um contraste gritante com o espelhamento remoto de armazenamento, que deve transmitir cada bloco alterado em cada arquivo para manter a sincronização em tempo real.

Modelos assíncronos + de sincronização


O Oracle Data Guard oferece três modelos diferentes para a aplicação de redo. Modelos adaptáveis ​​dependentes de hardware, processos e necessidades de negócios disponíveis.
  • Desempenho máximo - modo de operação padrão, permitindo que uma transação seja confirmada assim que os dados de redo necessários para recuperar essa transação forem gravados no log de redo local no mestre.
  • Proteção máxima - sem perda de dados e o nível máximo de proteção. Os dados de redo necessários para melhorar cada operação devem ser gravados no redo log local on-line no mestre e no redo log de espera em pelo menos um banco de dados de espera antes da confirmação da transação (a Oracle recomenda pelo menos duas esperas). O banco de dados primário será encerrado se uma falha o impedir de gravar seu fluxo de redo em pelo menos um banco de dados de espera sincronizado.
  • Disponibilidade máxima - semelhante à proteção máxima, mas o banco de dados primário não será encerrado se uma falha impedir que ele grave seu fluxo de redo.

Quando se trata de escolher sua configuração de replicação MySQL, você pode escolher entre replicação assíncrona ou replicação semi-síncrona.
  • A aplicação de log binário assíncrono é o método padrão para replicação do MySQL. O mestre grava eventos em seu log binário e os escravos os solicitam quando estão prontos. Não há garantia de que qualquer evento chegará a qualquer escravo.
  • A confirmação semi-síncrona no primário é atrasada até que o mestre receba uma confirmação do escravo semi-síncrono de que os dados foram recebidos e gravados pelo escravo. Observe que a replicação semi-síncrona requer a instalação de um plug-in adicional.

Utilização de sistemas em espera


O MySQL é bem conhecido por sua simplicidade e flexibilidade de replicação. Por padrão, você pode ler ou até mesmo gravar em seus servidores standby/slave. Felizmente, o MySQL 5.6 e 5.7 trouxe muitos aprimoramentos significativos para a Replicação, incluindo IDs de transação global, somas de verificação de eventos, escravos multi-thread e escravos/mestres à prova de falhas para torná-lo ainda melhor. DBAs acostumados a leituras e gravações de replicação do MySQL esperariam uma solução semelhante ou até mais simples de seu irmão maior, Oracle. Infelizmente não por padrão.

A implementação de espera física padrão para Oracle é fechada para qualquer operação de leitura/gravação. Na verdade, o Oracle oferece variação lógica, mas tem muitas limitações e não foi projetado para HA. A solução para esse problema é um recurso pago adicional chamado Active Data Guard, que você pode usar para ler dados do modo de espera enquanto aplica redo logs.

O Active Data Guard é uma solução complementar paga ao software gratuito de recuperação de desastres Data Guard da Oracle, disponível apenas para Oracle Database Enterprise Edition (licença de custo mais alto). Ele oferece acesso somente leitura, enquanto aplica continuamente as alterações enviadas do banco de dados primário. Como um banco de dados de espera ativa, ele ajuda a descarregar consultas de leitura, relatórios e backups incrementais do banco de dados primário. A arquitetura do produto foi projetada para permitir que os bancos de dados standby sejam isolados de falhas que possam ocorrer no banco de dados primário.

Um recurso interessante do banco de dados Oracle 12c e algo que o Oracle DBA perderia é a validação de corrupção de dados. As verificações de corrupção do Oracle Data Guard são executadas para garantir que os dados estejam em alinhamento exato antes que os dados sejam copiados para um banco de dados em espera. Esse mecanismo também pode ser usado para restaurar blocos de dados no primário diretamente do banco de dados standby.

Failover, alternância e recuperação automática


Para manter sua configuração de replicação estável e em execução, é crucial que o sistema seja resiliente a falhas. As falhas são causadas por bugs de software, problemas de configuração ou problemas de hardware e podem acontecer a qualquer momento. Caso um servidor fique inativo, você precisa de uma notificação de alarme sobre a configuração degradada. Failover (promoção de slave a master) pode ser realizado pelo admin, que precisa decidir qual slave promover.

O administrador precisa de informações sobre a falha, o status da sincronização caso algum dado seja perdido e, finalmente, as etapas para executar a ação. Idealmente, todos devem ser automatizados e visíveis a partir de um único console.

Existem duas abordagens principais para o failover do MySQL, automática e manual. Ambas as opções têm seus fãs, descrevemos os conceitos em outro artigo.

Com o GTID, o failover manual fica muito mais fácil. Consiste em etapas como:
  • Parar o módulo receptor (STOP SLAVE IO_THREAD)
  • Mudar mestre (MUDAR MESTRE PARA )
  • Inicie o módulo receptor (START SLAVE IO_THREAD)

O Oracle Data Guard vem com uma solução dedicada de failover/switchover - Data Guard Broker. O broker é uma estrutura de gerenciamento distribuído que automatiza e centraliza a criação, manutenção e monitoramento das configurações do Oracle Data Guard. Com o acesso à ferramenta DG Broker, você pode realizar alterações de configuração, alternâncias, failovers e até testes secos de sua configuração de alta disponibilidade. As duas principais ações são:
  • O comando SWITCHOVER TO é usado para realizar a operação de alternância. Após a operação de alternância bem-sucedida, as instâncias de banco de dados trocam de lugar e a replicação continua. Não é possível alternar quando o modo de espera não está respondendo ou está inativo.
  • O comum FAILOVER TO é usado para executar o failover. Após a operação de failover, o servidor primário anterior requer recriação, mas o novo primário pode assumir a carga de trabalho do banco de dados.

Falando sobre failover, precisamos considerar como o failover de seu aplicativo pode ser perfeito. No caso de uma interrupção planejada/não planejada, com que eficiência as sessões do usuário podem ser direcionadas para um site secundário, com o mínimo de interrupção dos negócios.

A abordagem padrão para o MySQL seria usar um dos Load Balancers disponíveis. A partir do HAProxy, que é amplamente usado para failover HTTP ou TCP/IP, para Maxscale ou ProxySQL com reconhecimento de banco de dados.

No Oracle, esse problema é resolvido pelo TAF (Transparent Application Failover). Após a alternância ou failover, o aplicativo é direcionado automaticamente para o novo primário. O TAF permite que o aplicativo se reconecte de forma automática e transparente a um novo banco de dados, se a instância do banco de dados à qual a conexão é feita falhar.

Segurança


A segurança dos dados é um assunto importante para muitas organizações nos dias de hoje. Para aqueles que precisam implementar padrões como PCI DSS ou HIPAA, a segurança do banco de dados é essencial. Os ambientes de WAN cruzados podem levar a preocupações sobre privacidade e segurança de dados, especialmente porque mais empresas estão tendo que cumprir as regulamentações nacionais e internacionais. Os logs binários do MySQL usados ​​para replicação podem conter dados confidenciais fáceis de ler. Com a configuração padrão, roubar dados é um processo muito fácil. MySQL suporta SSL como um mecanismo para criptografar o tráfego entre servidores MySQL (replicação) e entre servidores MySQL e clientes. Uma maneira típica de implementar a criptografia SSL é usar certificados autoassinados. Na maioria das vezes, não é necessário obter um certificado SSL emitido pela Autoridade de Certificação. Você pode usar openssl para criar certificados, exemplo abaixo:
$ openssl genrsa 2048 > ca-key.pem
$ openssl req -new -x509 -nodes -days 3600 -key ca-key.pem > ca-cert.pem
$ openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem > client-req.pem
$ openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
$ openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem > client-req.pem
$ openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
$ openssl rsa -in client-key.pem -out client-key.pem
$ openssl rsa -in server-key.pem -out server-key.pem

Em seguida, modifique a replicação com parâmetros para SSL.
….MASTER_SSL=1, MASTER_SSL_CA = '/etc/security/ca.pem', MASTER_SSL_CERT = '/etc/security/client-cert.pem', MASTER_SSL_KEY = '/etc/security/client-key.pem';

Para uma opção mais automatizada, você pode usar o ClusterControl para habilitar a criptografia e gerenciar as chaves SSL.

No Oracle 12c, o transporte de redo do Data Guard pode ser integrado a um conjunto de recursos de segurança dedicados chamados Oracle Advanced Security (OAS). A Segurança Avançada pode ser usada para habilitar serviços de criptografia e autenticação entre os sistemas primário e de espera. Por exemplo, habilitar o algoritmo de criptografia Advanced Encryption Standard (AES) requer apenas algumas alterações de parâmetro no arquivo sqlnet.ora para tornar o redo (semelhante ao log binário do MySQL) criptografado. Nenhuma configuração de certificado externo é necessária e requer apenas uma reinicialização do banco de dados em espera. A modificação em sqlnet.ora e wallet são simples como:

Crie um diretório de carteira
mkdir /u01/app/wallet

Editar sqlnet.ora
ENCRYPTION_WALLET_LOCATION=
 (SOURCE=
  (METHOD=file)
   (METHOD_DATA=
    (DIRECTORY=/u01/app/wallet)))

Criar um armazenamento de chaves
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/wallet' identified by root ;

Abrir loja
ADMINISTER KEY MANAGEMENT set KEYSTORE open identified by root ;

Criar uma chave mestra
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY root WITH BACKUP;

Em espera

copie os arquivos p12 e .sso no diretório wallet e atualize o arquivo sqlnet.ora semelhante ao nó primário.

Para obter mais informações, siga o white paper TDE da Oracle, você pode aprender com o whitepaper como criptografar o arquivo de dados e tornar a carteira sempre aberta.

Facilidade de uso e gerenciamento


Ao gerenciar ou implantar a configuração do Oracle Data Guard, você pode descobrir que há muitas etapas e parâmetros a serem procurados. Para responder a isso, a Oracle criou o DG Broker.

Você certamente pode criar uma configuração do Data Guard sem implementar o DG Broker, mas isso pode tornar sua vida muito mais confortável. Quando implementado, o utilitário de linha de comando do Broker - DGMGRL é provavelmente a principal escolha para o DBA. Para aqueles que preferem GUI, o Cloud Control 13c tem a opção de acessar o DG Broker através da interface web.

As tarefas que o Broker pode ajudar são um início automático da recuperação gerenciada, um comando para failover/switchover, monitoramento de replicação de DG, verificação de configuração e muitas outras.
DGMGRL> show configuration 
Configuration - orcl_s9s_config 

Protection Mode: MaxPerformance
  Members:

s9sp  - Primary database
    s9ss - Physical standby database 

Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS   (status updated 12 seconds ago

O MySQL não oferece uma solução semelhante ao Oracle DG Broker. No entanto, você pode estender sua funcionalidade usando ferramentas como Orchestrator, MHA e balanceadores de carga (ProxySQL, HAProxy ou Maxscale). A solução para gerenciar bancos de dados e balanceadores de carga é o ClusterControl. O ClusterControl Enterprise Edition oferece um conjunto completo de recursos de gerenciamento e dimensionamento, além das funções de implantação e monitoramento oferecidas como parte do Community Edition gratuito.