Usando o Application Request Routing para migrar sites para o IIS7 - parte 4
Continuando a nossa série, vamos agora para a parte mais interessante. Após a configuração do ARR com Shared Configuration e Offline Files, estamos prontos para migrar as aplicações dos servidores antigos para o novo ambiente IIS7, de forma transparente para o usuário final. O objetivo principal é fazer o balanceamento de acordo com a URL chamada. Por exemplo, se você abrir o navegador colocando o endereço www.contoso.com/app1 o ARR deverá direcionar o tráfego para um certo conjunto de servidores antigos (por exemplo com IIS5 ou 6), mas se você usar www.contoso.com/app2, o ARR direciona o tráfego para outros servidores já com IIS7. Com isso, você terá tempo de homologar cada uma das suas aplicações e migrá-las de forma controlada, sem ter que arriscar uma migração de todos os servidores/sites em um único passo.
Para atingir este objetivo, vamos configurar dois WebFarms nos seus servidores ARR, sendo:
- Um webfarm com servidores antigos (IIS5, IIS6, Apache, ou qquer outro webserver)
- Um webfarm com os novos servidores IIS7 para os quais as aplicações serão migradas.
Em seguida, deve-se adicionar cada um dos servidores no nó “Servers”.
Repete-se então o processo de criação para o segundo farm (chamado de “NOVO”) mas desta vez não cria-se a regra para direcionar todos os requests para o farm, visto que somente algumas aplicações (já homologadas para o IIS7) serão direcionadas ao mesmo. Também não se esqueça de adicionar os servidores correspondentes no nó “Servers”.
Criação das Regras do Proxy Reverso
Ao se criar o primeiro farm (ANTIGO), também foi criada automaticamente uma regra que irá redirecionar todo o tráfego para o mesmo. A regra fica armazenada no arquivo applicationHost.config na pasta compartilhada do Shared Configuration. A seção que contém esta configuração é chamada <globalRules>. A seguir, um exemplo desta seção:
<system.webServer>
<rewrite>
<globalRules>
<clear />
<rule name="ARR_Antigo_loadbalance" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".+" />
<action type="Rewrite" url="https://Antigo/{R:0}" />
</rule>
</globalRules>
</rewrite>
</system.webServer>
Note que, no exemplo acima, a regra foi mudada para utilizar expressões regulares ao invés de caracteres curinga (wildcards).
Uma vez que esta regra já está criada, deve-se então criar regras para direcionar cada uma das aplicações já homologadas para o farm NOVO. Para fazer isso, no IIS Manager, clica-se no farm NOVO e em seguida no painel direito, seleciona-se “Routing Rules”.
No painel central, marca-se a opção “Use URL Rewrite to inspect incoming requests” e em seguida, no painel da esquerda, clica-se em “Apply”. Nesse momento, uma nova regra similar a do farm ANTIGO é criada mas a mesma necessita alguns ajustes.
No painel da esquerda, em “Advanced Routing”, clica-se em “URL Rewrite” para abrir as regras já criadas. Edita-se a nova regra ARR_NOVO_LOADBALANCE recém-criada, para ajustar os seus parâmetros.
Esta regra deverá utilizar expressões regulares, e ao invés de fazer o match para todos os requests, somente aqueles direcionados a aplicação em questão é que devem ser atendidos. A figura a seguir ilustra a configuração da regra criada:
Note que o pattern foi ajustado para combinar com a URL da aplicação que irá fazer parte do balanceamento.
Um aspecto importante é que, para cada aplicação a ser balanceada, uma regra como esta deverá ser criada. Ao final, existirão N regras distintas, correspondendo a cada uma das aplicações direcionadas para o farm com IIS7.
Para concluir, as regras devem ser ajustadas para obedecer uma certa precedência: as regras mais “acima” na janela do URL Rewrite são processadas primeiramente. Assim, a última regra deve ser a que direciona todos os requests para o farm ARR_ANTIGO. É possível ajustar a precedência das regras e também outros detalhes como o nome das mesmas.
É isso ai! Agora você consegue migrar suas aplicações de forma tranquila, sem o risco de um upgrade as escuras.