Configurando Storage Server Debian para Xen Server 6

E ai galera aqui eu vou abordar a instalação e configuração de um Storage Server Debian para utilizarmos no Xen Server este storage vai servir para armazenar as vms com isso podemos subir as VMs em outro servidor fora o que a VM foi instalada pois o storage vai ser compartilhado, vou abordar também a conexão do Xen no Storage Debian e em um compartilhamento NFS que será utilizado para armazenar as Isos de instalação dos SOs.

O que vou utilizar no tutorial:

  • Xen Server 6.0.2
  • Ip Xen: 192.168.1.200
  • Nome Xen: xen01
  • Domínio: douglasqsantos.com.br
  • iqn Xen: iqn.2012-09.br.com.douglasqsantos.xen01:20120914
  • Debian Squeeze
  • Ip Debian: 192.168.1.31
  • Nome Debian: storage
  • Domínio: douglasqsantos.com.br
  • iqn Debian: iqn.2012-09.br.com.douglasqsantos.storage:storage
  • Disco para Storage: 200 GB ele vai ser: /dev/sdb
  • Disco para NFS: 20 GB ele vai ser: /dev/sdc

Vamos começar montando o nosso Storage Server no Debian

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.

Instalação do Storage Server

Agora vamos mandar atualizar os repositórios

aptitude update

Agora vamos mandar instalar os pacotes necessários

aptitude install iscsitarget iscsitarget-source lvm2 -y

Agora vamos acertar os módulos do kernel

m-a prepare && m-a update && m-a a-i iscsitarget

Agora precisamos configurar o nosso daemon que controla o serviço de armazenamento

Vamos fazer um backup do arquivo de configuração

cp -Rfa /etc/iet/ietd.conf{,.bkp}

Agora vamos deixar o arquivo como abaixo

vim /etc/iet/ietd.conf
#Aqui vamos definir o iqn que vai aparecer para o Xen
Target iqn.2012-09.br.com.douglasqsantos.storage:storage
#Aqui vamos definir a nossa Lun qual o local que ela vai ficar o tipo dela 
Lun 0 Path=/dev/xen/storage,Type=fileio
# Agora vamos criar um nome para a nossa LUN
Alias storage

Agora precisamos criar configurar a LVM que o storage vai utilizar para a LUN

Vamos criar o grupo de volumes chamado xen

vgcreate xen /dev/sdb /dev/sdc

Agora vamos criar o volume lógico para o storage

lvcreate -n storage -L 199G xen

Agora vamos criar o volume lógico para o nfs

lvcreate -n nfs -L 19G xen

Agora vamos acertar o arquivo que controla a inicialização do daemon

sed -i 's/false/true/g'  /etc/default/iscsitarget

Agora precisamos iniciar o serviço

/etc/init.d/iscsitarget start

Agora vamos verificar o status do serviço

/etc/init.d/iscsitarget status
iSCSI enterprise target is running.

Configurando a ISCSI no Xen

Agora precisamos acertar a configuração do cliente iscsi do Xen

Vamos adicionar o serviço do open-iscsi na inicialização do Xen

chkconfig --add open-iscsi

Agora vamos ativar ele

chkconfig open-iscsi on

Agora precisamos criar uma iqn para o Xen

vi /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2012-09.br.com.douglasqsantos.xen01:20120914
InitiatorAlias=xen01

Agora vamos reiniciar o serviço do open-iscsi

/etc/init.d/open-iscsi restart

Agora vamos listar o storage Debian

iscsiadm -m discovery -t st -p 192.168.1.31
192.168.1.31:3260,1 iqn.2012-09.br.com.douglasqsantos.storage:storage

Agora vamos mandar o xen listar as informações do storage para podemos mandar conectar

