Deduplicação do Windows Server 2012 R2 com Hyper-V

Ontem em um cliente usei o meu servidor para as Demos de System Center e ele se interessou quando disse que utilizava o recurso Deduplication (ou Dedup) do Windows Server 2012 R2. Consequentemente, a reunião migrou do System Center para otimização de discos com o Hyper-V.

Afinal de contas, o ganho com Dedup em VHDs é impressionante, chegando no meu caso a quase 80% de espaço adicional:

image

Importante: Primeiro ponto nessa conversa é deixar claro que a Microsoft não suporta Dedup para Hyper-V em hosts de Hyper-V para VMs em produção. O motivo é explicado no TechNet http://technet.microsoft.com/en-us/library/hh831700.aspx, e basicamente é porque Dedup em ambiente onde os arquivos estão abertos pode gerar diversos erros:

“Deduplication of open files has not been fully validated for general virtualization or other applications, and additional issues may be encountered.”

Porem, surgem sempre duas perguntas neste caso:

Pergunta 1: Mas o Dedup do Windows 2012 R2 pelo PowerShell tem o modo “Files” e o modo “Hyper-V”, como não é suportado?

Resposta: Para Hyper-V só é suportado para ambiente VDI, onde as maquinas são de usuário com SO cliente. Como em geral ambientes de VDI utilizam o modo de pool e uma única VM é duplicada a cada nova seção, se 100 usuário estão online teríamos 100 VHDs sendo criados dinamicamente com dados duplicados.
Neste caso fica evidente que o uso do Dedup será suportado, uma vez que os VHDs são dinamicos e não estão o tempo todo em uso. Alem disso em geral são utilizados discos diferenciais, mantendo o disco parent imutável.

Pergunta 2: Se não é suportado, porque eu estou usando?  ;-)

Resposta: Não é suportado, mas no meu caso não é ambiente de produção e utilizo Dedup manual:

image

Não mantenho meu servidor 24 horas por dia ligado, então quando todas as VMs estão paradas, normalmente faço isso semanalmente, inicio o Job do Dedup com o comando:

Start-DedupJob -Type Optimization -Volume X:

Depois basta monitorar se o Job já terminou com Get-DedupJob:

Capturar2

Assim, meus arquivos VHD não correm o risco de serem manipulados enquanto estão em uso e garanto que periodicamente está sendo atualizado o Dedup.

Porem, é sempre bom lembrar que para não ter problemas o ideal é ter um disco ou volume separado para os VHDs, pois na configuração do Dedup este volume estará configurado como VDI (ou Hyper-V no PowerShell):

image

Microsoft Azure RemoteApp

Recentemente a Microsoft anunciou o lançamento deste serviço, chamado de RemoteApp.

Introdução ao RemoteApp

O RemoteApp é um serviço para permitir a execução de aplicações instaladas no Azure sejam executadas em máquinas Windows, Mac, iPad, iPhone e Android.

É a mesma coisa que o Remote Desktop Services (RDS) do Windows Server 2012?

Basicamente sim na utilização pelo usuário final, mas difere no funcionamento comparado ao Remote Desktop Services disponivel no Windows Server 2012.

No RDS publicamos as aplicações nos servidores Windows e definimos os atalhos destas aplicações baseadas no farm de servidores RDS que foram criados. É baseado nas aplicações que rodam no servidor, criando instâncias das aplicações. Só é possivel publicar aplicações que estejam instaladas em todo o farm.

No Azure RemoteApp fazemos o upload de uma maquina virtual criada no Hyper-V para o Azure e o sistema apresenta as aplicações disponiveis nesta VM para serem oferecidas ao cliente. As instâncias que o usuário funcionam no modelo de auto-provisionamento, onde a VM é criada conforme a necessidade de novas execuções. Alem disso, cada VM pode conter diferentes aplicações e o Azure é o responsável por iniciar a VM correspondente aquela aplicação solicitada pelo usuário.

Criando Serviço RemoteApp

Como o RemoteApp ainda é Preview, é necessário solicitar acesso a ele pelo portal do Azure, que pode demorar até uma semana para ser concedido. Após receber o email liberando o uso, podemos ver o serviço no painel.

Importante lembrar que no periodo de Preview o uso é gratuito, mas após a disponibilização pública ou GA (Global Availability) passa a ter um custo utilizar este serviço.

No painel do Microsoft Azure será possivel ver o RemoteApp e criar serviços:

RemoteApp (1)

