Pesquisa de site

Como configurar o servidor iSCSI (destino) e o cliente (iniciador) no Debian 9


No mundo dos data centers, Storage Area Networks (SAN) de grande capacidade tornaram-se o padrão mínimo. À medida que os provedores de nuvem e a virtualização também continuam a causar impactos massivos no mundo da tecnologia, a necessidade de ainda mais espaço de armazenamento SAN tornou-se evidente.

A maior parte do hardware SAN é composta por um controlador minimalista (ou conjunto de controladores) e uma grande coleção de unidades de alta capacidade, todas configuradas para suportar grandes quantidades de disponibilidade e integridade de dados.

Muitos desses produtos especializados são fabricados por grandes fornecedores, como Netapp, Dell Equalogic, HP Storageworks ou EMC, e possuem etiquetas de preços anexadas que apenas as maiores empresas podem pagar.

Realisticamente, esses dispositivos nada mais são do que grandes conjuntos de discos rígidos com um controlador que fornece o espaço desses discos rígidos para clientes em rede. Muitas tecnologias existiram ao longo dos anos que fornecem esta funcionalidade ou funcionalidade semelhante a um preço substancialmente mais barato.

A distribuição Debian GNU/Linux fornece pacotes que permitem que um sistema Debian sirva o propósito de um dispositivo de armazenamento SAN de nível empresarial por uma mera fração do custo! Isso permite que todos, desde usuários domésticos básicos até grandes data centers, obtenham os benefícios do armazenamento SAN sem precisar gastar uma fortuna em uma solução proprietária do fornecedor.

Este artigo analisará como um sistema Debian 9 (Stretch) pode ser configurado para fornecer espaço em disco usando um sistema conhecido como Internet Small Computer Systems Interface ou iSCSI, para abreviar. iSCSI é um padrão baseado em Protocolo de Internet (IP) para fornecer armazenamento em bloco (disco rígido) para outros sistemas. O iSCSI funciona em um modelo cliente-servidor, mas usa nomes diferentes para distinguir o cliente do servidor.

Na terminologia iSCSI, o servidor que fornece o 'espaço em disco' é conhecido como um iSCSI 'Destino' e o sistema que está solicitando /utilizar o espaço em disco é conhecido como 'Iniciador' do iSCSI. Em outras palavras, um ‘Iniciador’ solicita o armazenamento de blocos de um ‘Destino‘.

Configuração do ambiente

Este guia percorrerá uma configuração básica envolvendo um servidor iSCSI simples (destino) e um cliente (iniciador) ambos executando o Debian 9 (Stretch).


Debian iSCSI Target: 192.168.56.101/24
Storage: Contains two extra hard drives to be used as the storage in the iSCSI setup
Debian iSCSI Initiator: 192.168.56.102/24

A rede pode ser visualizada abaixo:

Configuração de destino iSCSI Debian

No mundo iSCSI, o destino é considerado o host que contém os dispositivos de armazenamento a serem usados pelo iniciador.

Neste artigo o servidor com IP 192.168.56.101 está sendo usado como destino. Todas as configurações serão feitas nesse host para esta seção.

O primeiro passo é a instalação dos pacotes necessários para permitir que o sistema Debian sirva alvos iSCSI. Este pacote de software é conhecido como Target Framework (TGT).

O outro item que está sendo usado neste guia são as ferramentas de Gerenciamento de Volume Lógico (LVM) como Volumes Lógicos (LVs).) será usado como suporte de armazenamento para o destino iSCSI.

Ambos os pacotes podem ser instalados com os seguintes comandos.


apt-get update
apt-get install tgt lvm2

Depois que os pacotes forem instalados, o LVM será usado para preparar os discos rígidos no destino para uso como um iSCSI LUN. O primeiro comando é usado para preparar os discos para inclusão em uma configuração LVM. Certifique-se de modificar o comando conforme necessário para diferentes cenários!


lsblk (Only used to confirm disks to be used in the LVM setup)
pvcreate /dev/sd{b,c}

Depois que os discos tiverem sido preparados com o comando ‘pvcreate’ acima, é hora de criar um grupo de volumes a partir desses discos específicos. O grupo de volumes é necessário para criar os volumes lógicos que atuarão como armazenamento iSCSI posteriormente.

Para criar um grupo de volumes, o comando ‘vgcreate’ é necessário.


vgcreate tecmint_iscsi /dev/sd{b,c}
vgs  (Only needed to confirm the creation of the volume group)

Observe na saída acima que o sistema responde que o Grupo de Volumes foi criado, mas é sempre uma boa ideia verificar novamente como visto acima com o comando ‘vgs’. A capacidade deste grupo de volumes é de apenas 9,99 GB. Embora este seja um grupo de volumes particularmente pequeno, o processo seria o mesmo para discos de maior capacidade!

O próximo passo é a criação do volume lógico que atuará como disco para o cliente iSCSI (iniciador). Neste exemplo, todo o grupo de volumes será usado, mas não é necessário.