xe sr-probe type=lvmoiscsi device-config:target=192.168.1.31
Error code: SR_BACKEND_FAILURE_96
Error parameters: , The request is missing or has an incorrect target IQN parameter, <?xml version="1.0" ?>
<iscsi-target-iqns>
  <TGT>
    <Index>
      0
    </Index>
    <IPAddress>
      192.168.1.31
    </IPAddress>
    <TargetIQN>
      iqn.2012-09.br.com.douglasqsantos.storage:storage
    </TargetIQN>
  </TGT>
  <TGT>
    <Index>
      1
    </Index>
    <IPAddress>
      192.168.1.31
    </IPAddress>
    <TargetIQN>
      *
    </TargetIQN>
  </TGT>
</iscsi-target-iqns>

No comando acima conseguimos descobrir o targetIQN que vamos precisar para conectar no Storage agora vamos passar o comando novamente e mais o targetIQN

xe sr-probe type=lvmoiscsi device-config:target=192.168.1.31 device-config:targetIQN=iqn.2012-09.br.com.douglasqsantos.storage:storage
Error code: SR_BACKEND_FAILURE_107
Error parameters: , The SCSIid parameter is missing or incorrect, <?xml version="1.0" ?>
<iscsi-target>
  <LUN>
    <vendor>
      IET
    </vendor>
    <serial>
      d46d72048219398f6b2286c689617578
    </serial>
    <LUNid>
      0
    </LUNid>
    <size>
      106300440576
    </size>
    <SCSIid>
      14945540000000000d46d72048219398f6b2286c689617578
    </SCSIid>
  </LUN>
</iscsi-target>

No comando acima já conseguimos mais o serial e o scisiid que vamos precisar para para conectar no storage

Agora vamos passar o comando acima mais o SCSIid

xe sr-probe type=lvmoiscsi device-config:target=192.168.1.31 device-config:targetIQN=iqn.2012-09.br.com.douglasqsantos.storage:storage \
 device-config:SCSIid=14945540000000000d46d72048219398f6b2286c689617578
<?xml version="1.0" ?>
</SRlist>

Como pode ser notado agora já temos todas as informações que precisamos para mandar conectar no storage não temos mais a mensagem de ERRO, agora vamos mandar conectar no storage, vamos definir o nome da identificação do mapeamento com o Storage como Storage Debian e vamos deixar ele compartilhado caso esteja utilizando um pool de servidores este storage vai poder ser utilizado por todos eles

xe sr-create type=lvmoiscsi device-config:target=192.168.1.31 device-config:targetIQN=iqn.2012-09.br.com.douglasqsantos.storage:storage \
 device-config:SCSIid=14945540000000000d46d72048219398f6b2286c689617578 name-label="Storage Debian" shared=true content-type=user
c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945

Como pode ser notado o comando acima não retornou erro somente a identificação do novo sr c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945 vamos mandar listar ele

xe sr-list uuid=c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945 
uuid ( RO)                : c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945
          name-label ( RW): Storage Debian
    name-description ( RW): 
                host ( RO): <shared>
                type ( RO): lvmoiscsi
        content-type ( RO): user

Agora vamos listar o pbd que foi criado para o nosso storage

xe pbd-list sr-uuid=c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945 
uuid ( RO)                  : 647a373c-2e2e-4995-67eb-033a9bf8aed5
             host-uuid ( RO): cd3ec00e-57ff-415a-8391-803291d6e442
               sr-uuid ( RO): c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945
         device-config (MRO): target: 192.168.1.31; targetIQN: iqn.2012-09.br.com.douglasqsantos.storage:storage; SCSIid: 14945540000000000d46d72048219398f6b2286c689617578
    currently-attached ( RO): true

Agora se precisarmos remover o dispositivo precisamos desconectar ele do Xen da seguinte forma

xe pbd-unplug uuid=647a373c-2e2e-4995-67eb-033a9bf8aed5

Agora precisamos mandar destruir o pbd referente ao storage

xe pbd-destroy uuid=647a373c-2e2e-4995-67eb-033a9bf8aed5

Agora por ultimo vamos mandar o Xen esquecer o SR

xe sr-forget uuid=c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945

Instalação do Servidor NFS no Debian

Agora vamos configurar o Servidor NFS no Debian para podermos mapear as isos de instalação

aptitude install nfs-kernel-server nfs-common -y

