Testar com fiabilidade a integridade do servidor ColdFusion

1

O plano de fundo

Estamos executando um servidor de cache Varnish na frente de um servidor de backend CF / Apache2. A caixa de verniz executa uma análise de verificação de integridade a cada dois segundos da seguinte maneira:

probe healthcheck {
        .url = "/probe.cfm";
        .timeout = 5s;
        .interval = 2s;
        .window = 10;
        .threshold = 5;
        .initial = 5;
        .expected_response = 200;
}

backend web1 {
        .host = "<backend ip>";
        .port = "80";
        .probe = healthcheck;
}

O probe.cfm faz isso:

<cfoutput>
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
        <meta charset="utf-8">
        <title>CF Probe</title>
</head>

<body>
</cfoutput>

<cfquery name="qryProbe" datasource="#Request.DSN#">
        SELECT TOP 1 [PageID] FROM [Page] WHERE [PageID] > 6
</cfquery>

<cfoutput>
        #Variables.qryProbe.RecordCount#
        </body>
</html>
</cfoutput>

Este snippet seleciona um único registro do banco de dados subjacente (mapeado em fontes de dados) e retorna um 200 se for bem-sucedido.

Mais tarde, na configuração do Varnish, há uma seção que testa se o back-end está ativo e, caso contrário, define o período de tolerância do cache para 24 horas e, para as páginas que não estiverem no cache, deve gerar uma página de manutenção sintética.

sub vcl_recv

if (req.backend.healthy) { set req.grace = 30s; } else { set req.grace = 24h; }

sub vcl_error

if (!req.backend.healthy && obj.status != 200 && obj.status != 403 && obj.status != 404 && obj.status != 301 && obj.status != 302) {
    synthetic{"<some HTML here>"}
}

O problema

Recentemente, tivemos uma condição em que a instância de FC não era estritamente falando sem resposta , mas não estava veiculando páginas. De acordo com os logs de verniz, no entanto, o backend ainda estava saudável , de modo que o Varnish rapidamente parou de exibir conteúdo também.

Além disso, vi pelo menos uma instância em que o backend estava gerando erro 500s enquanto reiniciamos a instância de CF e o Varnish ainda relatava que era saudável, apesar da linha de teste de integridade no log dizer que recebeu 500 do backend.

A questão

Como posso testar com mais precisão o status de integridade do back-end de CF para que o Varnish responda corretamente a interrupções / reinicializações / etc.

Eu suponho, além disso, alguém pode ver quaisquer falhas gritantes nos testes de verniz para a integridade de back-end que eu configurei e os testes que determinam se o HTML sintético é processado ou não?

    
por poolski 13.02.2013 / 12:18

1 resposta

1

Bem, ele é configurado de modo que leva 12 segundos de erros consecutivos (6 verificações, 2 segundos de intervalo) para o back-end ser marcado como não-íntegro, portanto, há certamente o potencial de solicitações de usuários entrarem e serem exibidos com conteúdo inválido a sonda coleta respostas ruins suficientes para marcar o backend.

Você pode ajustar as configurações de janela / limite da sua sonda, conforme desejado, para reduzir esse intervalo de tempo e considerar a configuração do modo santo como uma forma de tratar imediatamente as respostas incorretas sem precisar coletar falhas em um probe ou enviar essas respostas ruins aos usuários.

    
por 14.02.2013 / 08:09