Zoeken op website

Hoe iSCSI-server (doel) en client (initiator) in te stellen op Debian 9


In de wereld van datacenters zijn Storage Area Networks (SAN) met grote capaciteit de minimumstandaard geworden. Nu cloudproviders en virtualisatie ook een enorme impact blijven hebben in de technologiewereld, is de behoefte aan nog meer SAN-opslagruimte duidelijk geworden.

De meeste SAN-hardware bestaat uit een minimalistische controller (of set controllers) en een grote verzameling schijven met hoge capaciteit, allemaal geconfigureerd om grote hoeveelheden gegevensbeschikbaarheid en -integriteit te ondersteunen.

Veel van deze gespecialiseerde producten worden gemaakt door grote leveranciers zoals Netapp, Dell Equalogic, HP Storageworks of EMC en er zijn prijskaartjes aan verbonden die alleen de grootste ondernemingen zich kunnen veroorloven.

Realistisch gezien zijn deze apparaten niets anders dan grote harde-schijfarrays met een controller die de ruimte op die harde schijven beschikbaar stelt aan netwerkclients. Er zijn in de loop der jaren veel technologieën geweest die deze functionaliteit of soortgelijke functionaliteit bieden tegen een aanzienlijk goedkoper prijsniveau.

De Debian GNU/Linux-distributie biedt pakketten waarmee een Debian-systeem kan dienen als een SAN-opslagapparaat op bedrijfsniveau, tegen slechts een fractie van de kosten! Hierdoor kan iedereen, van eenvoudige thuisgebruikers tot grote datacenters, profiteren van de voordelen van SAN-opslag zonder een fortuin uit te geven aan een eigen oplossing van een leverancier.

In dit artikel wordt bekeken hoe een Debian 9 (Stretch)-systeem kan worden ingesteld om schijfruimte te benutten met behulp van een systeem dat bekend staat als Internet Small Computer Systems Interface of kortweg iSCSI. iSCSI is een op Internet Protocol (IP) gebaseerde standaard voor het leveren van blokopslag (harde schijf) aan andere systemen. iSCSI werkt in een client-servermodel, maar gebruikt verschillende namen om de client van de server te onderscheiden.

In iSCSI-terminologie staat de server die de 'schijfruimte' bedient bekend als een iSCSI 'Doel' en het systeem dat de aanvraag indient /het gebruik van de schijfruimte staat bekend als de iSCSI 'Initiator'. Met andere woorden: een ‘Initiator’ vraagt om blokopslag van een ‘Doel‘.

Omgeving instellen

In deze handleiding wordt de basisinstallatie uitgelegd, waarbij gebruik wordt gemaakt van een eenvoudige iSCSI-server (doel) en client (initiator), beide met 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

Het netwerk kan als volgt worden bekeken:

Debian iSCSI-doelconfiguratie

In de iSCSI wereld wordt het doel beschouwd als de host die de opslagapparaten bevat die door de initiator moeten worden gebruikt.

In dit artikel wordt de server met het IP-adres 192.168.56.101 gebruikt als doel. Alle configuraties worden voor deze sectie op die host uitgevoerd.

De eerste stap is de installatie van de noodzakelijke pakketten zodat het Debian-systeem iSCSI-doelen kan bedienen. Dit softwarepakket staat bekend als Target Framework (TGT).

