Hvordan sette opp iSCSI Server (Target) og Client (initiator) på Debian 9


I datasenterverdenen har Storage Area Networks (SAN) med stor kapasitet blitt minimumsstandarden. Ettersom skyleverandører og virtualisering også fortsetter å ha massiv innvirkning i teknologiverdenen, har behovet for enda mer SAN-lagringsplass blitt tydelig.

Det meste av SAN-maskinvare består av en minimalistisk kontroller (eller sett med kontrollere) og en stor samling av høykapasitetsstasjoner, alle konfigurert for å støtte store mengder datatilgjengelighet og integritet.

Mange av disse spesialiserte produktene er laget av store navnleverandører som Netapp, Dell Equalogic, HP Storageworks eller EMC og har prislapper knyttet til seg som bare de største bedriftene har råd til.

Realistisk sett er disse enhetene ikke annet enn store harddiskarrayer med en kontroller som gir plassen til disse harddiskene ut til nettverksklienter. Mange teknologier har eksistert gjennom årene som gir denne funksjonaliteten eller lignende funksjonalitet til en betydelig billigere pris.

Debian GNU/Linux-distribusjonen gir pakker som lar et Debian-system tjene formålet med en SAN-lagringsenhet på bedriftsnivå til en brøkdel av prisen! Dette lar alle fra grunnleggende hjemmebrukere eller store datasentre få fordelene med SAN-lagring uten å måtte bruke en formue på en leverandørens proprietære løsning.

Denne artikkelen vil se på hvordan et Debian 9 (Stretch)-system kan settes opp for å betjene diskplass ved å bruke et system kjent som Internet Small Computer Systems Interface eller iSCSI for kort. iSCSI er en Internet Protocol (IP)-basert standard for å gi blokk (harddisk) lagring til andre systemer. iSCSI fungerer i en klientservermodell, men bruker forskjellige navn for å skille klienten fra serveren.

I iSCSI-terminologi er serveren som betjener 'diskplass' kjent som et iSCSI 'Target' og systemet som ber om/bruker diskplass er kjent som iSCSI 'Initiator'. Så med andre ord, en 'initiator' ber om blokklagring fra et 'mål'.

Denne veiledningen vil gå gjennom et grunnleggende oppsett som involverer en enkel iSCSI-server (mål) og klient (initiator) som begge kjører 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

Nettverket kan sees som nedenfor:

Debian iSCSI-målkonfigurasjon

I iSCSI-verdenen regnes målet som verten som inneholder lagringsenhetene som skal brukes av initiativtakeren.

I denne artikkelen brukes serveren med IP-en 192.168.56.101 som mål. Alle konfigurasjoner vil bli gjort på den verten for denne delen.

Det første trinnet er installasjonen av de nødvendige pakkene for å tillate Debian-systemet å betjene iSCSI-mål. Denne programvarepakken er kjent som Target Framework (TGT).

Det andre elementet som brukes i denne veiledningen er verktøyene for logisk volumstyring (LVM), da logiske volumer (LVs) vil bli brukt som lagringsstøtte for iSCSI-målet.

Begge pakkene kan installeres med følgende kommandoer.

# apt-get update
# apt-get install tgt lvm2

Når pakkene er installert, vil LVM bli brukt til å klargjøre harddiskene på målet for bruk som en iSCSI LUN. Den første kommandoen brukes til å forberede diskene for inkludering i et LVM-oppsett. Pass på å endre kommandoen etter behov for forskjellige scenarier!

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

Når diskene er klargjort med kommandoen ovenfor 'pvcreate', er det på tide å lage en volumgruppe av disse spesielle diskene. Volumgruppen er nødvendig for å opprette de logiske volumene som vil fungere som iSCSI-lagring senere.

For å opprette en volumgruppe, er 'vgcreate'-kommandoen nødvendig.

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

Legg merke til i utdataene ovenfor at systemet svarer at volumgruppen ble opprettet, men det er alltid en god idé å dobbeltsjekke som vist ovenfor med 'vgs'-kommandoen. Kapasiteten til denne volumgruppen er bare 9,99 GB. Selv om dette er en spesielt liten volumgruppe, vil prosessen være den samme for disker med større kapasitet!

Det neste trinnet er opprettelsen av det logiske volumet som vil fungere som disken til iSCSI-klienten (initiator). For dette eksemplet vil hele volumgruppen bli brukt, men det er ikke nødvendig.

Det logiske volumet vil bli opprettet ved å bruke 'lvcreate'-kommandoen.

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

