Cluster cerebral dividido
Isso ocorre quando um ou mais nós de um cluster se desconectam dos outros nós, resultando na formação de subgrupos ou de um cluster cerebral dividido.
Em essência, Split-Brain é uma terminologia baseada em uma analogia com a síndrome médica do Split-Brain. Esta condição retrata a inconsistência nos dados ou sua disponibilidade que pode se originar da manutenção de dois conjuntos de dados separados com sobreposição de escopo. Isso pode ser devido aos servidores em um projeto de rede ou a uma condição de falha que pode ser causada por falta de comunicação e dessincronização de dados entre os servidores correspondentes na rede. Isso também é comumente denominado como uma partição de rede.
Como NCache também é um cache distribuído que pode compreender vários nós e clusters, a ocorrência de um cluster Split-Brain também é uma possibilidade com NCache.
Quando ocorre um Split-Brain, existe a possibilidade de formação de subclusters. Portanto, um dos subclusters deve ser removido para garantir que todos os clientes sejam redirecionados para um cluster íntegro. Como a remoção do subcluster significa que os dados serão perdidos, o subcluster a ser removido é selecionado com base nos seguintes critérios:
- Caso os subclusters sejam de tamanhos variados, o subcluster com menor número de nós será removido. Isso garante perda mínima de dados, pois o cluster menor conterá menos dados.
- Se o tamanho dos clusters for igual, o subcluster cujo nó coordenador possui o endereço IP maior será removido. Por exemplo, os IPs dos nós coordenadores do subcluster A e B são 20.200.20.38 e 20.200.20.40 respectivamente. Neste caso, o subcluster com nó coordenador IP 20.200.20.40 será removido.
Um Split-Brain pode representar inconsistência de dados ou problemas de disponibilidade decorrentes da manutenção de dois conjuntos de dados separados com uma sobreposição de escopo. Além disso, isso pode levar a problemas significativos e representar uma situação terrível para o administrador. Por este motivo, é muito importante garantir que não haja risco de Split-Brain e corrupção de dados.
Existem algumas abordagens comuns para lidar com o problema de partição de rede após a ocorrência de um Split-Brain.
- Abordagem Otimista
- Abordagem Pessimista
Na abordagem otimista, o canal de comunicação entre os nós é simplesmente restaurado, permitindo que os nós particionados funcionem normalmente temporariamente. Isso é feito assumindo que os nós serão sincronizados automaticamente em um curto espaço de tempo. Esta abordagem pode ser apenas uma saída fácil, pois sempre há uma ameaça de corrupção de dados no caso do Split-Brain.
Por outro lado, a Abordagem Pessimista exige abandonar ou simplesmente sacrificar a disponibilidade dos sistemas para manter os dados consistentes. Na detecção de um particionamento de rede, o acesso às subpartições é limitado. Isso é feito para garantir a consistência dos dados. Neste caso, para contornar a divergência de histórico, apenas um componente pode continuar a fazer solicitações de leitura/gravação para o armazenamento.
Lidando com Cluster de Cérebro Dividido por meio de NCache
Quando ocorre um Split-Brain, os nós do cluster na rede passam por uma série de verificações antes de tomar decisões importantes, como quais nós devem ser desligados, reiniciados, reconectados ou removidos da rede. NCache fornece um recurso chamado Split-Brain Auto-Recovery, que está desabilitado por padrão. No entanto, ele pode ser habilitado com base na sensibilidade dos dados e nos requisitos do usuário, caso ocorra um Split-Brain na rede.
NCache oferece esse recurso apenas para a topologia Partição de Réplica. Para entender isso em profundidade, vamos dar uma olhada na conectividade do cluster, na topologia de réplica de partição e nos cenários por trás da desconexão de nós.
Conectividade do cluster
Dois ou mais nós podem se conectar e trabalhar juntos para formar um cluster. Cada nó do cluster é chamado de membro. Um aglomerado em NCache pode ser considerado um canal de grupo no qual os membros podem conversar entre si enviando ou recebendo mensagens. Um cluster é sempre formado em uma topologia mesh, o que significa que todos os nós estão interconectados.
Cada cluster é composto por um nó coordenador e os demais nós não coordenadores ou participantes. O nó coordenador é o nó mais sênior, ou seja, o nó que iniciou primeiro e é responsável pela maioria das tarefas, como adição ou remoção de nós. Sempre que um nó é adicionado ou removido do cluster, ele informa o nó coordenador, que gerencia o restante das operações para manter um ambiente conectável no cluster. Outras tarefas que o nó coordenador realiza incluem distribuição de buckets, acionamento do carregador de cache e manutenção de conexões.
Um cluster pode ser classificado da seguinte forma:
- Cluster totalmente conectado
- Cluster parcialmente conectado
- Cluster interrompido
Cluster totalmente conectado
Um cluster é considerado em um estado totalmente conectado se o cluster tiver n nós e cada nó no cluster tiver conexões n-1 saudáveis com todos os outros nós. Neste estado, todos os nós podem se comunicar entre si, portanto, está em um estado estável.
A figura a seguir mostra um cluster totalmente conectado em um estado ideal.
Se um cluster estiver em um estado totalmente conectado e um nó se juntar ao cluster, ele se tornará parte/membro do cluster correspondente. Se um nó sair do cluster ou for parcialmente desconectado, com um ou mais nós membros, ele formará um cluster separado. Todos os nós existentes são informados desta mudança na rede pelo nó coordenador. Isso aciona a transferência de estado, que visa equilibrar os dados no novo cluster. Com base na topologia, as conexões do cliente são distribuídas entre os novos nós.
Conectividade do cliente
Se um cluster estiver em estado íntegro, na topologia PoR, todos os clientes estarão conectados a todos os nós do cluster. No caso do Split-Brain, que é relevante para o Partition-Replica (PoR), os clientes estão conectados a todos os nós do cluster. Se um nó ingressar, os clientes também se conectarão ao novo nó. Se um nó sair, o cliente poderá continuar a realizar as operações.
Parado
Se um nó sai do cluster corretamente, ou seja, foi desligado e não há nenhum processo host para o nó correspondente, então o nó é considerado parado (em relação ao resto do cluster). A parada de um nó resulta em uma transferência de estado, que leva ao balanceamento dos dados. Isso, por sua vez, equilibra o número de clientes entre o restante dos nós. Entretanto, esse recurso é específico da topologia REP.
Conectividade do cliente
Os clientes que estavam conectados anteriormente ao nó parado agora se conectarão a outros nós conectados.
Cluster parcialmente conectado
Pode haver situações em que um ou mais nós de um cluster não consigam se conectar a outros nós, por exemplo, devido a uma falha na rede.
Suponhamos que haja um cluster totalmente conectado de 3 nós. Se ocorrer uma falha tal que dois dos três nós ainda possam se comunicar entre si; entretanto, o terceiro nó não pode alcançar a rede, então os dois nós conectados formarão um único subcluster, digamos, subcluster 1. O terceiro nó desconectado formará um subcluster independente, digamos, subcluster 2. Cada subcluster -cluster agora terá seus nós coordenadores. Nesta situação, o cluster perde seu estado conectado ideal. Agora existem dois clusters, que não podem se comunicar entre si, mas estão totalmente conectados dentro de seus subclusters. Este estado é chamado de conectividade parcial de um cluster como pode ser visto na figura abaixo.
No cenário mencionado acima, os nós do subcluster 1 e do subcluster 2 são tais que o subcluster 1 está totalmente conectado consigo mesmo e totalmente desconectado do subcluster 2 e vice-versa.
Em um caso mais complexo, vamos supor um cluster de 5 nós onde uma falha de rede faz com que o nó 5 interrompa sua conexão com todos os nós, exceto o nó 3. Nesse caso, o nó 3 ainda está conectado ao nó 5 e o nó 3 ainda está conectado. conectado ao nó 1, nó 2 e nó 4 também. Agora, o nó 3 é um membro comum do subcluster 1 (nó 1, nó 4 e nó 2) e do subcluster 2 (nó 5).
A figura a seguir ilustra a conectividade parcial em andamento.
Cada cluster notificará o nó 3 solicitando que ele mantenha sua conexão com apenas um cluster. Ao receber as notificações, o nó 3 avaliará de onde as notificações estão sendo recebidas e se conectará ao subcluster que contém o nó mais sênior, antes de ocorrer a desconexão do cluster principal, que neste cenário é o subcluster 2.
A figura a seguir exibe a conectividade parcial de um cluster em seu estado final.
Novas tentativas de conexão
Cada operação de cluster tem um valor de tempo limite, que é de 60 segundos por padrão e pode ser configurado no arquivo NCache Centro de Gestão. Cada cluster tem Novas Tentativas de Conexão (valor padrão 2) e Intervalo de Novas Tentativas (valor padrão 2). Ambos os valores também são configuráveis no NCache Centro de Gestão.
Sempre que uma conexão de nó é interrompida em um cluster, o nó coordenador predominante tenta restabelecer a conexão primeiro. Se a nova tentativa resultar em uma conexão bem-sucedida e nenhum tempo limite ocorrer, o cluster passará para um estado normal e totalmente conectado. No entanto, se a conexão não puder ser restabelecida por algum motivo, todos os nós do cluster formarão vários subclusters, resultando em conectividade parcial.
Nova junção de nós
Se um cluster estiver parcialmente conectado, qualquer adição de um novo nó será feita à parte do subcluster que mantém a conectividade apropriada na rede. Caso esteja conectado a ambos os subclusters, ele se unirá ao subcluster de maior tamanho, ou seja, ao subcluster que possui maior número de nós. Se o número de nós for igual, ele comparará os IPs com o nó Coordenador e se unirá ao Coordenador com IP maior.
Conectividade do cliente
Em caso de conectividade parcial, como o cluster está em um ambiente instável, as aplicações clientes podem incorrer em comportamentos abruptos e incertos. Se uma máquina cliente estiver conectada a ambos os subclusters, alguns dos clientes poderão se conectar ao subcluster 1 e outros ao subcluster 2. Pode haver a possibilidade de que a conectividade de rede seja tal que todos os clientes se conectem a um subcluster. apenas cluster. Também não haverá consistência de dados no cluster.
Correção para problema de conectividade parcial
Para resolver o problema do Split-Brain, NCache oferece opções de recuperação manual e automática, conforme explicado abaixo.
Resolução Manual
Quando um cluster entra em estado parcialmente conectado, ele precisa ser reiniciado. A primeira recomendação é tentar identificar e resolver o problema que o fez ficar neste estado. Se for devido a problemas de rede, tente estabilizá-la. Depois de corrigir os problemas, feche os nós criando um único cluster e inicie-os um por um.
Por exemplo, considere o cluster na Figura 3. Pode-se ver que o nó 1, o nó 2 e o nó 4 estão totalmente conectados no subcluster1, enquanto o nó 3 e o nó 5 estão totalmente conectados no subcluster 2. Como uma rede falha resultou na criação do subcluster 2, você precisa desligar o nó 3 e o nó 5. Tente corrigir o problema que está causando a falha na rede. Uma vez feito isso, inicie cada nó um por um. Os nós iniciados se tornarão parte do subcluster1, que então se transformará em um cluster totalmente conectado.
Recuperação automática de cérebro dividido
Para atender ao Split-Brain, NCache também fornece um método automático, que é a opção Split-Brain Auto Recovery através do NCache Centro de Gestão. Como os dados podem ser de vários tipos e conter diferentes níveis de sensibilidade, por padrão esta opção está desabilitada. Depende inteiramente do administrador do NCache Centro de Gestão se devem ou não habilitá-lo conforme julgarem necessário de acordo com a situação. Para ativar a recuperação automática Split-Brain para clusters, consulte Ativando a recuperação automática de cérebro dividido usando NCache Centro de Gerenciamento.
Veja também
Ative a recuperação automática de cérebro dividido usando NCache Centro de Gerenciamento
Definindo as configurações do cluster de cache