Nossos clientes sempre nos solicitam orientações sobre como ter um ambiente de armazenamento distribuído e confiável. Nossa primeira recomendação é o uso de um storage que permita confiabilidade e crescimento de acordo com as necessidades da empresa. Um inconveniente é custo de aquisição do equipamento. Apesar de ter reduzido muito o valor inicial, ainda é um fator que pesa na decisão.
Uma ideia é configurar um equipamento que tenha vários discos e que possa compartilhar seu armazenamento com outros equipamentos da rede local por protocolos específicos como iscsi por exemplo.
Equipamento
A primeira recomendação é quanto às características do hardware. Uma configuração ideal para performance e segurança envolve um equipamento com discos SAS de 15K rpms. Sei que isto não é de baixo custo, mas eu disse que é o ideal. Você também pode trabalhar com discos SATA2 de 7.200rpms. Você vai ter uma boa performance.
Quantos discos eu devo usar? Se possível 6 discos, pelo menos. Utilize dois como discos para o sistema operacional do equipamento configurados em raid1. Isto vai garantir a operação do equipamento. Os outros quatro discos você configura como raid10. Se você tiver uma controladora raid no servidor para isto, melhor ainda. Caso não tenha, configure estes dispositivos raid pelo linux mesmo. Os volumes que vamos exportar serão criados diretamente no raid10. Nosso servidor de exemplo está exportando um volume raid10 de 3Tb.
Instalação
Os procedimentos que vou mostrar foram executados em um equipamento com controladora raid e a instalação com RedHat Enterprise Linux 5. Estes mesmos procedimentos podem ser replicados em um Fedora ou outra distribuição compatível.
O serviço de compartilhamento iscsi é provido pelo pacote scsi-target-utils. Este pacote pode ser instalado diretamente pelo DVD de instalação do RedHat ou a partir do canal ClusterStorage do RHN. Este canal precisa ser atribuído manualmente ao servidor antes que possamos instalar o pacote.
# yum -y install scsi-target-utils
Este pacote instala o serviço tgtd responsável por compartilhar dispositivos locais via iscsi.
Configuração
Agora passamos à configuração do nosso servidor para compartilhar um volume que será manipulado remotamente.
As configurações podem ser feitas com o comando tgtadm ou pelo arquivo de configuração. A forma mais simples é através do arquivo e é isto que vou mostrar.
Criando os volumes a serem compartilhados
Os volumes que vamos compartilhar são, na verdade, partições ou volumes lógicos do lvm localizado no raid10 deste servidor de exemplo. Eu criei um grupo de volumes chamado vg0 que ocupa todo o espaço do raid e, dentro dele, criei um volume lógico de 100G para estes testes.
[root@storage tgt]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 1 0 wz--n- 3221G 3121G
[root@storage tgt]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv.lun1 vg0 -wi-a- 100.00G
Eu chamei o volume lógico de lv.lun1. Você pode escolher o nome que achar mais conveniente.
O volume lógico ou partição que você criar não deve ser formatado nem montado no servidor local. Tudo isso será feito a partir dos clients, os servidores que vão mapear este volume.
Exportando o lvm como um volume iscsi
A configuração que é enviada junto com o pacote scsi-target-utils tem um exemplo simples, mas interessante. Vamos criar uma nova entrada neste arquivo mas antes veremos um item importante.
O primeiro passo é definir o nome de compartilhamento que será visto pelos servidores remotos. Este nome deve seguir um padrão e você não deve ignorar estas regras. Se você escolher um nome qualquer, pode até ser que o equipamento remoto consiga acessá-lo porém pode te trazer problemas. O padrão mais utilizado é o iqn (iSCSI Qualified Name). Este padrão segue a seguinte estrutura:
Dom DNS String definida pelos admins
Tipo Data invertido por exemplo: uso, tamanho, etc
+--++-----+ +---------+ +--------------------------------+
| || | | | | |
iqn.2001-04.com.example:storage:diskarrays-sn-a8675309
iqn.2001-04.com.example
iqn.2001-04.com.example:storage.tape1.sys1.xyz
iqn.2001-04.com.example:storage.disk2.sys1.xyz
Tendo este padrão em mente vamos configurar o compartilhamento. Edite o arquivo /etc/tgt/targets.conf como no exemplo a seguir:
<target iqn.2010-01.savant.intranet:storage.disk1.100g>
# Qual o dispositivo local (partição ou volume lógico) está sendo compartilhado
backing-store /dev/vg0/lv.lun1
# Controle de acesso - somente este ip pode mapear os volumes exportados
initiator-address 192.168.0.2
</target>
Inicie o serviço tgtd e configure-o para inicialização automática:
# service tgtd start
# chkconfig tgtd on
Com isto, seu compartilhamento iscsi deve estar ativo e disponível. Execute o comando a seguir para confirmar isto.
# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2010-01.savant.intranet:storage.disk.100g
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: deadbeaf1:0
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store: No backing store
LUN: 1
Type: disk
SCSI ID: deadbeaf1:0
SCSI SN: beaf11
Size: 107374 MB
Online: Yes
Removable media: No
Backing store: /dev/vg0/lv.lun1
Account information:
ACL information:
ALL
Pronto. Nosso servidor iscsi (mais conhecido como iscsi target) está no ar e compartilhando o primeiro volume de 100G. Para compartilhar novos volumes basta criar o dispositivo (partição ou volume lógico lvm), acrescentar uma nova seção target à sua configuração e recarregar o serviço tgtd.
Acessando o storage remotamente
Agora vamos configurar um equipamento que vai mapear o compartilhamento iscsi remoto.
O primeiro passo é instalar o pacote iscsi-initiator-utils que é a parte client do iscsi, inicie o serviço e configure-o para inicialização automática:
# yum -y install iscsi-initiator-utils
# service iscsid start
# chkconfig iscsid on
Vamos ver se conseguimos identificar o compartilhamento do outro servidor. Este comando solicita uma lista de volumes exportados pelo servidor via protocolo iscsi.
# iscsiadm -m discovery -t sendtargets -p 192.168.0.1
192.168.0.1:3260,1 iqn.2010-01.savant.intranet:storage.disk1.100g
Pronto, aí está o disco compartilhado que vamos mapear neste servidor. O passo seguinte é efetuar login no servidor remoto via iscsi. Login neste caso significa estabelecer conexão com o storage e mapear os dispositivos exportados como se fossem discos locais. Isto é feito com o comando a seguir:
# iscsiadm -m node -T iqn.2010-01.savant.intranet:storage.disk1.100g -p 192.168.0.1 -l
Logging in to [iface: default, target: iqn.2010-01.savant.intranet: storage.disk1.100g,
portal: 192.168.0.1,3260]
Login to [iface: default, target: iqn.2010-01.savant.intranet:storage.disk1.100g, portal:
192.168.0.1,3260]: successful
Agora o disco do servidor deve aparecer como um disco local. Rode o comando fdisk para verificar isto. Veja que o volume iscsi aparece como um disco sdb normal.
[root@backup ~]# fdisk -l
...
Disk /dev/sdb: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
No servidor que atua como storage, o volume de 100Gb está particionado e disponível porém, quando ele é exportado via iscsi, o cliente identifica como um disco que ainda não foi, sequer, inicializado. Você precisa particioná-lo a partir da máquina cliente para que possa ser usado como armazenamento.
Se você reiniciar seu equipamento agora, este volume sdb não será listado. Para que o iscsid possa fazer o login e disponibilizar o volume localmente de forma automática você deve colocar o iqn no arquivo /etc/iscsi/initiatorname.iscsi como segue:
InitiatorName=iqn.2010-01.savant.intranet:storage.disk1.100g
Crie uma partição no novo dispositivo identificado com o comando fdisk anterior, formate-a e coloque em seu fstab como segue:
# device dir local format opções backup verif
LABEL=100g /storage ext3 _netdev 0 0
A opção _netdev listada no fstab indica ao servidor que este volume só deve ser montado depois que as conexões de rede estiverem disponíveis.
Para você verificar se tudo deu certo, inclusive o login automático no servidor storage e a montagem da partição local reinicie o seu servidor.
Referências
tgt project - http://stgt.sourceforge.net
iSCSI wikipedia - http://en.wikipedia.org/wiki/ISCSI
iSCSI initiator quick start guide - http://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guide
Conclusão
Aqui estão os passos para configurar o servidor iscsi (target) e como mapear estes volumes a partir de equipamentos remotos (initiators). Há outras opções que podem ser consideradas, como usuário e senha para login no storage iscsi. O controle de acesso que fizemos aqui é baseado, apenas, na origem da conexão que já oferece um bom controle.
Se você quiser seguir em frente há várias opções tanto no tgtadm quando no iscsiadm que podem ser exploradas.


