Balanceamento de carga HTTP com o Application Request Routing

pela Equipe do IIS

Visão geral

Este tópico leva o leitor pelas etapas para configurar o Application Request Routing para balancear a carga de solicitações HTTP, para obter alta disponibilidade e escalabilidade. O passo a passo também destaca alguns dos principais recursos sobre como o Application Request Routing monitora a integridade dos servidores de conteúdo e afinidade de solicitações de um cliente para um servidor de conteúdo.

Meta

Para balancear a carga de solicitações HTTP em vários servidores de conteúdo usando o Application Request Routing, conforme mostrado abaixo:

Diagrama de Roteamento de Solicitação de Aplicativo em vários servidores de conteúdo.

Pré-requisitos

Esse passo a passo requer os seguintes pré-requisitos:

  • IIS 7.0 ou superior no Windows 2008 (qualquer SKU) ou mais recente.
  • Microsoft Application Request Routing Versão 1 e módulos dependentes.
  • No mínimo, dois servidores de conteúdo com sites e aplicativos em funcionamento.

Siga as etapas descritas neste documento para instalar o Application Request Routing.

Como outro pré-requisito é que o leitor tenha definido e configurado um farm de servidores, usando as etapas descritas em Definir e configurar um grupo de servidores de ARR (Application Request Routing).

Etapa 1 – Verificar regras de reescrita de URL

Desde que o farm de servidores tenha sido criado usando as etapas descritas em Definir e Configurar um Grupo de Servidores de ARR (Application Request Routing), as regras de reescrita de URL já foram criadas para um cenário simples de balanceamento de carga.

Para verificar as regras de reescrita de URL usando a interface do usuário:

  1. Inicie o Gerenciador do IIS.
  2. Selecione o farm de servidores,myServerFarm, que foi criado em Definir e Configurar um Grupo de Servidores ARR (Application Request Routing).
  3. Os seguintes ícones são mostrados:
    Captura de tela do farm de servidores. O ícone Teste de Integridade, o ícone Balanceamento de Carga, o ícone Monitoramento e Gerenciamento, o ícone Proxy, o ícone Regras de Roteamento e o ícone Afinidade do Servidor.
  4. Clique duas vezes em Regras de Roteamento.
  5. Verifique se a caixa de seleção Usar a reescrita de URL para inspecionar solicitações de entrada está marcada.
    Captura de tela da página Regras de Roteamento. As caixas de seleção ao lado de Usar U R L Rewrite para inspecionar solicitações de entrada e Habilitar descarregamento de S S L estão marcadas.
  6. O descarregamento de SSL é habilitado por padrão. Quando esse recurso está habilitado, toda a comunicação entre o servidor de ARR e os servidores de aplicativos é feita em texto claro, mesmo para solicitações HTTPS de clientes para o servidor de ARR. Quando o servidor de ARR e os servidores de aplicativos são implantados em uma rede confiável, como no mesmo datacenter, habilitar o descarregamento de SSL não sacrifica a segurança. Além disso, habilitar esse recurso pode ajudar ainda mais a maximizar os recursos do servidor nos servidores de aplicativos, já que eles não precisam gastar ciclos em criptografar e descriptografar solicitações e respostas.
    Para desabilitar o descarregamento de SSL, desmarque a caixa de seleção Habilitar descarregamento de SSL e selecione Aplicar.
  7. Abra um navegador e envie várias solicitações para o servidor de ARR.
  8. Para verificar se as solicitações estão sendo balanceadas de carga igualmente entre os servidores de aplicativos, selecione myServerFarm. Clique duas vezes em Monitoramento e Gerenciamento.
    Captura de tela do farm de servidores. O ícone Monitoramento e Gerenciamento é mostrado entre outros ícones.
  9. No modo de exibição do painel, verifique se as solicitações estão sendo distribuídas uniformemente.
    Captura de tela da página do recurso Monitoramento e Gerenciamento. As estatísticas de tempo de execução do Roteamento de Solicitação de Aplicativo são mostradas.