Het andere item dat voor deze handleiding wordt gebruikt, zijn de tools voor Logisch volumebeheer (LVM) als Logische volumes (LV's).) zal worden gebruikt als opslagondersteuning voor het iSCSI-doel.

Beide pakketten kunnen met de volgende opdrachten worden geïnstalleerd.


apt-get update
apt-get install tgt lvm2

Zodra de pakketten zijn geïnstalleerd, wordt LVM gebruikt om de harde schijven op het doel voor te bereiden voor gebruik als een iSCSI LUN. Het eerste commando wordt gebruikt om de schijven voor te bereiden voor opname in een LVM-installatie. Zorg ervoor dat u de opdracht indien nodig aanpast voor verschillende scenario's!


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

Zodra de schijven zijn voorbereid met het bovenstaande ‘pvcreate’ commando, is het tijd om een volumegroep te maken van deze specifieke schijven. De volumegroep is vereist om de Logische volumes te creëren die later zullen fungeren als de iSCSI-opslag.

Om een volumegroep aan te maken is het commando ‘vgcreate‘ nodig.


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

Merk op in de uitvoer hierboven dat het systeem antwoordt dat de Volumegroep is aangemaakt, maar het is altijd een goed idee om dit nogmaals te controleren, zoals hierboven te zien is, met de opdracht ‘vgs’. De capaciteit van deze volumegroep bedraagt slechts 9,99 GB. Hoewel dit een bijzonder kleine volumegroep is, zou het proces hetzelfde zijn voor schijven met een grotere capaciteit!

De volgende stap is het maken van het logische volume dat zal fungeren als schijf voor de iSCSI-client (initiator). Voor dit voorbeeld wordt de gehele volumegroep gebruikt, maar dit is niet noodzakelijk.

Het logische volume wordt aangemaakt met behulp van de opdracht ‘lvcreate’.


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

Het bovenstaande ‘lvcreate’ commando kan op het eerste gezicht een beetje verwarrend zijn, maar de samenvatting is als volgt:

  • lvcreate – Commando dat wordt gebruikt om het logische volume te maken.
  • -l 100%GRATIS – Creëer het logische volume en gebruik alle vrije ruimte van de volumegroep.
  • -n tecmint_lun1 – De naam van het logische volume dat moet worden gemaakt.
  • tecmint_iscsi – De naam van de volumegroep waarin het logische volume moet worden gemaakt.

Zodra het logische volume is gemaakt, is het tijd om de daadwerkelijke LUN (Logical Unit Number) te maken. De LUN zal het opslagapparaat zijn waarmee de initiator verbinding zal maken en later zal gebruiken.

Het maken van een LUN is heel eenvoudig en vereist slechts een paar stappen. De eerste stap is het maken van het configuratiebestand. Dit bestand zal zich in de map ‘/etc/tgt/conf.d’ bevinden en voor dit artikel zal het ‘TecMint_iscsi.conf‘ heten.

Gebruik een teksteditor om dit bestand te maken.


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

Binnen dit bestand wordt alle benodigde configuratie-informatie voor deze LUN geconfigureerd. Er zijn veel opties die in dit bestand kunnen worden geplaatst, maar voor nu is een standaard LUN met wederzijds Challenge Handshake Authentication Protocol (CHAP) voldoende geconfigureerd zijn.

De definitie van de LUN zal bestaan tussen twee ‘doel‘-instructies. Voor meer parameters die in de target-instructie kunnen worden opgenomen, raadpleegt u de handleidingpagina voor het bestand ‘targets.conf’ door ‘man 5 targets.conf‘ uit te voeren.


<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>

Er gebeurt veel hierboven. Een korte uitleg kan voor de meesten nuttig zijn.

  • De eerste regel begint met de specifieke iSCSI LUN-configuratie. In dit geval heeft de LUN het label ‘iqn.2018-02.linux-console.net:lun1‘. Het ‘iqn’ gedeelte geeft aan dat dit een iSCSI-gekwalificeerde naam zal zijn. De ‘2018-02‘ is een willekeurig gekozen datumcombinatie. ‘linux-console.net‘ is het domein waartoe deze specifieke LUN behoort. Ten slotte wordt de ‘lun1‘ gebruikt als de naam voor dit specifieke doel.
  • De tweede regel hierboven illustreert een opmerking. Opmerkingen kunnen voorkomen in de doelconfiguratiebestanden en moeten worden voorafgegaan door een ‘#‘ symbool.
  • Op de derde regel staat de daadwerkelijke opslagruimte die door de initiatiefnemer zal worden gebruikt. In dit geval is de opslagback-up het logische volume dat eerder in de handleiding is gemaakt.
  • De vierde regel is het IP-adres dat van de initiator wordt verwacht. Hoewel dit geen vereist configuratie-item is, kan het de beveiliging helpen vergroten.
  • De vijfde regel is de binnenkomende gebruikersnaam/wachtwoord. Net als het initiatoradres hierboven is deze parameter ook niet vereist, maar kan hij helpen de LUN te beveiligen. Omdat deze handleiding ook iSCSI wederzijds CHAP behandelt, is deze parameter vereist. Deze regel geeft de gebruikersnaam en het wachtwoord aan die het doel van de initiator verwacht om verbinding te maken met deze LUN.
  • De zesde regel is de gebruikersnaam/het wachtwoord dat het doel aan de initiator zal verstrekken om wederzijdse CHAP-authenticatie mogelijk te maken. Normaal gesproken is deze parameter niet vereist, maar dit artikel gaat over wederzijdse CHAP-authenticatie, dus deze parameter is vereist.
  • De laatste regel is de slotverklaring voor de doeldefinitie. Let op de afsluitende slash vóór het zoekwoorddoel!

Zodra de juiste configuraties voor de LUN zijn getypt, slaat u de wijzigingen op en sluit u de teksteditor af. Als je nano gebruikt, druk dan op ctrl+o om op te slaan en druk vervolgens op ctrl+x om nano af te sluiten.

Zodra het configuratiebestand is aangemaakt, moet de tgt service opnieuw worden opgestart, zodat tgt op de hoogte is van de nieuwe doelen en de bijbehorende configuratie.

Dit kan gedaan worden met een van de volgende commando's en is afhankelijk van het gebruikte init-systeem.


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

Zodra tgt opnieuw is opgestart, is het belangrijk om te controleren of het iSCSI-doel beschikbaar wordt gemaakt volgens het gemaakte configuratiebestand.

Dit kan worden bereikt met het commando ‘tgtadm’.


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

Hiermee is de configuratie van het doel voltooid. In het volgende gedeelte wordt de configuratie van de initiator behandeld.

Debian iSCSI Initiator-configuratie

De volgende stap bij het gebruik van het eerder geconfigureerde iSCSI-doel is de configuratie van de iSCSI-initiator.

In dit artikel zal een ander Debian 9-systeem als initiator worden gebruikt, maar elk systeem dat gebruik kan maken van het iSCSI-protocol kan verbinding maken met het eerder geconfigureerde doel; dit kunnen hypervisors zijn zoals XenServer/ESXi of andere distributies zoals Red Hat, Debian of Ubuntu.

De eerste stap in dit proces voor deze Debian-initiator is de installatie van de juiste pakketten voor iSCSI.


apt-get update
apt-get install open-iscsi

Zodra apt de configuratie van de open-iscsi pakketten heeft voltooid, kan de iSCSI initiator configuratie beginnen. De eerste stap is het communiceren met het doel om de initiële configuratie-informatie voor het doel gereed te krijgen.


iscsiadm -m discovery -t st -p 192.168.56.101

Wanneer deze opdracht wordt uitgevoerd, reageert deze met de naam van de lun die eerder voor deze specifieke host is geconfigureerd. De bovenstaande opdracht genereert ook twee bestanden voor de nieuw ontdekte LUN-informatie.

Nu moet in het bestand dat voor dit knooppunt is gemaakt de CHAP-informatie zijn geconfigureerd, zodat dit iSCSI-doel daadwerkelijk toegankelijk is voor de initiator.

Technisch gezien zou deze informatie kunnen worden ingesteld voor het hele systeem als geheel, maar in het geval dat een host verbinding maakt met verschillende LUN's met verschillende inloggegevens, kan het plaatsen van die inloggegevens in het specifieke knooppuntconfiguratiebestand eventuele problemen verminderen.

Het knooppuntconfiguratiebestand zal bestaan in de map ‘/etc/iscsi/nodes/’ en zal een map per LUN beschikbaar hebben. In het geval van dit artikel (houd er rekening mee dat paden veranderen als namen/IP-adressen worden gewijzigd).


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

Om met dit bestand te werken, kan elke teksteditor worden gebruikt.


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

Binnen dit bestand zullen er verschillende reeds geconfigureerde opties zijn voor het respectieve doel die werden bepaald tijdens de eerder uitgevoerde opdracht ‘iscsiadm’.

Aangezien deze specifieke Debian target/initiator-installatie gebruikmaakt van wederzijdse CHAP, moeten er nog enkele opties worden gewijzigd en aan dit bestand worden toegevoegd, waarna moet worden ingelogd op het iSCSI-doel uitgevoerd.

De wijzigingen in dit bestand zijn:


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

Met de bovenstaande opties kan dit doel zich authenticeren bij de initiator en kan de initiator zich authenticeren bij het doel >.

Er is nog een andere optie in dit specifieke bestand die mogelijk moet worden gewijzigd, afhankelijk van de voorkeuren van de beheerder, en dat is de parameter ‘node.startup’.

Als u deze handleiding volgt, wordt de optie ‘node.startup‘ op dit punt ingesteld op ‘handmatig‘. Dit is misschien niet gewenst. Als de beheerder het iSCSI-doel aangesloten wil hebben wanneer het systeem opstart, verander dan ‘handmatig‘ in ‘automatisch‘ als volgt:


node.startup = automatic

Zodra de bovenstaande wijzigingen zijn aangebracht, slaat u het bestand op en sluit u af. Op dit punt moet de service open-iscsi initiator opnieuw worden gestart om deze nieuwe wijzigingen te lezen en verbinding te maken met het iSCSI-doel.

Dit kan worden bereikt met een van de volgende opdrachten, afhankelijk van het gebruikte init-systeem.


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

In het groene vak hierboven ziet u dat de iSCSI-initiator zich kon aanmelden bij het doel. Om verder te bevestigen dat het iSCSI-doel inderdaad beschikbaar is voor de initiator, kunnen we het systeem controleren op extra schijfstations die beschikbaar zijn met behulp van de 'lsblk >' commando en controleer de uitvoer op extra schijven.


lsblk

Het andere commando dat op de initiator kan worden gebruikt om een verbinding met het doel te bevestigen is ‘iscsiadm‘ als zodanig:


iscsiadm -m session

De laatste plaats om een verbinding te bevestigen is op het doel zelf, met behulp van de opdracht ‘tgtadm’ om eventuele iSCSI-verbindingen weer te geven.


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

Vanaf dit punt kan het nieuw aangesloten iSCSI apparaat op dezelfde manier worden gebruikt als elke normaal aangesloten schijf! Partitioneren, het maken van bestandssystemen, mounten en/of persistent mounten kunnen allemaal normaal worden afgehandeld.

Eén grote waarschuwing waar u rekening mee moet houden bij iSCSI apparaten is dat als het iSCSI-doel belangrijke bestandssystemen bevat die nodig zijn tijdens het opstarten van de initiator, zorg ervoor dat om de vermelding '_netdev' in het bestand '/etc/fstab' te gebruiken om ervoor te zorgen dat het iSCSI-apparaat is aangesloten voordat het systeem doorgaat met opstarten!