ALTA DISPONIBILIDADE ISCSI E MULTIPATH – REDHAT

INFRAESTRUTURA

 

O meu ambiente montado em máquinas virtuais, está configurado da seguinte forma:

  1. Host Cliente
    • 2 Interfaces de Rede
    • Eth0: 10.0.2.4/24
    • Eth1: 192.168.56.101/24
  2. Host Storage
    • 2 Interfaces de Rede
    • Eth0: 10.0.2.X/24
    • Eth1: 192.168.56.101/24


Sendo a rede 192.168.56.x/24 um dos caminhos para o storage e 10.0.2.X/24 será o outro caminho.

Por se tratar um ambiente virtual, não temos cabos, switches etc. Em um ambiente físico utilize switches diferentes, pois utilizando o mesmo switch a “redundância” não estará livre de ser afetada caso o switch apresente falhas. 🙂

Iniciadas as duas estações, primeiramente devemos configurar o repositório, para isso vamos utilizar a ISO do Red Hat Enterprise Linux6.5, a mesma que usamos para a instalação do SO.

# mount /dev/cdrom /mnt
# mkdir /repo
# cp -rf /mnt/* /repo

Criar um arquivo de configuração para que o comando yum reconheça como um repositório o “/repo”:

# vi /etc/yum.repos.d/rhel.repo

Conteúdo do arquivo deverá ficar desta maneira:

[redhat]
baseurl=file:///repo
name=”Redhat”
gpgcheck=0
[redhat-storage]
baseurl=file:///repo/ResilientStorage
name=”Redhat1″
gpgcheck=0
[redhat-ha]
baseurl=file:///repo/HighAvailability
name=”Redhat2″
gpgcheck=0

Para testarmos se a configuração teve efeito no S.O.:

# yum repolist

Loaded plugins: product-id, subscription-manager
This system is not registered to Red Hat Subscription 
Management. You can use subscription-manager to register.
redhat           | 3.9 kB     00:00 ...
redhat-ha        | 3.9 kB     00:00 ...
redhat-storage   | 3.9 kB     00:00 ...
repo id          repo name    status
redhat           "Redhat"     3.690
redhat-ha        "Redhat2"    56
redhat-storage   "Redhat1"    62

 

CONFIGURANDO STORAGE

 

Com nossa infraestrutura funcionando perfeitamente, vamos agora configurar o storage disponibilizando um volume de X GB.

X = Indiferente do tamanho que deseja disponibilizar, no meu exemplo vou adicionar um disco de 5GB.

Primeiramente, na máquina de storage, vamos instalar os pacotes necessários para configurar o ISCSI e assim exportarmos a LUN:

# yum install scsi-target-utils -y

Para que as configurações sejam persistentes, devemos por na inicialização do S.O. e iniciar o serviço:

# service tgtd start
Starting SCSI target daemon:   [  OK  ]

# chkconfig tgtd on

Vamos agora criar e configurar nosso IQN (Iscsi qualified name):

# tgtadm –lld iscsi –mode target –op new –tid 1 –targetname iqn.2014-05.com.exaple.iscsi:diskiscsi

Para validarmos se a criação foi com sucesso, utilizamos o seguinte comando:

# tgt-admin -s

Target 1: iqn.2014-05.com.exaple.iscsi:diskiscsi
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
    Account information:
    ACL information:

Até aqui já temos nosso servidor ISCSI com iqn criado, vamos agora disponibilizar nossa primeira LUN de número 1. E informamos qual dispositivo de bloco vai ser exportado:

# tgtadm –lld iscsi –mode logicalunit –op new –tid 1 –lun 1 –backing-store /dev/sdb

Para validarmos se a criação foi com sucesso, utilizamos o seguinte comando:

# tgt-admin -s

Target 1: iqn.2014-05.com.exaple.iscsi:diskiscsi
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags:
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 5369 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/sdb
            Backing store flags:
    Account information:
    ACL information:

Se você conseguiu chegar neste ponto, já temos ISCSI server levemente configurado e com LUN disponível para ser utilizado.

Configurar ACL para quais são os clientes que poderão utilizar “montar” este dispositivo. Neste caso, pegue os endereços de IP da máquina cliente. No meu caso, minha máquina cliente tem os seguintes IPs:

# hostname -I
10.0.2.5
192.168.56.102

Na máquina storage, vamos criar as ACLs para estes IPs utilizando o comando abaixo:

# tgtadm –lld iscsi –mode target –op bind –tid 1 –initiator-address 10.0.2.5
# tgtadm –lld iscsi –mode target –op bind –tid 1 –initiator-address 192.168.56.102

Para confirmar as modificações, utilize o comando já conhecido:

# tgt-admin -s

