Zero uploads de inatividade / reversão no IIS

17

Não tenho certeza se essa é a maneira correta de fazer essa pergunta, mas aqui está basicamente o que eu gostaria de fazer:

1.) Envie um conjunto de alterações para um site no IIS.
2.) Não interrompa os usuários.
3.) Ser capaz de reverter sem esforço.

Então, há algumas coisas que eu sei que precisam acontecer:

1.) Sessão Out of Proc - manipulada
2.) Cache Out of Proc - manipulada

Portanto, as questões que permanecem:
1.) Como evito interromper os usuários? Se eu apenas carregar os arquivos na lixeira, o aplicativo recicla e leva mais de 10 segundos para voltar a ficar on-line
2.) Como faço a reversão sem esforço?

Eu estava pensando que uma solução possível seria ter dois sites configurados no IIS, um público e um privado. Os envios vão para particulares e são aquecidos. Após o aquecimento, os sites são trocados. Uma reversão envolve apenas a troca para privado sem um upload.

Isso parece bom em teoria, mas não tenho certeza da mecânica. Alguma ideia?

FrangoLeiteBomb
fonte
@NickatUship: existe apenas 1 servidor em que o site está hospedado? E se não, alguma possibilidade de adicionar um segundo?
MattB
@NickatUship: também, em qual versão do IIS você está?
MattB
Poderíamos potencialmente resolver isso com nosso loadbalancer - isso é verdade. Eu esperava poder fazer algo no próprio servidor - funcionaria melhor para o nosso fluxo. Estamos no IIS 7.
ChickenMilkBomb
Gostaria de saber se poderíamos usar regras globais de reescrita de URL para um tempo de inatividade zero. 1) Reescreva * .domain.com para * .arbitrarysiteA.com, que é um aplicativo no IIS 2.) faça o upload para * .arbitrarySiteB.com acima 4.) mude a reescrita para * .siteB.com
ChickenMilkBomb

Respostas:

29

Aqui está como eu abordaria esse problema - lembre-se de que não fiz isso antes, são apenas conceitos que testei um pouco no meu ambiente de desenvolvimento. Você poderá configurar uma estrutura bastante robusta usando esse e alguns scripts no idioma de sua escolha. Basicamente, vamos configurar um ambiente de balanceamento de carga no gueto e usá-lo para alternar entre o novo site e o site antigo.

Para configurá-lo, você precisará de:

Instale o ARR para começar.

Configure os 3 sites no IIS:

  • O site 1 será o site ao qual os usuários realmente se conectam, digamos http://192.168.1.1/. Este também é o site do ARR. Basta configurar um diretório vazio para apontar e colocá-lo em seu próprio pool de aplicativos. Configure o pool de aplicativos para não atingir o tempo limite, de acordo com estas instruções .
  • Os sites 2 e 3 serão os sites que realmente hospedam seu conteúdo. Eles precisam estar em seus próprios IPs e, devido à maneira como o ARR funciona, em uma porta diferente da do site 1. Vamos dizer que são http://192.168.1.2:8080e http://192.168.1.3:8080. Eles também devem estar em seus próprios pools de aplicativos e apontar para diretórios diferentes no sistema de arquivos (mas ambos os diretórios normalmente têm o mesmo conteúdo)

Após a instalação do ARR, haverá uma nova categoria no Gerenciador do IIS chamada "Farms de Servidores" - clique com o botão direito do mouse e crie um novo farm.

  • dê um nome que seja significativo para você
  • adicione Webserver 2 e Webserver 3 como os servidores - clique no botão "configurações avançadas", abra a categoria "applicationRequestRouting" e altere o httpPort para 8080 para cada servidor
  • Conclua o assistente - você será perguntado se deseja criar regras de reconfiguração de URL - clique em Sim
  • Agora você tem um farm de servidores - para concluir a configuração, vá para o farm e clique no botão Configuração do Proxy - ative a opção "regravar host reverso nos cabeçalhos de resposta" e aplicar as alterações
  • No Gerenciador do IIS, vá para a categoria de servidor no nível raiz e clique no botão Reescrever URL, haverá uma regra criada para seu farm
    • clique duas vezes na regra para acessar as configurações
    • abra a caixa Condições
    • adicione uma nova condição para {SERVER_PORT}não corresponde a 8080
    • aplique as mudanças

Neste ponto, você tem o básico do que precisamos para realizar sua solicitação. Se você for acessar http://192.168.1.1/o site, poderá acessar o site 1 ou o site 2, mas será perfeitamente claro que existem outros sites.

Agora, o que você pode fazer quando desejar implantar uma nova versão do seu aplicativo é:

  • instale 1 dos servidores em seu farm (nas ferramentas do farm de servidores, vá para "Monitoramento e Gerenciamento", escolha um servidor e escolha "Tornar o servidor indisponível normalmente")
  • implante sua nova versão do site no sistema offline
  • aqueça o site offline usando sua porta / IP alternativa
  • disponibilizar o site para a fazenda novamente
  • repita o processo para o outro servidor

