HomeLab – Crie um Storage Server com iSCSI Target usando Powershell

Quando começamos a testar soluções de alta disponibilidade em nosso home lab, logo damos de cara com uma realidade cruel: nem todos têm acesso à uma storage. Eu nunca tive… (Insira cara triste aqui).

Uma solução prática para esse problema é utilizar um iSCSI Target para entregar discos como um Storage Server faria. Desde o Windows Server 2012, esta tecnologia vem disponível como uma built-in feature. No entanto, antes de começarmos a codificar algo, vejamos o basicão sobre este recurso.

Nota: Estes scripts foram desenvolvidos e testados num ambiente Windows 10\Windows Server 2016 com Powershell 5.0. O funcionamento de cada cmdlet pode variar de acordo com a versão.

HTH DOES THIS WORK?

Um iSCSI Target Server é um servidor que irá compartilhar discos virtuais através do iSCSI Target para outros servidores, chamados de iSCSI Initiators. Para um initiator se conectar a um target server, ele realiza uma iSCSI Connection sobre TCP/IP até o Target. O target é um objeto que possui registros de quais initiators podem se conectar a ele e também de todos iSCSI Virtual Disks associados. Estes discos virtuais são criados no target server e, depois, serão montados em um ou mais initiators. Acho que com um desenho fica um pouco mais fácil de entender.

iscsi-target

Neste caso, temos o initiator com dois discos virtuais montados como suas unidades F e G. Como boa prática – e para facilitar um bocado o gerenciamento –, é indicado nomear os discos virtuais de forma a identificar prontamente a quais estes estão associados. Os discos virtuais foram criados em cima da unidade Z do Target Server, mas poderiam ter sido criados em unidades diferentes.

Como a minha ideia é apenas te familiarizar com alguns termos e com o funcionamento desse recurso, vamos seguir em frente. No entanto, caso tenha interesse em começar a estudar sobre este assunto, sugiro começar por aqui [1].

READY TO WORK!

Agora que já entendemos um pouquinho sobre iSCSI Target, vamos à prática. Vou utilizar uma VM que sempre estará ligada para servir como iSCSI Target Server e, pra mim, esta VM é minha Domain Controller [2]. Ela servirá os discos para uma máquina chamada SQLNODE01 – é, bem original, eu sei… A configuração deste ambiente é a seguinte:

tabela

Na VM “WS2016-DC” temos a unidade Z que será usada para criar um disco virtual. Este disco será entregue ao “SQLNODE01” e montado localmente.

Incialmente, iremos até nosso iSCSI Target Server e instalaremos a feature de mesmo nome. Depois, criaremos o target que irá possibilitar a conexão dos discos com os initiators. Note que já iremos associar o endereço IP do SQLNODE01 ao target, mas este procedimento poderia ser realizado posteriormente. Em seguida, criaremos o disco virtual e vamos mapeá-lo ao target que criamos.

#Instalar a feature iSCSI Target Server
Install-WindowsFeature FS-iSCSITarget-Server

#Criar o Target e definir o Initiator que poderá conectar
$TargetName = "Sqlnode01-Target"
New-IscsiServerTarget -TargetName $TargetName `
-InitiatorIds "IPAddress:11.1.1.2"

#Adicionar descrição do Target
Set-IscsiServerTarget -TargetName $TargetName `
-Description "Target para servidor SQLNODE01"

#Criar disco virtual
$VhdPath = "Z:\iSCSIVirualDisks\SQLNODE01-F-SQLDATA.vhdx"
New-IscsiVirtualDisk -Path $VhdPath `
-Description "Disco usado para instância de SQLNODE01" `
-SizeBytes 100GB

#Mapear disco ao Target
Add-IscsiVirtualDiskTargetMapping -TargetName $TargetName -Path $VhdPath

Adicionei algumas descrições do target e do disco virtual para facilitar a administração desses objetos futuramente. Esses detalhes são opcionais, mas recomendados.

Agora, no SQLNODE01, precisamos configurar o serviço “Microsoft iSCSI Initiator” (MSiSCSI) para iniciar automaticamente com a VM e iniciá-lo para que possamos nos conectar ao target. Para isso, criaremos um portal apontando para o nosso target. Ao criar o portal, o target ficará visível e com isso conseguiremos nos conectar. É através desta conexão que teremos acesso ao disco virtual. Finalmente, basta inicializar o disco, criar uma partição e formatar.

#Configurar serviço para iniciar automaticamente
Set-Service -Name MSiSCSI -StartupType Automatic

#Iniciar o serviço
Start-Service MSiSCSI

#Criar portal para o Target
New-IscsiTargetPortal –TargetPortalAddress 11.1.1.1

#Recuperar e conectar-se ao Target
Get-IscsiTarget | Connect-IscsiTarget -IsPersistent $true

#Recuperar discos disponíveis através da conexão
$iSCSIVirtualDisk = Get-iSCSIConnection | Get-Disk

#Inicializar o disco e criar a partição F
$iSCSIVirtualDisk | Initialize-Disk -Passthru | `
New-Partition -DriveLetter F -UseMaximumSize

#Formatar o volume
Format-Volume -DriveLetter F -FileSystem NTFS `
-NewFileSystemLabel "SQLDATA" -AllocationUnitSize 64KB

Um detalhe que vale ser ressaltado: A flag “IsPersistent” foi marcada como “True” para que a conexão com o Target seja reestabelecida sempre que a VM for iniciada.

Pronto! Agora temos um Storage Server entregando um disco para a VM SQLNODE01 e que  também poderá entregar discos para todas as VMs em nosso Home Lab. Aproveito para deixar uma pergunta para você: Qual seria o procedimento se quiséssemos compartilhar um mesmo disco para mais de uma VM?

LINKS

[1] https://blogs.technet.microsoft.com/filecab/2012/05/21/introduction-of-iscsi-target-in-windows-server-2012/

[2] https://comunidadesqlserver.wordpress.com/2017/01/02/homelab-crie-e-configure-um-dominio

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s