Estou avaliando os recursos de cluster do Redis 3 (estou usando o Redis 2 autônomo no momento), então estou lendo as informações em http://redis.io/topics/cluster-tutorial .
Neste documento eu li uma informação muito importante:
Observe que o cluster mínimo que funciona conforme o esperado requer pelo menos três nós principais. Para seus primeiros testes, é altamente recomendável iniciar um cluster de seis nós com três mestres e três escravos.
É realmente verdade? Na minha opinião, isso está correto se eu usar recursos de fragmentação (os dados são compartilhados entre os nós), mas e se eu não precisar e ficaria feliz em ter dados em apenas um nó?
Eu basicamente preciso de um mestre e dois escravos (para que o cluster fique ativo se um nó falhar), posso ter essa configuração em um ambiente de produção? Se sim, quais são as contra-indicações?
Muito obrigado pela sua ajuda!
Não. Não é verdade . É uma recomendação forte (como você pode ver na linguagem "isso funciona conforme o esperado"; se você não espera que seus dados sejam duráveis e espera que eles desapareçam, etc. - você pode configurar um único cluster de nó. Por que você faria, em vez de apenas desativar o modo de cluster... isso depende de você.)
Portanto, sim, você pode configurar um cluster de nó único, mesmo que não seja recomendado (por todos os motivos mencionados em outras respostas e na documentação). Não há nada no código do cluster redis que o impeça, além de uma verificação no auxiliar redis-trib.rb que existe para dissuadir usuários ingênuos.
Para contornar essa verificação e configurar um cluster de nó único (se tiver certeza de que é isso que deseja - lembre-se, quase certamente não é), você pode atribuir manualmente os fragmentos ao seu nó com
CLUSTER ADDSLOTS 1 2 3 ...
(etc, para todos os 16384 fragmentos). Ou use a versão Python do redis-trib que não possui a verificação de segurança de 3 nós (redis-trib.py create 127.0.0.1:6379
).Sim, é por isso que está na documentação :)
Usar o Redis no modo de cluster significa sharding. Se você está satisfeito com uma única instância, simplesmente não use o cluster. Caso contrário, consulte a própria especificação do cluster para entender mais sobre as suposições subjacentes. Especificamente, no caso de configuração mínima de cluster, você desejará 3 mestres para garantir a disponibilidade do cluster no caso de uma partição, ou então você não poderá concordar com a maioria.
Eu sei que esta pergunta é antiga, mas se alguém precisar de uma configuração semelhante pode usar a configuração Master-Slaves em vez de Cluster. Você precisa:
Se você puder torná-lo inteligente o suficiente, basta gravar no mestre e ler de todos os nós. Eu uso essa configuração em alguns sites Wordpress, mas o plugin não é feito para detectar quem é o mestre, então eu apenas uso o HAProxy para detectar o mestre e enviar todo o tráfego para esse nó. Se o nó mestre morrer, um nó escravo assume a função de mestre (redis-sentinel gerencia isso). O HAProxy detecta que o mestre foi alterado e, em seguida, altera o nó que recebe todo o tráfego.
Desculpe por não postar código e exemplos, mas agora não posso fazer isso.
Saudações!!
Se você depender do Redis para failover, precisará de no mínimo três nós mestres e três nós escravos (um mínimo de 3 servidores, cada um executando um mestre e um escravo).
Se você usar um software de cluster externo, por exemplo, heartbeat, poderá configurar dois nós, um mestre e outro escravo no modo de cluster, alocar todos os 16384 slots para o mestre e usar scripts de failover para "CLUSTER FAILOVER TAKEOVER" quando o mestre estiver BAIXA. Claro, você também pode configurar um IP de serviço para failover junto com redis. Esse arranjo adicional permite que você também use o cliente redis sem cluster.
A produção é executada por um ano e falha algumas vezes (reinicialização da máquina para atualização do kernel) e até agora nenhum problema relatado pela equipe de operação.