Para verificar as regras de reescrita de URL usando a linha de comando:

  1. Abra um prompt de comando com privilégios de administrador.

  2. Navegue até %windir%\system32\inetsrv.

  3. Para verificar se as regras de reescrita de URL foram criadas corretamente, insira appcmd.exe configuração de lista -section:system.webServer/rewrite/globalRules. Ele retorna os globalRules que se parecem com o seguinte:

    <system.webServer>
        <rewrite>
            <globalRules>
                <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard"
                stopProcessing="true">
                    <match url="*" />
                    <conditions>
                    </conditions>
                    <action type="Rewrite" url="http://myServerFarm/{R:0}" />
                </rule>
            </globalRules>
        </rewrite>
    </system.webServer>
    
  4. Para desabilitar o descarregamento de SSL, primeiro remova todas as regras de reescrita de URL:

    appcmd.exe clear config -section:system.webServer/rewrite/globalRules
    

    Em seguida, crie as regras de reescrita de URL para encaminhar o tráfego HTTPS. Mais especificamente, com essa regra, o ARR encaminha solicitações usando o SSL se as solicitações de entrada forem HTTPS:

    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True']"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='On']"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite"
    /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://myServerFarm/{R:0}"
    /commit:apphost
    

    Por fim, crie as regras de reescrita de URL para encaminhar o tráfego HTTP em texto claro, para os servidores de aplicativos:

    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True']"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite"
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm/{R:0}"
    /commit:apphost
    
  5. Para verificar se as regras de reescrita de URL foram criadas corretamente com o descarregamento de SSL desabilitado, insira appcmd.exe configuração de lista -section:system.webServer/rewrite/globalRules. Ele retorna os globalRules que se parecem com o seguinte:

    <system.webServer>
        <rewrite>
            <globalRules>
                <rule name="ARR_myServerFarm_loadbalance_SSL" patternSyntax="Wildcard"
                stopProcessing="true">
                    <match url="*" />
                    <conditions>
                    <add input="{HTTPS}" pattern="On" />
                    </conditions>
                    <action type="Rewrite" url="https://myServerFarm/{R:0}" />
                </rule>
                <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard"
                stopProcessing="true">
                    <match url="*" />
                    <conditions>
                    </conditions>
                    <action type="Rewrite" url="http://myServerFarm/{R:0}" />
                </rule>
            </globalRules>
        </rewrite>
    </system.webServer>
    

Etapa 2 – Configurar o monitoramento de verificação de integridade

O Application Request Routing monitora a integridade dos servidores de conteúdo de duas maneiras:

  • Por meio do tráfego ao vivo
  • Por meio de um teste de URL explícito

O teste de tráfego dinâmico é executado automaticamente por padrão quando as solicitações são feitas ao Application Request Routing. O teste de URL explícito é um teste adicional que pode ser usado com o teste de tráfego dinâmico. Nesta seção, o passo a passo orienta você pela configuração do teste de URL explícito.