Ovennevnte 'lvcreate'-kommando kan være litt forvirrende ved første øyekast, men nedbrytningen er som sådan:

  • lvcreate – Kommando som brukes til å lage det logiske volumet.
  • -l 100 %GRATIS – Lag det logiske volumet ved å bruke all volumgruppens ledige plass.
  • -n tecmint_lun1 – Navnet på det logiske volumet som skal opprettes.
  • tecmint_iscsi – Navnet på volumgruppen for å opprette det logiske volumet i.

Når det logiske volumet er opprettet, er det på tide å lage den faktiske LUN (Logical Unit Number). LUN vil være lagringsenheten som initiativtakeren vil koble til og bruke senere.

Å lage en LUN er veldig enkel og krever bare noen få trinn. Det første trinnet vil være å lage konfigurasjonsfilen. Denne filen vil ligge i '/etc/tgt/conf.d'-katalogen og for denne artikkelen vil den hete 'TecMint_iscsi.conf'.

For å lage denne filen bruk et tekstredigeringsprogram.

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

I denne filen vil all nødvendig konfigurasjonsinformasjon for denne LUN bli konfigurert. Det er mange alternativer som kan plasseres i denne filen, men foreløpig vil en grunnleggende LUN med gjensidig Challenge Handshake Authentication Protocol (CHAP) bli konfigurert.

LUNs definisjon vil eksistere mellom to mål-utsagn. For flere parametere som kan gå i målsetningen, gå gjennom manualsiden for 'targets.conf'-filen ved å utstede '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>

Det er mye som skjer ovenfor. En rask forklaring kan være nyttig for de fleste.

  • Den første linjen starter den spesielle iSCSI LUN-konfigurasjonen. I dette tilfellet er LUN merket 'iqn.2018-02.linux-console.net:lun1'. 'iqn'-delen indikerer at dette vil være et iSCSI-kvalifisert navn. 2018-02 er en vilkårlig valgt datokombinasjon. 'linux-console.net' er domenet som denne spesielle LUN tilhører. Til slutt brukes 'lun1' som navnet på dette bestemte målet.
  • Den andre linjen ovenfor illustrerer en kommentar. Kommentarer kan finnes i målkonfigurasjonsfilene og må innledes med et '#'-symbol.
  • Den tredje linjen er der den faktiske lagringsplassen som vil bli brukt av initiativtakeren, finnes. I dette tilfellet vil lagringsstøtten være det logiske volumet som ble opprettet tidligere i veiledningen.
  • Den fjerde linjen er IP-adressen som forventes fra initiativtakeren. Selv om dette ikke er et nødvendig konfigurasjonselement, kan det bidra til å øke sikkerheten.
  • Den femte linjen er det innkommende brukernavnet/passordet. På samme måte som initiatoradressen ovenfor, er heller ikke denne parameteren nødvendig, men kan bidra til å sikre LUN. Siden denne veiledningen også dekker iSCSI mutual CHAP, er denne parameteren nødvendig. Denne linjen angir brukernavnet og passordet som målet vil forvente fra initiativtakeren for å koble til denne LUN.
  • Den sjette linjen er brukernavnet/passordet som målet vil gi til initiativtakeren for å tillate gjensidig CHAP-autentisering. Normalt er ikke denne parameteren nødvendig, men denne artikkelen dekker gjensidig CHAP-autentisering, så denne parameteren er påkrevd.
  • Den siste linjen er den avsluttende setningen for måldefinisjonen. Vær oppmerksom på den avsluttende skråstreken foran søkeordmålet!

Når de riktige konfigurasjonene for LUN er skrevet ut, lagrer du endringene og avslutter tekstredigering. Hvis du bruker nano, trykk ctrl+o for å lagre og trykk deretter ctrl+x for å avslutte nano.

Når konfigurasjonsfilen er opprettet, bør tgt-tjenesten startes på nytt slik at tgt er klar over de nye målene og den tilhørende konfigurasjonen.

Dette kan gjøres med en av følgende kommandoer og er avhengig av init-systemet som er i bruk.

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

Når tgt har blitt startet på nytt, er det viktig å kontrollere at iSCSI-målet blir gjort tilgjengelig i henhold til konfigurasjonsfilen som er opprettet.

Dette kan oppnås med 'tgtadm'-kommandoen.

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

Dette avslutter konfigurasjonen av målet. Den neste delen vil arbeide gjennom konfigurasjonen av initiativtakeren.

Debian iSCSI-initiatorkonfigurasjon