O volume lógico será criado usando o comando ‘lvcreate’.


lvcreate -l 100%FREE tecmint_lun1 tecmint_iscsi
lvs  (Simply used to confirm the creation of the logical volume)

O comando ‘lvcreate’ acima pode ser um pouco confuso à primeira vista, mas a divisão é a seguinte:

  • lvcreate – Comando usado para criar o volume lógico.
  • -l 100%FREE – Crie o volume lógico usando todo o espaço livre do grupo de volumes.
  • -n tecmint_lun1 – O nome do volume lógico a ser criado.
  • tecmint_iscsi – O nome do grupo de volumes no qual criar o volume lógico.

Depois que o volume lógico tiver sido criado, é hora de criar o LUN (Número da Unidade Lógica real). O LUN será o dispositivo de armazenamento ao qual o iniciador se conectará e usará posteriormente.

Criar um LUN é muito simples e requer apenas alguns passos. O primeiro passo será a criação do arquivo de configuração. Este arquivo residirá no diretório ‘/etc/tgt/conf.d’ e para este artigo será chamado de ‘TecMint_iscsi.conf‘.

Para criar este arquivo use um editor de texto.


nano /etc/tgt/conf.d/TecMint_iscsi.conf

Dentro deste arquivo serão configuradas todas as informações de configuração necessárias para este LUN. Há muitas opções que podem ser colocadas neste arquivo, mas por enquanto um LUN básico com Protocolo de autenticação de handshake de desafio (CHAP) mútuo será ser configurado.

A definição do LUN existirá entre duas declarações ‘target’. Para obter mais parâmetros que podem ser incluídos na instrução de destino, revise a página de manual do arquivo ‘targets.conf’ emitindo ‘man 5 targets.conf‘.


<target iqn.2018-02.linux-console.net:lun1>
     # Provided device as an iSCSI target
     backing-store /dev/mapper/tecmint_iscsi-tecmint_lun1
     initiator-address 192.168.56.102
    incominguser tecmint-iscsi-user password
     outgoinguser debian-iscsi-target secretpass
</target>

Há muita coisa acontecendo acima. Uma explicação rápida pode ser útil para a maioria.

  • A primeira linha inicia a configuração específica do iSCSI LUN. Neste caso, o LUN rotulado como ‘iqn.2018-02.linux-console.net:lun1‘. A parte ‘iqn‘ indica que este será um nome qualificado para iSCSI. O ‘2018-02‘ é uma combinação de datas escolhida arbitrariamente. ‘linux-console.net‘ é o domínio ao qual este LUN específico pertence. Finalmente, ‘lun1‘ é usado como nome para este alvo específico.
  • A segunda linha acima ilustra um comentário. Comentários podem existir nos arquivos de configuração de destino e devem ser precedidos por um símbolo ‘#’.
  • A terceira linha é onde existe o espaço de armazenamento real que será usado pelo iniciador. Neste caso, o suporte de armazenamento será o volume lógico criado anteriormente no guia.
  • A quarta linha é o endereço IP esperado do iniciador. Embora este não seja um item de configuração obrigatório, pode ajudar a aumentar a segurança.
  • A quinta linha é o nome de usuário/senha de entrada. Assim como o endereço do iniciador acima, este parâmetro também não é obrigatório, mas pode ajudar a proteger o LUN. Como este guia também aborda o CHAP mútuo iSCSI, esse parâmetro é obrigatório. Esta linha indica o nome de usuário e a senha que o destino esperará do iniciador para se conectar a este LUN.
  • A sexta linha é o nome de usuário/senha que o destino fornecerá ao iniciador para permitir que a autenticação CHAP mútua ocorra. Normalmente, esse parâmetro não é obrigatório, mas este artigo aborda a autenticação CHAP mútua, portanto, esse parâmetro é obrigatório.
  • A linha final é a declaração final para a definição do alvo. Preste atenção à barra de fechamento antes do alvo da palavra-chave!

Depois que as configurações apropriadas para o LUN forem digitadas, salve as alterações e saia do editor de texto. Se estiver usando nano, pressione ctrl+o para salvar e depois pressione ctrl+x para sair do nano.

Depois que o arquivo de configuração for criado, o serviço tgt deverá ser reiniciado para que tgt esteja ciente dos novos destinos e da configuração associada.

Isso pode ser feito com um dos comandos a seguir e depende do sistema init em uso.


service tgt restart  (For sysv init systems)
systemctl restart tgt  (For systemd init systems)

Uma vez reiniciado o tgt, é importante verificar se o destino iSCSI está sendo disponibilizado de acordo com o arquivo de configuração criado.

Isso pode ser feito com o comando ‘tgtadm‘.


tgtadm --mode target --op show   (This will show all targets)

Isto conclui a configuração do alvo. A próxima seção trabalhará com a configuração do iniciador.

Configuração do iniciador iSCSI Debian