Para configurar o monitoramento de verificação de integridade usando a interface do usuário:

  1. O teste de URL requer um URL específico para testar. Para atender a esse requisito, use o Bloco de Notas para criar um arquivo de texto chamado healthCheck.txt que contém a frase "Estou íntegro."
  2. Coloque o arquivo healthCheck.txt nos servidores de aplicativos.
  3. Verifique se o healthCheck.txt está sendo renderizado corretamente abrindo a página em um navegador.
  4. No Gerenciador do IIS, selecione o farm de servidores, myServerFarm. Os seguintes ícones são mostrados:
    Captura de tela do farm de servidores. O ícone Teste de integridade, o ícone Balanceamento de carga, o ícone Monitoramento e gerenciamento e outros ícones.
  5. Clique duas vezes em Teste de Integridade.
    Captura de tela da página do recurso Teste de Integridade. O teste U R L é mostrado.
  6. Insira http://(server name or FQDN of ARR server)/healthCheck.txt como o valor do URL.
  7. Insira íntegro como o valor de correspondência de resposta. A correspondência de resposta é um teste opcional para garantir que o corpo da resposta contenha a cadeia de caracteres esperada. Nesse caso, como healthCheck.txt contém a frase "Estou íntegro," a correspondência de resposta procurará a palavra "íntegro".
  8. Clique em Aplicar para salvar os detalhes.
  9. Para verificar a funcionalidade do monitoramento de verificação de integridade, interrompa o site monitorado em um dos servidores de aplicativos. Como o valor de Intervalo (segundos) é definido como 30 segundos, aguarde 30 segundos para a próxima verificação de integridade.
  10. Após esperar 30 segundos, envie várias solicitações para o servidor de ARR.
  11. Para verificar se todas as solicitações estão indo para os servidores íntegros, clique duas vezes em Monitoramento e Gerenciamento e atualize o painel usando a chave F5. Observe que as estatísticas de runtime foram redefinidas. Isso ocorre por design. Talvez você queira enviar solicitações adicionais e atualizar o painel, conforme necessário.
    Captura de tela da página do recurso Monitoramento e Gerenciamento. As estatísticas de tempo de execução são mostradas.
  12. O monitoramento de integridade também é usado para detectar quando um servidor não íntegro se torna íntegro. Para verificar essa funcionalidade, inicie o site que foi interrompido na Etapa 9. Novamente, como o valor de Intervalo (segundos) é definido como 30 segundos, aguarde 30 segundos para a próxima verificação de integridade.
  13. Após esperar 30 segundos, envie várias solicitações para o servidor de ARR.
  14. Para verificar se as solicitações são distribuídas uniformemente entre servidores, atualize o painel no Gerenciador do IIS. Observe que as estatísticas de runtime foram redefinidas. Isso ocorre por design. Talvez você queira enviar solicitações adicionais e atualizar o painel, conforme necessário.

Para configurar o monitoramento de verificação de integridade usando a linha de comando:

  1. Abra um prompt de comando com privilégios de administrador.

  2. Navegue até %windir%\system32\inetsrv.

  3. Para definir p URL para http://(server name or FQDN of ARR server)/healthCheck.txt com Estou íntegro., como a cadeia de caracteres a ser correspondida, insira:

    appcmd.exe set config -section:webFarms
    /[name='myServerFarm1'].applicationRequestRouting.healthCheck.url:"http://(server
    name or FQDN of ARR server)/healthCheck.txt "
    /[name='myServerFarm1'].applicationRequestRouting.healthCheck.responseMatch:"I am
    healthy." /commit:apphost
    

Etapa 3 – Configurar a afinidade do cliente

O Application Request Routing fornece um recurso de afinidade de cliente que mapeia um cliente para um servidor de conteúdo por trás do Application Request Routing, durante a sessão do cliente. Quando esse recurso está habilitado, o algoritmo de balanceamento de carga é aplicado somente para a primeira solicitação do cliente. Desse ponto em diante, todas as solicitações subsequentes do mesmo cliente seriam roteada para o mesmo servidor de conteúdo durante a sessão do cliente. Esse recurso será útil se o aplicativo no servidor de conteúdo estiver com estado e as solicitações do cliente precisarem ser roteadas para o mesmo servidor de conteúdo porque o gerenciamento de sessão não é centralizado.

Para configurar a afinidade do cliente usando a interface do usuário:

  1. Inicie o Gerenciador do IIS.
  2. Selecione o farm de servidores,myServerFarm, que foi criado em Definir e Configurar um Grupo de Servidores ARR (Application Request Routing).
  3. Os seguintes ícones são mostrados:
    Captura de tela da caixa de diálogo Farm de Servidores e Ícones encontrados no Grupo de Servidores.
  4. Clique duas vezes em Afinidade de Servidor.
  5. Para habilitar a afinidade do cliente, marque a caixa de seleção Afinidade do cliente e selecioneAplicar.
    Captura de tela da página do recurso Afinidade do Servidor. A caixa de seleção ao lado de Afinidade do cliente é mostrada. Na caixa Nome do cookie, o texto A R R Affinity é mostrado.
    O Application Request Routing usa um cookie para habilitar a afinidade do cliente. O Nome do cookie será usado para definir o cookie no cliente. Dito isto, o cliente deverá aceitar cookies para que a afinidade do cliente funcione corretamente.
  6. Para verificar a funcionalidade da afinidade do cliente, envie várias solicitações para o servidor de ARR. Atualize o painel no Gerenciador do IIS (Monitoramento e Gerenciamento). Verifique se as estatísticas de runtime estão sendo alteradas para apenas um dos servidores de aplicativos para onde o cliente tem afinidade. Talvez você queira enviar solicitações adicionais e atualizar o painel, conforme necessário.

