Cluster de banco de dados e balanceamento de carga

149

O que é clustering de banco de dados? Se você permitir que o mesmo banco de dados esteja em 2 servidores diferentes, como eles mantêm os dados entre sincronizados. E como isso difere do balanceamento de carga da perspectiva do servidor de banco de dados?

Malik Daud Ahmad Khokhar
fonte

Respostas:

132

Cluster de banco de dados é um termo um tanto ambíguo, alguns fornecedores consideram que um cluster com dois ou mais servidores compartilha o mesmo armazenamento, outros chamam um cluster de um conjunto de servidores replicados.

A replicação define o método pelo qual um conjunto de servidores permanece sincronizado sem ter que compartilhar o armazenamento para poder ser disperso geograficamente; existem duas maneiras principais de fazer isso:

  • replicação master-master (ou multi-master): qualquer servidor pode atualizar o banco de dados. Geralmente, isso é resolvido por um módulo diferente no banco de dados (ou por um software totalmente diferente sendo executado em cima deles em alguns casos).

    A desvantagem é que é muito difícil fazer o bem e alguns sistemas perdem as propriedades ACID quando estão nesse modo de replicação.

    A vantagem é que ele é flexível e você pode suportar a falha de qualquer servidor enquanto ainda mantém o banco de dados atualizado.

  • replicação mestre-escravo: existe apenas uma cópia de dados autoritativos, que é enviada por push aos servidores escravos.

    A desvantagem é que é menos tolerante a falhas, se o mestre morre, não há mais mudanças nos escravos.

    O lado positivo é que é mais fácil fazer do que o multi-mestre e geralmente preserva as propriedades ACID.

O balanceamento de carga é um conceito diferente, consiste em distribuir as consultas enviadas a esses servidores para que a carga seja distribuída da maneira mais uniforme possível. Geralmente isso é feito na camada de aplicativo (ou com um pool de conexão). A única relação direta entre replicação e balanceamento de carga é que você precisa de alguma replicação para poder carregar o equilíbrio, caso contrário, você teria um único servidor.

Vinko Vrsalovic
fonte
1
Ah, esqueci a replicação :) Sim, você pode obter o balanceamento de carga dessa maneira em combinação com lógica no nível do aplicativo :). 1
Jimmy Chandra
1
Os documentos do Postgresql referem-se a "cluster de banco de dados" de maneira diferente: "Antes que você possa fazer qualquer coisa, você deve inicializar uma área de armazenamento de banco de dados em disco. Chamamos isso de cluster de banco de dados. (SQL usa o termo cluster de catálogo.) Um cluster de banco de dados é uma coleção de bancos de dados que são gerenciados por uma única instância de um servidor de banco de dados em execução. " postgresql.org/docs/8.3/static/creating-cluster.html
Donato
1
O que significa as propriedades ACID, ou melhor, o que é exatamente o que você perde se não as preservar?
TheStoryCoder
@TheStoryCoder Na ciência da computação, ACID (Atomicidade, Consistência, Isolamento, Durabilidade) é um conjunto de propriedades de transações do banco de dados destinadas a garantir a validade, mesmo em caso de erros, falhas de energia, etc. No contexto dos bancos de dados, uma sequência de bancos de dados As operações que satisfazem as propriedades ACID (e podem ser percebidas como uma única operação lógica nos dados) são chamadas de transação. Por exemplo, uma transferência de fundos de uma conta bancária para outra, mesmo envolvendo várias alterações, como debitar uma conta e creditar outra, é uma transação única.
Fizampou 3/11
17

Do ponto de vista do SQL Server:

O armazenamento em cluster fornecerá uma configuração ativa - passiva. Ou seja, em um cluster de 2 nós, um deles será o ativo (veiculado) e o outro será passivo (aguardando para assumir o controle quando o nó ativo falhar). É uma alta disponibilidade do ponto de vista do hardware.

Você pode ter um cluster ativo-ativo, mas exigirá várias instâncias do SQL Server em execução em cada nó. (ou seja, a instância 1 no nó A está fazendo failover para a instância 2 no nó B e a instância 1 no nó B está fazendo failover para a instância 2 no nó A).

O balanceamento de carga (pelo menos do ponto de vista do SQL Server) não existe (pelo menos no mesmo sentido do balanceamento de carga do servidor web). Você não pode equilibrar a carga dessa maneira. No entanto, você pode dividir seu aplicativo para executar em algum banco de dados no servidor 1 e também em algum banco de dados no servidor 2, etc. Esse é o principal meio de "balanceamento de carga" no mundo SQL.

Jimmy Chandra
fonte
9

O cluster usa algum tipo de armazenamento compartilhado (um compartimento de unidade ou uma SAN, por exemplo) e coloca dois front-ends do banco de dados. Os servidores front-end compartilham um endereço IP e um nome de rede de cluster que os clientes usam para se conectar e decidem entre si quem está atualmente encarregado de atender às solicitações do cliente.

Se você estiver perguntando sobre um servidor de banco de dados específico, adicione-o à sua pergunta e podemos adicionar detalhes sobre a implementação deles, mas, no essencial, é isso que é o clustering.

SqlRyan
fonte
6

O Cluster de banco de dados é, na verdade, um modo de replicação síncrona entre dois ou possivelmente mais nós, com uma funcionalidade adicional de tolerância a falhas adicionada ao sistema e também em uma arquitetura de nada compartilhada. Por nada compartilhado, significa que os nós individuais, na verdade, não compartilham recursos físicos, como disco ou memória.

No que diz respeito a manter os dados sincronizados, existe um servidor de gerenciamento ao qual todos os nós de dados estão conectados junto com o nó SQL para conseguir isso (falando especificamente sobre o MySQL).

Agora, sobre as diferenças: o balanceamento de carga é apenas um resultado que pode ser alcançado através do clustering; os outros incluem alta disponibilidade, escalabilidade e tolerância a falhas.

Puneet Misra
fonte