Para criar o serviço, basta utilizar o botão “New” do Azure e criar uma instância. No meu exemplo utilizei a VM já padronizada com Office 2013 que o Azure dispõe como padrão, mas veja que no menu do serviço acima temos a opção “Template Images” onde podemos colocar as nossas aplicações customizadas, bastando utilizar o Windows Server 2012 R2 com SysPrep.

Após criar a instância do serviço, o passo seguinte é definirmos os acessos. Se o seu ambiente possui o Azure AD poderá utilizar os usuários do Dominio, se não houver a integração podemos usar diretamente as Microsoft Accounts como o exemplo abaixo:

RemoteApp (2)

Após definir o acesso e criar o serviço definimos quais aplicações serão disponibilizadas. Esse processo pode ser feito apresentando as aplicações pelo caminho na VM ou pelo Menu Iniciar, como o exemplo abaixo:

RemoteApp (3)

RemoteApp (4)

Terminado isso, as aplicações estão publicadas e já é possivel abrir com o cliente RDP especifico do Azure RemoteApp.

Utilizando as Aplicações no Windows

Entre no site https://www.remoteapp.windowsazure.com e instalar o cliente RDP da Microsoft, como pode ser visto abaixo:

RemoteApp (5)

Ao instalar o cliente já podemos ver as aplicações publicadas e utilizá-las, o que é muito fácil e rápido uma vez que está vinculado ao seu usuário no RemoteApp:

RemoteApp (6)

RemoteApp (7)

Veja no exemplo acima que o Excel tem o ícone com o simbolo do RDS, indicando que se trata de uma aplicação remota. Mas para o usuário, nada muda e toda a execução é transparente.

Utilizando o Azure RemoteApp no iPad

O passo seguinte é abrir em um dispositivo não-Windows. Utilizei neste caso o iPad.

Para iniciar bastou entrar no site e pedir para instalar o cliente RDP que automaticamente abriu a Apple Store:

iPad (1)iPad (2)

Ao abrir o cliente Microsoft RDP no iPad utilize o “Add Microsoft RemoteApp” que já está disponivel nesta versão do cliente para incluir o Microsoft Account vinculado no RemoteApp, digitar os dados de acesso e aceitar o invite apresentado:

iPad (3)iPad (4)

Automaticamente as aplicações publicadas já estão disponiveis para uso, de forma muito prática:

iPad (5)

Ao clicar na aplicação desejada o cliente RDP irá fazer o login no Azure e instanciar a aplicação selecionada de forma dinâmica:

iPad (6)

E a mágica acontece! O Excel está aberto na tela do iPad com recursos completos e possibilitando trabalho remoto:

iPad (7)

Dúvidas Adicionais

É possivel usar o RemoteApp para abrir aplicações na minha estação local ou device (iOS e Android)?

Não, o RemoteApp não tem acesso aos recursos locais da maquina ou device. Porem, ele utliza como padrão para salvamento o OneDrive que permite a troca do arquivo com a sincronização padrão e possui cliente para os devices suportados.

Posso administrar remotamente as sessões como no RDS?

Sim, no console do Microsoft Azure é possivel enviar uma mensagem para o usuário, encerrar a sessão ou desconectar todos ou um unico usuário selecionado:

RemoteApp (8)

É complexo o processo para publicar as minhas próprias aplicações?

Não, é bem simples. Crie uma VM no Windows Server 2012 R2 (utilizando Gen1 com VHD, o Azure não suporte VHDX), instale as aplicações e execute o SysPrep. Depois disso na opção do console do RemoteApp utilize a opção “Template Images” para fazer o upload do VHD.

É possivel integrar o RemoteApp em um farm RDS ou no meu ambiente de rede local?

Sim, porem este processo é complexo e necessita que seja criado um gateway virtual que aponta o RemoteApp para o seu ambiente com IP Público. Para fazer este processo consulte a documentação disponivel no site do Microsoft Azure, que por se tratar de um Preview ainda não é extensa e simples de ser consultado passo-a-passo.

Utilizando o Hyper-V Replica Parte II - Boas Práticas para RTO e RPO

No primeiro post sobre Hyper-V Replica abordamos as vantagens sobre réplica de storage e como iniciar a configuração e réplica http://www.marcelosincic.com.br/blog/post/Utilizando-o-Hyper-V-Replica-Parte-1e28093Vantagens-e-Primeira-Replica.aspx

Neste segundo post vamos abordar como o RTO e RPO são importantes e como o Hyper-V Replica se encaixa nestes conceitos.

Recovery Time Objective e Recovery Point Objective

Basicamente os termos RTO e RPO indicam os objetivos que uma solução de desastre deve cumprir:

  • RTO – Tempo máximo para se recolocar o serviço em produção
  • RPO – Tempo máximo de dados que podem ser “perdidos” entre o evento de desastre e o ambiente restaurado

