Configurando o Cassandra para consistência em vários datacenters

7

Atualmente, executamos um anel Cassandra de 4 nós em cada um dos dois datacenters. Gostaríamos de reconstruí-los em um único anel de 8 nós. Sendo todo o resto igual, gostaríamos de ter leituras consistentes, por isso, atualmente executamos leituras e gravações QUORUM. No entanto, se perdermos um datacenter, parece que isso faria com que muitas ou todas as solicitações falhassem devido à impossibilidade de atender ao ConsistencyLevel. Como planejamos enviar solicitações para os dois datacenters, a mudança para LOCAL_QUORUM não deve ser suficiente para garantir a consistência.

O Cassandra parece estar perdendo as configurações do ConsistencyLevel que são medidas apenas em relação aos nós disponíveis.

O que pode ser feito para obter consistência máxima sem falhas de disponibilidade nesse cenário, e o que deve ser negociado para obtê-lo?

    
por zstewart 22.05.2012 / 01:01

2 respostas

1

Você pode ter seu aplicativo de leitura / gravação usando QUORUM em operações normais e, em seguida, fazer o failover para LOCAL_QUORUM no caso de uma falha de CC. Isso é algo que você terá que fazer sozinho, já que Cassandra não fará isso automaticamente. Opcionalmente, se o DC falhar, você poderá executar um reparo do nodetool antes de abri-lo para acesso de leitura / gravação. Obviamente, QUORUM em um cenário multi-CD pode significar que você terá problemas de latência, dependendo do canal entre eles, mas essa é uma troca que você terá que pesar.

    
por 24.05.2012 / 17:26
1

isso simplesmente não é possível. quando sua rede se torna particionada (ou seja, o link entre os datacenters fica inativo) e, em seguida, volta a se reunir, como você reconciliará as alterações feitas em cada datacenter durante a interrupção? Eu estou pedindo especificamente registros que mudaram em ambos os data centers.

Cassandra appears to be sorely missing ConsistencyLevel settings that aye measured against only available nodes.

há uma razão para que, em sistemas distribuídos, coisas como ConsistencyLevel e quorum sejam planejadas pelo administrador e não sejam deixadas para o sistema decidir automaticamente. se o fizessem, então (novamente, usando o seu exemplo) você poderia ter dois nós adjacentes particionados e esses dois nós decidiriam que tinham quorum e se tornariam inconsistentes com o resto dos nós.

    
por 22.05.2012 / 23:39

Tags