E confirme se na parte das ACLs já aparece quais são os IPs que vão poder montar estar unidade.

Liberação do firewall para poder receber esta conexão pelo cliente:

# iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED –dport 3260 -j ACCEPT
# iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED –dport 3260 -j ACCEPT
# iptables-save > /etc/sysconfig/iptables

Para finalizar o ISCSI, salve as configurações realizadas no arquivo de configuração:

# tgt-admin –dump > /etc/tgt/targets.conf
# cat /etc/tgt/targets.conf

default-driver iscsi

<target iqn.2014-05.com.exaple.iscsi:diskiscsi>
backing-store /dev/sdb
initiator-address 10.0.2.5
initiator-address 192.168.56.102
</target>

 

CONFIGURAR ISCSI CLIENT E MULTIPATH

 

Na máquina cliente, note que temos apenas um disco disponível no host:

# ls /dev/sd?
/dev/sda

Para que possamos importar os volumes expostos pelo ISCSI e configurar o multipath, devemos instalar os pacotes na máquina cliente:

# yum install iscsi-initiator-utils device-mapper-multipath -y

Após instalação do pacotes, vamos então mapear o volume remoto disponível pelo storage. Primeiramente, vamos solicitar à máquina storage que envie os volumes disponíveis (Targets):

* Lembrando que devemos fazer esta requisição pelas duas redes 10 e 192.

# iscsiadm -m discovery -t st -p 192.168.56.101
192.168.56.101:3260,1 iqn.2014-05.com.exaple.iscsi:diskiscsi

# iscsiadm -m discovery -t st -p 10.0.2.4
10.0.2.4:3260,1 iqn.2014-05.com.exaple.iscsi:diskiscsi

Descoberto as LUN’s disponíveis, vamos então mapear este volume:

* Note que quando pedimos para que seja mapeado o volume ISCSI, o próprio deamon do ISCSI utiliza os dois “caminhos”

# iscsiadm -m node -T iqn.2014-05.com.exaple.iscsi:diskiscsi -l
Logging in to [iface: default, target: iqn.2014-05.com.exaple.iscsi:diskiscsi, portal: 192.168.56.101,3260] (multiple)
Logging in to [iface: default, target: iqn.2014-05.com.exaple.iscsi:diskiscsi, portal: 10.0.2.4,3260] (multiple)
Login to [iface: default, target: iqn.2014-05.com.exaple.iscsi:diskiscsi, portal: 192.168.56.101,3260] successful.
Login to [iface: default, target: iqn.2014-05.com.exaple.iscsi:diskiscsi, portal: 10.0.2.4,3260] successful.

Vocês lembram que tínhamos apenas um disco disponível no host Cliente? Bom, agora temos os volumes exportados do storage:

# ls /dev/sd?
/dev/sda
/dev/sdb
/dev/sdc

Para que as configurações sejam persistentes, coloque o serviço na inicialização:

# chkconfig iscsid on

CONFIGURAÇÃO DO MULTIPATH

Agora vamos iniciar a configuração do multipath. Primeiramente, copie o modelo de arquivo de configuração da documentação para o “/etc”:

# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc

Vamos editar o arquivo. Feita configurações simples no arquivo (fique à vontade para explorar todos os recursos: alias, blacklist etc):

defaults {
user_friendly_names    no
getuid_callout   “/lib/udev/scsi_id –replace-whitespace –whitelisted –device=/dev/%n”
}

Reiniciando o serviço do multipath e colocando o mesmo na inicialização:

# /etc/init.d/multipathd restart ; chkconfig multipathd on

Feito isso, podemos agora manusear o dispositivo. Crie uma partição com 2 GB, utilizando filesystem ext4:

# fdisk /dev/mapper/1IET_00010001

Se por algum motivo, após criar a partição não for reconhecido como o exemplo abaixo, execute os comandos:

# partprobe
E:
# multipath -r

O comando “multipath -r” é comum ser utilizado quando esta mesma LUN é entregue a mais de uma máquina em um cluster, por exemplo.

# mkfs -t ext4 /dev/mapper/1IET_00010001p1

 

TESTANDO OS SERVIÇOS

 

Adicionado os serviços na inicialização do host e configurado, vamos iniciar o teste:

1. Monte a partição criada no /mnt:

# mount /dev/mapper/1IET_00010001p1 /mnt

2. Crie um arquivo dentro do /mnt:

# > /mnt/arq1

3. Desative na máquina cliente a interface da rede 10.x.x.x: ifdown, dhclient -r …

4. Tente criar outros arquivos:

# touch teste{1..100}

5. Volte à interface rede 10 e desative a rede 192.

6. Tente criar outro arquivo.

Todos os arquivos foram criados, mesmo com uma das interfaces baixadas.

Rolar para cima