Um bom exemplo de como estes valores se relacionam e o que significam pode ser explicado no gráfico abaixo:

image

No exemplo acima conseguimos “enxergar” claramente o RTO e o RPO:

  • RTO foi de 5 horas e 3 minutos, entre as 05:15 e as 10:18
  • RPO foi de 3 horas e 15 minutos, entre as 02:00 e as 05:15, uma vez que o backup foi realizado as 2 da manhã

Como determinar o RTO e RPO

Estes valores são determinados por um plano que é chamado de DRP (Disaster Recovery Plan) que é orquestrado por consultorias especializadas neste tipo de processo. Geralmente é realizado quando uma organização está atualizando seu datacenter e, consequentemente revendo suas políticas de recuperação dos dados ou montagem do datacenter redundante.

O processo de levantamento destes dados se baseia em entrevistas e dados do ambiente de TI e, entre outras coisas, coleta:

image

Porque o Hyper-V Replica é uma ótima opção

O processo de backup é uma das formas que o RPO e RTO podem ser cumpridos, porem as práticas normais de restore muitas vezes são impeditivas levando em conta o tempo que é perdido entre o ultimo backup e a falha (RPO) e o tempo necessário para se restaurar um servidor a partir de backups (RTO).

Com o Hyper-V Replica o tempo de RTO é minimo, uma vez que as réplicas mantem a maquina virtual (VM) no ambiente de redundância integra.

E o RPO?

Em um ambiente de backup o RPO é facilmente calculado e mantido. Por exemplo, se o RPO da aplicação CRM tem perda máxima calculada em 30 minutos, podemos fazer o backup incremental a cada 15 ou 30 minutos.

No caso do Hyper-V Replica este tempo não é determinado de forma simples, uma vez que o tempo de replicação (Replication Frequency) de cada VM indica o intervalo e não o periodo desejado de proteção. Seria muito bom ter uma opção onde pudesse ser indicado qual o tempo máximo em que uma réplica pode estar desatualizada…

Um segundo item importante é levar em conta o grupo de uma aplicação, por exemplo mais de um servidor que forma a mesma aplicação e precisa estar com a réplica sincronizada por igual. Como o Hyper-V Replica não tem o conceito de grupo de serviço, não temos como garantir a integridade do conjunto da aplicação.

Outra dificuldade no Hyper-V Replica é o baixo número de opções de intervalo da réplica (Windows 2012 a cada 5 minutos, Windows 2012 R2 a cada 30 segundos, 5 minutos ou 15 minutos):

image

Imagine um cluster com 80 VMs, sendo que cada VM tem impacto diferente no negócio ou requisitos técnicos particulares. Destas 80 VMs algumas são servidores web que podem ser replicadas uma vez por dia, outras são servidores de aplicação que só precisam ser replicados quando sofrem algum tipo de atualização e, por fim temos os servidores que precisam ser replicados continuamente.

Como configurar diferentes RPO?

Uma prática que pode ser adotada de forma simples, é colocar as máquinas em grupos de criticidade e configurar utilizando as 3 janelas de réplica do Windows 2012 R2 (30 segundos, 5 minutos e 15 minutos).

O problema é que se a VM que será replicada a cada 30 segundos for, por exemplo um banco de dados e o ambiente de redundância for por WAN, o consumo do link será muito alto e as outras VMs entrarão em intervalo de réplica e com isso todas as réplicas ocorrerão simultaneamente. Com isso, o RPO ficará prejudicado para todas as VMs críticas e muito baixo para as maquinas não criticas.

Uma boa prática neste caso é configurar as VMs com RPO maior que 2 horas para serem replicadas manualmente por meio de PowerShell abaixo:

Resume-VMReplication MaquinaVirtual –Resynchronize –ResynchronizeStartTime “8/1/2012 05:00 AM”

Este comando pode ser executado pelo Task Scheduler ou utilizando o Orchestrator com schedule embutindo o comando.

No exemplo citado anteriormente, as VMs de banco de dados ou informações como File Server ficariam com a configuração do próprio Hyper-V a cada 5 ou 15 minutos. As VMs estáticas poderiam ser configuradas com replicação manual, e com tarefas ou runbook agendados e recorrentes replicar pontualmente conforme o grupo de criticidade.

Conclusão

Este segundo post abordamos como alcançar o RTO e RPO.

O próximo post irei abordar os comandos e a sequencia de comandos PowerShell que podem ser executados como script ou com Runbook no Orchestrator.