Azure File Sync

Márcio Sousa Cunha
9 min readNov 17, 2023

--

O Azure File Sync é um serviço de compartilhamento de arquivos baseado em nuvem, os dados podem ser acessados via SMB, NFS ou FTPS. Com ele é possível, por exemplo, sincronizar arquivos entre filiais a partir dos servidores locais de cada localidade.

Neste artigo iremos abordar alguns aspectos sobre o serviço e fazer um laboratório de implantação através de comandos do Power Shell.

Dentre os cenários de utilização do Azure File Sync temos:

  • Compartilhamento de dados entre filias;
  • Migração do serviço de compartilhamento de arquivos local para nuvem;
  • Recuperação de desastre;
  • Armazenamento de arquivos para liberação de espaço no servidor local.

A imagem a seguir ilustra a relação entre cada componente. E também será usada como referência para criação dos recursos.

Registered Server: é a relação de confiança entre o servidor local e o serviço de sincronismo no Azure;

Azure File Sync Agent: aplicativo que habilita o servidor local para o sincronismo com o Azure Files;

Server Endpoint: representa o local específico em um servidor registrado onde os arquivos se encontram. Por exemplo, um diretório em um volume de arquivos;

Cloud Endpoint: é um compartilhamento no Azure Files;

Sync Group: define quais arquivos serão sincronizados e as configurações de cache.

Um server endpoint pode ser vinculado a vários sync groups. Entretanto, um sync group só pode ter um server endpoint vinculado.

O Azure File Sync juntamente com o Azure Files provê meios para a continuidade dos negócios e recuperação de desastres. Suponhamos que haja um incidente com o servidor local, ao invés de voltar o backup você pode provisionar um novo servidor e fazer o sincronismo dos arquivos. Isso pode tornar os dados disponíveis em menos tempo se comparado ao tempo de restauração do backup tradicional.

É possível também utilizar os benefícios do armazenamento em camadas. Isso permite reduzir a quantidade de armazenamento local necessária e manter o desempenho do servidor local.

Com esse recurso habilitado, apenas os arquivos acessados com frequência são mantidos localmente. Os arquivos com pouco acesso são divididos em namespace e conteúdo de arquivos. O namespace fica armazenando localmente e o conteúdo dos arquivos é armazenado no compartilhamento de arquivo do Azure. Quando um usuário faz a solicitação de algum arquivo através do namespace o conteúdo vinculado a esse namespace é baixado para o servidor local.

Através do recurso de camadas é possível criar políticas de sincronismo:

Política de espaço livre no volume: informa ao serviço de sincronização que os arquivos com pouco acesso devem ser transferidos para a nuvem quando uma certa quantidade de armazenamento é consumida no disco local. A política pode ser configurada, por exemplo, para fazer o sincronismo quando houve 30% de espaço livre.

Política de data: os arquivos sem acesso por uma quantidade preestabelecida de dias são transferidos para a nuvem. Por exemplo, arquivos sem acesso ou modificação por mais de 30 dias.

Existe série de conceitos a respeito do Azure File Sync, para se aprofundar mais consulte a documentação do serviço.

Implantação do Serviço

Para esse laboratório precisaremos de um servidor Windows Server, caso não tenha uma máquina local você pode criar uma VM no Azure.

Os passos de criação incluem:

Criação do Storage Sync Service

Preparação do servidor

Instalação do agente

Registro do servidor

1 - Faça login na sua conta Azure. Caso tenha mais de uma assinatura selecione em qual delas quer criar os recursos.

Connect-AzAccount

Get-AzSubscription

Set-AzContext -Subscription <SUBSCRIPTION_NAME>

2 - Defina as variáveis

#VARIAVEIS COMUNS

$RG_NAME = “rg1023”

$LOCATION = “eastus”

#VARIAVEIS VM

$VM_NAME = “lab1023”

# VARIAVEIS DA CONTA DE ARMAZENAMENTO