A ferramenta de implantação da Web entra em ação quando você fala sobre querer criar um script de tudo isso. Torna super fácil criar um pacote para seu aplicativo e implantá-lo na linha de comando. Você também pode reverter esse pacote facilmente se houver problemas. O ARR também é programável usando as Microsoft.Web.AdministrationDLLs.

Outra coisa - se você estiver realmente no Windows 2008 R2 (que é o IIS 7.5), dê uma olhada no módulo Application Warmup - deve facilitar a parte de aquecimento disso também.

MattB
fonte
Impressionante - obrigado mate. +1 mesmo por colocar tudo isso para baixo. Vou investigar e voltar ao quadro.
ChickenMilkBomb 25/03
Perfeito .. pode não ser à prova de idiotas .. mas o trabalho de investigação
Vivek Kumbhar
1
Esta é a resposta para implantações de tempo de inatividade zero de aplicativos IIS. Eu escrevi um tutorial detalhado sobre como fazer isso + automatizar o PowerShell.
Kavun
10

MattB bateu fora da água. +1 Eu responderei com mais detalhes, mas não pretendo aceitar os pontos dele. Vou acrescentar ao que ele disse.

Eu tenho uma configuração semelhante à que ele descreveu, e funciona muito bem. O ARR é o caminho a seguir, mesmo em um único servidor.

No entanto, gostaria de acrescentar algumas coisas.

Crie os 2 sites, conforme recomendado por Matt. Chame-os de algo como yoursite.com01 e yoursite.com02.

Crie 2 regras de reescrita de URL. Um para www.seudominio.com e outro para estadiamento.seudominio.com. Para produção, use {HTTP_HOST} com um valor de (^ www.seudominio.com.br $) | (seuIP). (ou qualquer ligação que você preferir) Para teste, use {HTTP_HOST} com um valor de (^ staging.yourdomain.com $). Ligue para as regras yoursite.com e staging.yoursite.com.

Regra de associação = yoursite.com ao site = yoursite.com01 e regra = staging.yoursite.com ao site = yoursite.com02.

Configure o FTP em staging.yoursite.com.

O tráfego de produção agora vai para Rule = staging.yoursite.com e Site = yoursite.com01. Stagging para o oposto.

Você pode implantar na preparação a qualquer momento, teste, pré-spin-up, teste de outras pessoas, etc. Faça-o durante o dia, não importa. Implante na mesma conta FTP sempre. Funciona muito bem com servidores de compilação.

Então, quando estiver pronto para entrar no ar, faça apenas três alterações: - mova a ligação FTP de yoursite.com02 para yoursite.com01 - altere a regra de regravação de URL yoursite.com para apontar para yoursite.com02 - altere o estadiamento da regra de regravação de URL. yoursite.com para apontar para yoursite.com01

Agora você tem tempo de inatividade zero, comutação instantânea e funcionalidade de reversão imediata!

Seu único objetivo a considerar é o estado da sessão fora de processo. Verifique se o servidor de estado aceita os dois IDs do site para que você não perca o estado da sessão durante a troca.

Observe também que este é apenas para a Web e não para o banco de dados.

Para scripts, use o Editor de Configuração. Faça as alterações desejadas e clique em "Gerar script". Ele fornecerá o código C #, appcmd ou AHAdmin.

Eu tenho isso em vigor há alguns meses com um front end de página da Web para trocar instâncias e nunca mais olho para trás. Torna as implantações tão atualizadoras em comparação às implantações tradicionais.

Scott Forsyth - MVP
fonte
@ Scott - obrigado pelo acompanhamento, é bom saber o que eu postei não é loucura geral, pois nunca o fiz antes.
MattB
Não tive muito sucesso ao fazer alterações nas regras de reconfiguração de URL sem incorrer em tempo de inatividade. A maior parte do tempo para mim é: qualquer alteração nas regras de reconfiguração de URL em servidores de alto tráfego aumentará a CPU para 100% por ~ 5-10 segundos, potencialmente causando tempos limite e lentidão percebida pelos usuários.
Kavun
1
@kavun Sim, há verdade nisso. Em algumas atualizações de versão nos últimos anos, as regras de regravação de URL no nível global começaram a causar a reciclagem de domínios de aplicativos para todos os sites. Isso não costumava ser o caso. Portanto, se você tiver sites ASP.NET no mesmo servidor, poderá haver um impacto. No entanto, se você tiver um servidor ARR dedicado apenas para isso, a penalidade para uma reciclagem de domínio de aplicativo é mínima e você ainda poderá usar uma boa solução como essa.
Scott Forsyth - MVP