A próxima etapa no uso do destino iSCSI previamente configurado é a configuração do iniciador iSCSI.

Um sistema Debian 9 diferente será usado como o iniciador neste artigo, mas qualquer sistema que possa utilizar o protocolo iSCSI pode se conectar ao destino previamente configurado; isso pode incluir hipervisores como XenServer/ESXi ou outras distribuições como Red Hat, Debian ou Ubuntu.

O primeiro passo neste processo para este iniciador Debian é a instalação dos pacotes apropriados para iSCSI.


apt-get update
apt-get install open-iscsi

Assim que o apt terminar a configuração dos pacotes open-iscsi, a configuração do iniciador iSCSI pode começar. O primeiro passo será comunicar-se com o destino para obter as informações de configuração inicial do destino preparadas.


iscsiadm -m discovery -t st -p 192.168.56.101

Quando este comando for executado, ele responderá com o nome do lun configurado anteriormente para este host específico. O comando acima também gerará dois arquivos para as informações do LUN recém-descoberto.

Agora o arquivo criado para este nó precisará ter as informações de CHAP configuradas para que este destino iSCSI seja realmente acessível pelo iniciador.

Tecnicamente, essas informações podem ser configuradas para todo o sistema, mas no caso de um host se conectar a diferentes LUNs com credenciais diferentes, colocar essas credenciais no arquivo de configuração do nó específico pode atenuar quaisquer problemas.

O arquivo de configuração do nó existirá no diretório ‘/etc/iscsi/nodes/‘ e terá um diretório por LUN disponível. No caso deste artigo (observe que os caminhos serão alterados se os nomes/endereços IP forem alterados).


/etc/iscsi/nodes/iqn.2018-02.linux-console.net\:lun1/192.168.56.101\,3260\,1/default

Para trabalhar com este arquivo, qualquer editor de texto pode ser usado.


nano /etc/iscsi/nodes/iqn.2018-02.linux-console.net\:lun1/192.168.56.101\,3260\,1/default

Dentro deste arquivo existirão diversas opções já configuradas para o respectivo destino que foram determinadas durante o comando ‘iscsiadm‘ executado anteriormente.

Como esta configuração específica do destino/iniciador do Debian está usando o CHAP mútuo, mais algumas opções precisam ser alteradas e adicionadas a este arquivo e, em seguida, um login no destino iSCSI realizado.

As alterações neste arquivo são:


node.session.auth.authmethod = CHAP                    #Enable CHAP Authentication
node.session.auth.username = tecmint-iscsi-user        #Target to Initiator authentication
node.session.auth.password = password                  #Target to Initiator authentication
node.session.auth.username_in = debian-iscsi-target    #Initiator to Target authentication
node.session.auth.password_in = secretpass             #Initiator to Target authentication

As opções acima permitirão que este destino se autentique no iniciador, bem como permitirá que o iniciador se autentique no destino >.

Há outra opção neste arquivo específico que pode precisar ser alterada dependendo das preferências do administrador: o parâmetro ‘node.startup’.

Se seguir este guia, a opção ‘node.startup‘ será definida como ‘manual‘ neste ponto. Isto pode não ser desejado. Se o administrador desejar ter o destino iSCSI conectado quando o sistema for inicializado, altere ‘manual‘ para ‘automático‘ da seguinte forma:


node.startup = automatic

Depois que as alterações acima forem feitas, salve o arquivo e saia. Neste ponto, o serviço iniciador open-iscsi precisa ser reiniciado para ler essas novas alterações e conectar-se ao destino iSCSI.

Isso pode ser feito com um dos seguintes comandos, dependendo do sistema init em uso.


service open-iscsi restart   (For sysv init systems)
systemctl restart open-iscsi (For systemd init systems)

Observe na caixa verde acima que o iniciador iSCSI conseguiu fazer login no destino. Para confirmar ainda mais que o destino iSCSI está realmente disponível para o iniciador, podemos verificar se há unidades de disco extras disponíveis no sistema usando o comando 'lsblk. >' comando e verificando a saída para unidades extras.


lsblk

O outro comando que pode ser usado no iniciador para confirmar uma conexão com o destino é ‘iscsiadm‘ como tal:


iscsiadm -m session

O local final para confirmar uma conexão seria no próprio destino usando o comando ‘tgtadm’ para listar quaisquer conexões iSCSI.


tgtadm --mode conn --op show --tid 1

A partir deste ponto, o dispositivo iSCSI recém-conectado pode ser usado de forma semelhante a qualquer disco normalmente conectado! Particionamento, criação de sistema de arquivos, montagem e/ou montagem persistente podem ser tratados normalmente.

Um grande cuidado a ter com os dispositivos iSCSI é se o destino iSCSI contém sistemas de arquivos importantes que são necessários enquanto o iniciador está inicializando, certifique-se de para usar a entrada '_netdev' no arquivo '/etc/fstab' para garantir que o dispositivo iSCSI esteja conectado antes que o sistema continue inicializando!