Para configurar a afinidade do cliente usando a linha de comando:

  1. Abra um prompt de comando com privilégios de administrador.

  2. Navegue até %windir%\system32\inetsrv.

  3. Para habilitar a afinidade do cliente, insira:

    appcmd.exe set config -section:webFarms
    /[name='myServerFarm1'].applicationRequestRouting.affinity.useCookie:"True"
    /commit:apphost
    

Etapa 4 – Não permitir novas conexões

Não permitir novas conexões em um servidor é uma maneira normal de tirar o servidor do ambiente do farm de servidores. É mais significativo quando o recurso de afinidade do cliente está em uso, pois o Application Request Routing honrará as sessões existentes ao não permitir novas conexões. Ou seja, quando um cliente tem afinidade com o servidor que não permite novas conexões, o cliente continuará a ser roteado para o mesmo servidor e, portanto, não há nenhum impacto no cliente. No entanto, nenhum novo cliente será roteado para o servidor que não está permitindo novas conexões.

Para não permitir novas conexões usando a interface do usuário:

  1. Usando a configuração da Etapa 3 acima, identifique o servidor ao qual o cliente tem afinidade.
  2. Selecione o farm de servidores,myServerFarm, que foi criado em Definir e Configurar um Grupo de Servidores ARR (Application Request Routing).
  3. Os seguintes ícones são mostrados:
    Captura de tela do farm de servidores. O ícone Teste de Integridade, o Ícone de Balanceamento de Carga, o ícone Monitoramento e Gerenciamento, o ícone Proxy e outros ícones encontrados no Farm de Servidores.
  4. Clique duas vezes em Monitoramento e Gerenciamento.
  5. Selecione o servidor para o qual o cliente tem afinidade. No painel Ações, selecione Não Permitir Novas Conexões.
  6. Na caixa de diálogo de confirmação, clique em Sim.
    Captura de tela da caixa de diálogo Roteamento de Solicitação de Aplicativo. O texto Tem certeza de que deseja não permitir novas conexões com o servidor selecionado? é exibido. A opção Sim está realçada.
  7. Para verificar se as solicitações dos clientes continuam a ser roteadas para o servidor com afinidade, que agora não permite novas conexões, envie várias solicitações para o servidor de ARR. Atualize o painel no Gerenciador do IIS. Verifique se as estatísticas de runtime estão sendo alteradas apenas para o servidor para onde o cliente tem afinidade. Talvez você queira enviar solicitações adicionais e atualizar o painel, conforme necessário.
  8. Para verificar se novos clientes não estão sendo roteados para o servidor que não está permitindo novas conexões, remova o conjunto de cookies pelo Application Request Routing, fechando e reiniciando o navegador.
  9. Envie várias solicitações para o servidor de ARR. Atualize o painel no Gerenciador do IIS. Verifique se as estatísticas de runtime estão sendo alteradas apenas para os servidores Disponíveis. Mais especificamente, verifique se as estatísticas de runtime para o servidor que não permite novas conexões não foram alteradas. Talvez você queira enviar solicitações adicionais e atualizar o painel, conforme necessário.

Resumo

Agora você definiu com êxito várias configurações para o Application Request Routing escalar horizontalmente e distribuir a carga uniformemente. Para obter recursos de roteamento mais avançados usando o Application Request Routing, consulte Como usar o Application Request Routing.