$STG_NAME = “stgsync1023”

$STG_SKU = “Standard_LRS”

# VARIAVEIS DO COMPARTILHAMENTO

$SHARE_NAME = “share1023”

$TIER = “Cool”

$QUOTA = “1024”

# VARIAVEIS DO STORAGE SYNC SERVICE

$STG_SYNC_NAME = “stgsyncservice1023”

$SYNC_GROUP_NAME = “syncshare1023”

$CLOUD_ENDPOINT_NAME= “mktshare1023”

$SYNC_GROUP_NAME = “syncshare1023”

$CLOUD_ENDPOINT_NAME= “mktshare1023”

3 - Crie o Resource Group

New-AzResourceGroup -Name $RG_NAME -Location $LOCATION

4 - Crie a máquina virtual

New-AzVm `

-ResourceGroupName $RG_NAME `

-Name $VM_NAME `

-Location $LOCATION `

-Image ‘MicrosoftWindowsServer:WindowsServer:2022-datacenter-azure-edition:latest’ `

-VirtualNetworkName $VM_NAME’-vnet’ `

-SubnetName $VM_NAME’-snet’ `

-SecurityGroupName $VM_NAME’-nsg’ `

-PublicIpAddressName $VM_NAME’-pip’ `

-OpenPorts 3389

5 - Crie o Storage Account

New-AzStorageAccount -ResourceGroupName $RG_NAME -Name $STG_NAME -SkuName $STG_SKU -Location $LOCATION -AccessTier $TIER

6 - Crie o File Share

New-AzRmStorageShare -ResourceGroupName $RG_NAME -StorageAccountName $STG_NAME -Name $SHARE_NAME -AccessTier $TIER -Quota $QUOTA

7 - Prepare o servidor local

Obs: caso tenha problemas com a área de transferência nos scripts a seguir copie o texto para o bloco de notas, em seguida copie a partir do bloco de notas e cole na console que estiver usando o Azure PowerShell.

Para registrar o servidor local no Storage Sync Service é preciso desabilitar a Configuração de Segurança Reforçada do Internet Explorer. Após o registro ela pode ser habilitada novamente. Abra o PowerShell com como administrador e execute o comando a seguir.

function Disable-IEESC {
$AdminKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}"
$UserKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}"
Set-ItemProperty -Path $AdminKey -Name "IsInstalled" -Value 0
Set-ItemProperty -Path $UserKey -Name "IsInstalled" -Value 0
Stop-Process -Name Explorer
Write-Host "IE Enhanced Security Configuration (ESC) has been disabled." -ForegroundColor Green
}

Disable-IEESC

8 - Instale o Azure File Sync Agent no servidor local

Por padrão o PowerShell trabalha com a versão 1 do TLS execute o comando a seguir, no servidor local, para que seja usada a versão 1.2. Caso contrário o download do agente irá falhar.

[Net.ServicePointManager]::SecurityProtocol = “tls12”

Execute o script a seguir para instalação da versão apropriada ao sistema operacional do servidor. Caso o sincronismo seja usado em um cluster de failover é preciso instalar o agente em todos os nós, e estes devem ser registrados no serviço de sincronismo.

# Gather the OS version
$osver = [System.Environment]::OSVersion.Version
# Download the appropriate version of the Azure File Sync agent for your OS.
if ($osver.Equals([System.Version]::new(10, 0, 20348, 0))) {
Invoke-WebRequest `
-Uri https://aka.ms/afs/agent/Server2022 `
-OutFile "StorageSyncAgent.msi"
} elseif ($osver.Equals([System.Version]::new(10, 0, 17763, 0))) {
Invoke-WebRequest `
-Uri https://aka.ms/afs/agent/Server2019 `
-OutFile "StorageSyncAgent.msi"
} elseif ($osver.Equals([System.Version]::new(10, 0, 14393, 0))) {
Invoke-WebRequest `
-Uri https://aka.ms/afs/agent/Server2016 `
-OutFile "StorageSyncAgent.msi"
} elseif ($osver.Equals([System.Version]::new(6, 3, 9600, 0))) {
Invoke-WebRequest `
-Uri https://aka.ms/afs/agent/Server2012R2 `
-OutFile "StorageSyncAgent.msi"
} else {
throw [System.PlatformNotSupportedException]::new("Azure File Sync is only supported on Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 and Windows Server 2022")
}
# Install the MSI. Start-Process is used to PowerShell blocks until the operation is complete.
# Note that the installer currently forces all PowerShell sessions closed - this is a known issue.
Start-Process -FilePath "StorageSyncAgent.msi" -ArgumentList "/quiet" -Wait
# Note that this cmdlet will need to be run in a new session based on the above comment.
# You may remove the temp folder containing the MSI and the EXE installer
Remove-Item -Path ".\StorageSyncAgent.msi" -Recurse -Force