Agora vamos acertar os arquivos de controle do tcpwrappers

vim /etc/hosts.deny
portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL

Agora vamos acertar quem vai poder acessar o nosso NFS

vim /etc/hosts.allow
portmap: 192.168.1.0/24
lockd: 192.168.1.0/24
rquotad: 192.168.1.0/24
mountd: 192.168.1.0/24
statd: 192.168.1.0/24

Agora vamos criar o sistema de arquivos para o nosso volume que criamos para o nfs

mkfs.ext4 /dev/xen/nfs

Agora vamos criar o diretório /srv/Isos

mkdir -p /srv/Isos

Agora vamos montar o volume nfs em /srv/Isos

mount /dev/xen/nfs /srv/Isos

Agora vamos acertar a permissão do diretório Isos

chmod 777 /srv/Isos

Agora vamos adicionar uma linha no final do arquivo /etc/exports referente ao nosso ponto de montagem que será exportado via NFS

vim /etc/exports
[...]
/srv/Isos   192.168.1.0/24(rw,no_root_squash,sync,no_subtree_check)

Agora vamos reiniciar os serviços referentes ao NFS

/etc/init.d/portmap restart
/etc/init.d/nfs-kernel-server restart

Agora vamos mandar exportar os mapeamentos NFS

exportfs

Agora no Xen vamos listar o nfs

showmount -e 192.168.1.31
Export list for 192.168.1.31:
/srv/Isos 192.168.1.0/24

Como pode ser notado estamos conseguindo listar o que esta compartilhado via nfs agora vamos mandar conectar no NFS via Xen para que apareça um SR para podemos instalar as VMs

Criando o SR via NFS

Aqui vamos informar que o tipo do nosso SR é iso e o seu nome vai ser Isos NFS e também vamos deixar ele compartilhado

xe sr-create host-uuid=cd3ec00e-57ff-415a-8391-803291d6e442 content-type=iso type=iso name-label="Isos NFS" device-config:location=192.168.1.31:/srv/Isos shared=true
8022addd-789f-0e73-bef1-b01320958b23

Conseguimos criar o SR com sucesso vamos listar ele

xe sr-list uuid=8022addd-789f-0e73-bef1-b01320958b23 
uuid ( RO)                : 8022addd-789f-0e73-bef1-b01320958b23
          name-label ( RW): Isos NFS
    name-description ( RW): 
                host ( RO): <shared>
                type ( RO): iso
        content-type ( RO): iso

Caso não apareça as isos quando inserir no compartilhamento /srv/Isos podemos mandar dar um scan no SR da seguinte forma

xe sr-scan uuid=8022addd-789f-0e73-bef1-b01320958b23

Com isso qualquer iso que seja inserida até o momento do scan vai aparecer para o Xen

Agora caso queira utilizar um compartilhamento para NFS para armazenar os discos das VMS podemos criar ele da seguinte forma

xe sr-create host-uuid=cd3ec00e-57ff-415a-8391-803291d6e442 content-type=user name-label="NFS SR" \
shared=true device-config:server=192.168.1.31 device-config:serverpath=/srv/Isos type=nfs

Quando removemos um disco e esquecemos de deletar alguma coisa referente a ele no Xen, o Xen vai acusar que o dispositivo já existe então podemos fazer da seguinte forma, temos que mandar listar a LUN

xe sr-probe type=lvmoiscsi device-config:target=192.168.1.31 device-config:targetIQN=iqn.2012-09.lan.douglas.storage:storage \
device-config:SCSIid=14945540000000000d46d72048219398f6b2286c689617578
<?xml version="1.0" ?>
<SRlist>
  <SR>
    <UUID>
      c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945
    </UUID>
    <Devlist>
      /dev/disk/by-id/scsi-14945540000000000d46d72048219398f6b2286c689617578
    </Devlist>
  </SR>
</SRlist>

Como não houve nenhum erro podemos mandar introduzir ela no Xen utilizando o UUID que o Xen já tem de referência deste SR