Det neste trinnet i bruk av det tidligere konfigurerte iSCSI-målet er konfigurasjonen av iSCSI-initiatoren.

En annen XenServer/ESXi eller andre distribusjoner som Red Hat, Debian eller Ubuntu.

Det første trinnet i denne prosessen for denne Debian-initiatoren er installasjonen av de riktige pakkene for iSCSI.

# apt-get update
# apt-get install open-iscsi

Når apt har fullført konfigurasjonen av open-iscsi-pakkene, kan iSCSI-initiatorkonfigurasjonen begynne. Det første trinnet vil være å kommunisere med målet for å få den første konfigurasjonsinformasjonen for målet forberedt.

# iscsiadm -m discovery -t st -p 192.168.56.101

Når denne kommandoen kjører, vil den svare tilbake med navnet på lunen som er konfigurert tidligere for denne spesielle verten. Kommandoen ovenfor vil også generere to filer for den nylig oppdagede LUN-informasjonen.

Nå må filen som er opprettet for denne noden ha CHAP-informasjonen konfigurert for at dette iSCSI-målet faktisk skal være tilgjengelig for initiativtakeren.

Teknisk sett kan denne informasjonen settes opp for hele systemet som helhet, men i tilfelle at en vert kobler til forskjellige LUN-er med forskjellig påloggingsinformasjon, kan å plassere disse påloggingsopplysningene i den spesifikke nodekonfigurasjonsfilen redusere eventuelle problemer.

Nodekonfigurasjonsfilen vil eksistere i katalogen '/etc/iscsi/nodes/' og vil ha en katalog per LUN tilgjengelig. Når det gjelder denne artikkelen (merk at stier vil endres hvis navn/IP-adresser endres).

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

For å jobbe med denne filen kan en hvilken som helst tekstredigerer brukes.

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

Innenfor denne filen vil det være flere allerede konfigurerte alternativer for det respektive målet som ble bestemt under iscsiadm-kommandoen som ble kjørt tidligere.

Siden dette bestemte Debian-mål/initiator-oppsettet bruker gjensidig CHAP, må noen flere alternativer endres og legges til denne filen og deretter utføres en pålogging til iSCSI-målet.

Endringene i denne filen er:

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

Alternativene ovenfor vil tillate at dette målet autentiseres overfor initiativtakeren, så vel som at initiativtakeren kan autentisere seg overfor målet.

Det er et annet alternativ i denne filen som kanskje må endres avhengig av administratorens preferanser, og det er parameteren 'node.startup'.

Hvis du følger denne veiledningen, vil 'node.startup'-alternativet settes til 'manuell' på dette tidspunktet. Dette er kanskje ikke ønsket. Hvis administratoren ønsker å ha iSCSI-målet tilkoblet når systemet starter opp, endre 'manual' til 'automatic' som sådan:

node.startup = automatic

Når endringene ovenfor er gjort, lagre filen og avslutt. På dette tidspunktet må open-iscsi initiator-tjenesten startes på nytt for å lese disse nye endringene og koble til iSCSI-målet.

Dette kan oppnås med en av følgende kommandoer avhengig av init-systemet som brukes.

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

Legg merke til i den grønne boksen ovenfor at iSCSI-initiatoren var i stand til å logge på målet. For ytterligere å bekrefte at iSCSI-målet faktisk er tilgjengelig for initiativtakeren, kan vi sjekke systemet for ekstra diskstasjoner som er tilgjengelige ved å bruke 'lsblk'-kommandoen og sjekke utdataene for ekstra stasjoner.

# lsblk

Den andre kommandoen som kan brukes på initiativtakeren for å bekrefte en tilkobling til målet er 'iscsiadm' som sådan:

# iscsiadm -m session

Det siste stedet for å bekrefte en tilkobling vil være på selve målet ved å bruke 'tgtadm'-kommandoen for å liste eventuelle iSCSI-tilkoblinger.

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

Fra dette tidspunktet kan den nylig tilkoblede iSCSI-enheten brukes på samme måte som enhver vanlig tilkoblet disk! Partisjonering, filsystemoppretting, montering og/eller vedvarende montering kan alle håndteres normalt.

En stor forsiktighet du bør være oppmerksom på med iSCSI-enheter er at hvis iSCSI-målet inneholder viktige filsystemer som er nødvendige når initiatoren starter opp, sørg for å bruke '_netdev'-oppføringen i '/etc/fstab'-filen for å sikre at iSCSI-en enheten er tilkoblet før systemet fortsetter å starte opp!