9 - Crie o Storage Sync Service

New-AzStorageSyncService -ResourceGroupName $RG_NAME -Name $STG_SYNC_NAME -Location $LOCATION

10 - Abra o agente do Azure File Sync, selecione a opção para autenticar usando o Cloud Solution Provider, insira do ID do tenant e clique em Sign in.

11 - Selecione o serviço de sincronismo criado, clique em Register e aguarde o fim do processo.

12 - Clique em close.

13 - Prepare os arquivos que serão sincronizados.

No meu caso criei um diretório chamado Marketing na unidade D: e dentro dele criei duas pastas e um arquivos de texto.

Obs: a unidade D: é temporário e o desligar a VM os dados são perdidos. Aqui ela está sendo utilizada apenas para fins didáticos. Não deve ser usada em ambinte de produção.

14 - Crie o Sync Group

New-AzStorageSyncGroup -ResourceGroupName $RG_NAME –StorageSyncServiceName $STG_SYNC_NAME -Name $SYNC_GROUP_NAME

15 - Crie o Cloud Endponit

Obtenha o ID do storage account e em seguida crie o cloud endpoint

$STG_ID = (Get-AzStorageAccount -ResourceGroupName $RG_NAME -Name $STG_NAME).Id

$SYNC_GROUP = Get-AzStorageSyncGroup -ResourceGroupName $RG_NAME -StorageSyncServiceName $STG_SYNC_NAME

New-AzStorageSyncCloudEndpoint -Name $CLOUD_ENDPOINT_NAME -ParentObject $SYNC_GROUP -StorageAccountResourceId $STG_ID -AzureFileShareName $SHARE_NAME

16 - Crie o Server Endpoint

Observações:

  • Um ponto de extremidade do servidor deve ser um caminho em um servidor registrado (e não um compartilhamento montado). Não há suporte para Armazenamento NAS (Network Attached Storage).
  • Embora o ponto de extremidade do servidor possa estar no volume do sistema, os pontos de extremidade do servidor no volume do sistema podem não usar camada de nuvem.
  • Não há suporte para alterar o caminho ou a letra da unidade depois de estabelecer um ponto de extremidade de servidor em um volume. Verifique se você está usando um caminho final no servidor registrado.
  • Um servidor registrado pode dar suporte a vários pontos de extremidade de servidor, no entanto, um grupo de sincronização só pode ter um ponto de extremidade de servidor por servidor registrado a qualquer momento. Outros pontos de extremidade do servidor dentro do grupo de sincronização devem estar em servidores registrados diferentes.

No processo de criação do server endpoint existem alguns pontos a serem observados no que diz respeito às políticas de sincronismo, verifique qual política mais se adequa aos requisitos do projeto.

Para upload:

Merge: caso existam arquivos com mesmo nome no mesmo caminho, ambos serão mantidos com nomes diferentes. Use essa opção se o compartilhamento no Azure estiver vazio;