xe sr-introduce uuid=c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945 name-label="SCSI" shared=true type=lvmoiscsi content-type=user
232571c3-40bd-a404-b035-eb508c4407be

Agora precisamos criar o pbd deste SR que não existe

xe pbd-create type=lvmoiscsi host-uuid=cd3ec00e-57ff-415a-8391-803291d6e442 sr-uuid=232571c3-40bd-a404-b035-eb508c4407be device-config:target=192.168.1.31 \
 device-config:targetIQN=iqn.2012-09.br.com.douglasqsantos.storage:storage device-config:SCSIid=1494554000000000045773759ad9d8e4e493b01146011d931
93c21b2f-81bb-795a-9526-6b7806f63b4e

Agora precisamos mandar plugar o pbd

xe pbd-plug uuid=93c21b2f-81bb-795a-9526-6b7806f63b4e

Agora já podemos listar o pbd

xe pbd-list sr-uuid=232571c3-40bd-a404-b035-eb508c4407be
uuid ( RO)                  : 93c21b2f-81bb-795a-9526-6b7806f63b4e
             host-uuid ( RO): 2ddd30c3-1304-4eac-b3b8-48e392555211
               sr-uuid ( RO): 232571c3-40bd-a404-b035-eb508c4407be
         device-config (MRO): target: 192.168.1.31; targetIQN: iqn.2012-09.wiki.br.douglas.storage:storage; SCSIid: 1494554000000000045773759ad9d8e4e493b01146011d931
    currently-attached ( RO): true

Acima eu mostrei o método mais dificil de fazer isso na minha opinião eu acho melhor listar os pbds que tem alguma referência com o SR que está dando problema caso ele não exista, precisamos listar os SRs la vai estar o SR com problema é só olhar o parametro host ( RO): vai estar como <not in database> como o seguinte disco

xe sr-list  uuid=c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945
uuid ( RO)                : c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945
          name-label ( RW): Storage Debian
    name-description ( RW): 
                host ( RO): <not in database>
                type ( RO): lvmoiscsi
        content-type ( RO): user

com isso é so mandar dar um forget nele da seguinte forma

xe sr-forget uuid=c1dd6dcd-2696-5ff8-5b1e-41acbd9a4945

Agora é so mandar criar o dispositivo novamente da seguinte forma

xe sr-create type=lvmoiscsi device-config:target=192.168.1.31 device-config:targetIQN=iqn.2012-09.br.com.douglasqsantos.storage:storage \
 device-config:SCSIid=14945540000000000d46d72048219398f6b2286c689617578 name-label="Storage Debian" shared=true content-type=user
2f5ac16e-c4a9-7942-c387-f634d11b4c10

Agora vamos listar o pbd do novo SR

xe pbd-list sr-uuid=2f5ac16e-c4a9-7942-c387-f634d11b4c10 
uuid ( RO)                  : 3b2e86a4-9a57-92d8-0f8d-5859471fa786
             host-uuid ( RO): f0a5d4d4-2767-49ff-8da4-4eeccbe6cfef
               sr-uuid ( RO): 2f5ac16e-c4a9-7942-c387-f634d11b4c10
         device-config (MRO): target: 192.168.1.31; targetIQN: iqn.2012-09.br.com.douglasqsantos.storage:storage; SCSIid: 14945540000000000d46d72048219398f6b2286c689617578
    currently-attached ( RO): true

Agora vamos listar o SR

xe sr-list uuid=2f5ac16e-c4a9-7942-c387-f634d11b4c10 
uuid ( RO)                : 2f5ac16e-c4a9-7942-c387-f634d11b4c10
          name-label ( RW): Storage Debian
    name-description ( RW): 
                host ( RO): <shared>
                type ( RO): lvmoiscsi
        content-type ( RO): user

Para habilitar o multipath no Xen podemos fazer da seguinte forma

xe host-param-set other-config:multipathing=true uuid=cd3ec00e-57ff-415a-8391-803291d6e442

Agora para listar os parâmetros do host podemos fazer da seguinte forma

xe host-param-list uuid=cd3ec00e-57ff-415a-8391-803291d6e442

Referências