O Redis Sentinel não toma medidas quando o mestre desce

5

Estou tentando configurar uma configuração do Redis / Sentinel em 3 nós, cada um executando uma instância de redis e uma sentinela. No entanto, quando a máquina mestre desce, os sentinelas remanescentes ficam ali sentados, sem fazer nada, então decidem definir cada escravo como um escravo de si mesmo, o que obviamente está próximo do pior curso de ação possível.

Detalhes sobre a configuração a seguir:

Os nós são 10.66.5.3 , 10.66.5.4 , 10.66.5.5 .

Por padrão, o nó .3 é o mestre (no momento da instalação), todos os outros têm a entrada apropriada no arquivo /etc/redis/redis.conf : slaveof 10.66.5.3 6379 . O restante do redis.conf não foi modificado.

A configuração inicial para as sentinelas é a seguinte:

daemonize no
sentinel monitor myapp 10.66.5.3 6379 2
sentinel down-after-milliseconds myapp 5000
sentinel failover-timeout myapp 15000
sentinel parallel-syncs myapp 1

Observação: eu deixo upstart manipular o serviço, é por isso que o sinalizador de daemonização está desativado. Os arquivos de configuração são graváveis por seus respectivos daemons, então o sentinel pode (e atualiza) seu arquivo de configuração, por exemplo, sem problemas.

A configuração funciona bem, desde que todos os nós estejam ativos. Registrar algo no mestre propagar-se-á aos escravos e assim por diante.

Agora, quando eu escolhi desligar ( shutdown -h now ) o mestre Redis naquele momento e deixar algum tempo para o quorum ocorrer, a situação resultante é:

  • o nó .4 está configurado para ser um escravo de seu endereço IP ( 10.66.5.4 )
  • o nó .5 está definido como escravo de 127.0.1.1

As sentinelas estão fazendo muitas idas e vindas tentando eleger coisas, mas aparentemente não conseguem se comunicar adequadamente uma com a outra depois que uma delas quebra. Eles também continuam se detectando como para baixo e outras coisas ridículas.

1744:X 12 May 17:02:32.453 # -odown master myapp 127.0.1.1 6379
1744:X 12 May 17:02:33.517 # +odown master myapp 127.0.1.1 6379 #quorum 2/2
1744:X 12 May 17:02:38.139 # +sdown slave 10.66.5.5:6379 10.66.5.5 6379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:38.358 # +sdown slave 10.66.5.4:6379 10.66.5.4 6379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:42.970 # -sdown slave 10.66.5.5:6379 10.66.5.5 6379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:43.203 # -sdown slave 10.66.5.4:6379 10.66.5.4 6379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:43.230 * -dup-sentinel master myapp 127.0.1.1 6379 #duplicate of 127.0.0.1:26379 or 3369dfeed7f6e970c4620b3689741b47ba5d9972
1744:X 12 May 17:02:43.230 * +sentinel sentinel 127.0.0.1:26379 127.0.0.1 26379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:43.280 # -odown master myapp 127.0.1.1 6379
1744:X 12 May 17:02:43.313 * -dup-sentinel master myapp 127.0.1.1 6379 #duplicate of 10.66.5.4:26379 or 3369dfeed7f6e970c4620b3689741b47ba5d9972
1744:X 12 May 17:02:43.313 * +sentinel sentinel 10.66.5.4:26379 10.66.5.4 26379 @ myapp 127.0.1.1 6379
1744:X 12 May 17:02:44.123 # +new-epoch 24
1744:X 12 May 17:02:44.125 # +vote-for-leader 3369dfeed7f6e970c4620b3689741b47ba5d9972 24
1744:X 12 May 17:02:44.409 # +odown master myapp 127.0.1.1 6379 #quorum 2/2

Em execução:

  • Ubuntu 14.04
  • Redis 3.0.0

Não sei bem o que está acontecendo lá e estou sem ideias.

    
por The Mighty Rubber Duck 12.05.2015 / 09:20

2 respostas

1

Não estou perto de um PC para testar, mas como há apenas dois nós sentinela restantes, não há como quebrar o empate.

Funciona se você acabou de matar os redis (e manter a sentinela em execução)? Se assim for, esse é o seu problema.

    
por 05.06.2015 / 21:26
0

servidores redis devem ouvir no IP da máquina, não 0.0.0.0. Caso contrário, os sentinelas podem usar 127.0.0.1 como um dos IP da máquina e propagá-la, o que obviamente está errado.

    
por 23.08.2017 / 16:21