ServerAuthoritative: Arquivos com mesmo nome serão sobrescritos. Os arquivos na nuvem serão atualizados de acordo com os arquivos no servidor local. Se o arquivo não existir localmente, será excluído na nuvem. Se as permissões ou metadados dos arquivos no servidor local mudarem, os arquivos na nuvem serão atualizados.

Para download:

NamespaceOnly: opção padrão quando o recurso de camada está habilitado. Recupera o namespace sem recuperar os arquivos. Essa opção permite que os dados sejam recuperados de acordo com as solicitações dos usuários;

NamespaceThenModifiedFiles: opção padrão quando o recurso de camada está desabilitado. O namespace é baixado primeiro, e depois os arquivos são recuperados com base no carimbo de data/hora da última modificação até que a capacidade do servidor local seja atingida;

AvoidTieredFiles: só pode ser usando com o recurso de camada desabilitado. Evita que o namespace seja baixado primeiro. Com isso apenas arquivos baixados por completo são exibidos. Essa opção pode ser usada, por exemplo, em cenários onde um aplicativo precisa acessar arquivos que estejam presentes por completo e não suportem armazenamento em camada.

Neste laboratório utilizaremos o recurso de camadas. Serão aplicadas a política de espaço livre preservando 30% do espaço no volume local, e a política NamespaceOnly. E o diretório local é o D:\Marketing

# VARIAVEIS DO SERVER ENDPOINT

$REGISTERED_SERVER = Get-AzStorageSyncServer -ResourceGroupName $RG_NAME -StorageSyncServiceName $STG_SYNC_NAME

$SERVER_ENDPOINT_NAME = “mktshare1023”

$SERVER_ENDPOINT_PATH = “D:\Marketing”

$CLOUD_TIERING = $true

$FREE_SPACE_PERCENTAGE = “30”

$DOWNLOAD_POLICY = “NamespaceOnly”

New-AzStorageSyncServerEndpoint -ResourceGroupName $RG_NAME -StorageSyncServiceName $STG_SYNC_NAME -SyncGroupName $SYNC_GROUP_NAME -Name $SERVER_ENDPOINT_NAME -ServerResourceId $REGISTERED_SERVER.ResourceId -ServerLocalPath $SERVER_ENDPOINT_PATH -CloudTiering -VolumeFreeSpacePercent $FREE_SPACE_PERCENTAGE -InitialDownloadPolicy $DOWNLOAD_POLICY

17 - Acesse o Azure Files e valide o sincronismo dos arquivos.

18 - Apague os recursos criados

Para exclusão do Storage Sync Server é preciso remover todos os Sync Groups, para isso execute os comandos a seguir.

Unregister-AzStorageSyncServer -Force -ResourceGroupName $RG_NAME -StorageSyncServiceName $STG_SYNC_NAME -ServerId $REGISTERED_SERVER.ServerId

Remove-AzStorageSyncCloudEndpoint -Force -ResourceGroupName $RG_NAME -StorageSyncServiceName $STG_SYNC_NAME -SyncGroupName $SYNC_GROUP_NAME -Name $CLOUD_ENDPOINT_NAME

Remove-AzStorageSyncGroup -Force -ResourceGroupName $RG_NAME -StorageSyncServiceName $STG_SYNC_NAME -Name $SYNC_GROUP_NAME

Remove-AzStorageSyncService -Force -ResourceGroupName $RG_NAME -Name $STG_SYNC_NAME

Use o comando a seguir para apagar o Resource Group e demais recursos contidos nele.

Remove-AzResourceGroup -Name rg1023 -Force

Conclusão

Com o Azure File Sync é possível centralizar os compartilhamentos de arquivo através do Azure Files proporcionando flexibilidade e desempanho. Neste artigo exploramos conceitos téoricos e práticos sobre a implantação do serviço, onde foi possível validar o processo de sincronismo de arquivos.

Referência:

Azure File Sync

Azure PowerShell

--

--