Alterar back-end durante a nova tentativa no verniz 4
Eu gostaria de poder alterar o back-end em uma nova tentativa no Varnish 4. Temos isso funcionando em um aplicativo (mais antigo) diferente usando o Varnish 3, mas não consegui descobrir isso para a v4, nem encontre muita documentação. A configuração que queremos é ter 2 conjuntos de diretores - um para a solicitação inicial de tentar um servidor local no mesmo datacenter que o verniz, porque isso é muito mais rápido e, somente se isso falhar, escolha aleatoriamente um diretor diferente para servidores em outros locais. datacenters.
Na v3, isso foi fácil:
sub vcl_recv {
if (req.restarts == 0) {
set req.backend = defaultdirector;
} else {
set req.backend = backupdirector;
}
}
#Then in vcl_fetch and/or vcl_error something like:
if (beresp.status >= 500 && req.restarts < some_max) {
return(restart);
}
Mas agora na v4, o reinício foi supostamente substituído por nova tentativa, com toda a documentação:
Na versão 3.0, era possível retornar (reiniciar) depois de perceber que a resposta do back-end estava errada, para mudar para um back-end diferente.
Agora, isso é chamado de retorno (nova tentativa) e volta para vcl_backend_fetch.
Isso influencia apenas o encadeamento de busca de back-end, a manipulação do lado do cliente não é afetada.
No entanto, ainda vejo o código de exemplo de algumas pessoas que contém retorno (reinício) em vez de retorno (nova tentativa), e nenhum exemplo disso trabalhando com o comando retry.
Entendo que o verniz não deveria ter que fazer todo o trabalho no vcl_recv novamente (como remover cookies), já que foi apenas a comunicação com o back-end que falhou, por isso faz sentido retornar à busca de back-end em vez de refazer todo o processamento de front-end, mas recebo um erro de compilação se tentar alterar o back-end em vcl_backend_fetch. Como eu faço isso funcionar?