Diskless vékonykliensek bootolása iSCSI targetről, konfiguráció
Tartalomjegyzék[elrejtés] |
1 iSCSI: Internet Small Computer System Interface
IP-alapú hálózati kommunikációs szabvány adattárak (storage-ok) összeköttetésére. Lehetővé teszi, hogy különböző számítógépek hálózaton keresztül elérhessék és kezeljék a fizikailag más helyen lévő központosított adattárakat. Adattár alatt fizikai merevlemezek csoportját értem, például van valakinek a szerverszobájában egy Sun J4400-as storage tömbje, ami 24 db SATA II-es merevlemezt tartalmaz. Ez a SCSI target.
A kliens (initiator) SCSI parancsokat (CDB) küld IP-hálózaton keresztül a SCSI storage-nak (targetnek). A CDB (Command Descriptor Block), a kliens által küldött parancs, mely tartalmazza a Logical Unit Number-t (LUN), a logikai egység számát. Ez jelöli a külön címezhető logikai SCSI eszközt, amely a targetnek (fizikai SCSI eszköznek) a része.
- Létezik szoftveres initiator, amely az őt futtató kernel és hálózati kártya támogatásával SCSI eszközt emulál a számítógép számára
- Létezik hardveres initiator, amely egy külön hardver a számítógépben, mely az azon futó firmware segítségével tehermentesíti a szervert a TCP-kommunikációból származó overhead alól.
Előnyök:
- adattár-centralizáció: a háttértárak központosítva egy helyen vannak, nem pedig szétszórva a munkaállomásokon.
- a hálózaton keresztül könnyen kioszthatók a merevlemezek, új hardverkötet kiosztása hardverváltoztatás és kábelezés nélkül
- Létezik olyan megoldás, hogy az egész adattárból van még egy, egy félreeső helyen, amely melegtartalékként üzemelhet, ha az egyik adattár felé valamilyen katasztrófa miatt nem sikerülne kapcsolatot létesíteni.
- Hálózati bootolás (pl.: diskless kliensek számára, lásd alább)
- olcsó megoldás: nem kell dedikált optikai szálas (Fibre Channel) hálózat, standard hálózaton működik
- távoli elérhetőség…
1.1 iSCSI target létrehozása Solarison
A szerveren futó targetmenedzselő program (daemon) számára meg kell adni egy könyvtárat, melyben a daemon a targethez kapcsolódó információkat tárolja. Ha létrehozunk egy logikai kötetet, akkor a daemon létrehozza a logikai kötethez tartozó metaadatokat tároló LUN fájlt az alábbi parancsban megadott könyvtárban.
iscsitadm modify admin -d <directory>
Target létrehozása:
iscsitadm create target ~--size 2g vol10
Az első logikai egység (LU) után a többi is ugyanígy létrehozgató megadva az egység sorszámát: --lun <number>.
A logikai egység elkészültéig az egység az operációs rendszer számára offline állapotban van. Ha az egység létrejött, akkor a daemon küld egy Inventory Change üzenetet a Solaris initiatornak, mely az egységet offline-ról online állapotra állítja, és megkezdheti a SCSI kérések küldését a target felé.
1.2 Információ lekérése az elkészült targetről:
Az alábbi kimenetben a vol0 targethez kapcsolódó adatokat láthatjuk:
- Target neve
- Target Portal Group Tags (TPGT): külön specifikálni lehet, hogy a target mely intefészekről legyen elérhető. Például külön lehet választani a publikus és privát hálózat által elérhető targeteket.
- Logikai egység száma (LUN): több logikai egysége is lehet a targetnek. Jelen esetben csak egy van, a 0-s számú.
- Global Unique ID (GUID): A Target Portalhoz (IP cím+port, amiről a target elérhető) tartozó MAC címből és timestampből előállított egyedi azonosítója a targetnek. A GUID az initiator oldalon a target azonosítója.
- Gyártó neve (VID).
- Termék neve (PID).
- Type: a Solaris iSCSI Target implementáció szerint 4 típus állítható be: disk, tape, osd, raw (bővebben).
- Méret
- Állapot
# iscsitadm list target -v vol0 Target: vol0 iSCSI Name: iqn.1986-03.com.sun:01:00093d12170c.434c5250.vol0 ACL list: TPGT list: LUN information: LUN: 0 GUID: 010000093d12170c00002a00434c5251 VID: SUN PID: SOLARIS Type: raw Size: 2.0G Status: online
1.3 ZFS kötet megosztása iSCSI targetként
ZFS kötet létrehozása:
zfs create -s -V 50gb testpool/iscsivol
A létező ZFS kötet iSCSI targetként való megosztásához mindössze ennyit kell tenni:
zfs set shareiscsi=on testpool/iscsivol
2 TFTP
- Trivial File Transfer Protocol
- egyszerű megoldás
- UDP-t használ, 69-es porton
- kliens küld egy RRQ vagy WRQ parancsot (read/write request) a szervernek a 69-es porton, ez tartalmazza a fájlnevet és az átviteli módot
- a szerver ACK-kal válaszol a WRQ-ra vagy ha RRQ érkezett, akkor küld egy adatcsomagot (DATA) a kliensnek
- a kliens minden teljes méretű (512 byte) adatcsomagra ACK-kal válaszol
- az utolsó adatcsomagnak a maximális csomagméretnél kisebbnek kell lennie; ez jelzi, hogy ez a csomag volt az utolsó. Ha az átvivendő fájl mérete éppen a blokkméret egész számú többszöröse, akkor egy 0 byte-os csomagot küld a szerver.
- Ha az ACK nem érkezik meg, akkor az adatot újraküldik.
3 PXE
- Olyan környezet, amelynek segítségével kliensek operációs rendszerek telepítő image-eit, vagy akár telepített operációs rendszert tudnak bootolni hálózaton keresztül, adattárakról.
- Szükség van hozzá egy bootszerverre, ami DHCP és TFTP segítségével a kezdeti bootstrap-program és további fájlok letöltését teszi lehetővé.
3.1 A PXE-s bootfolyamat
A proxy DHCP megkapja a kliens DHCPDISCOVER kérését, és erre egy broadcast DHCPOFFER-rel válaszol PXE-specifikus adatokkal kiegészítve (68-as UDP portra) a hálózaton belülre. Broadcast, mert nem tudja a kliens IP-címét.
DHCPOFFER tartalma:
- PXE Discovery Control mező
- PXE Boot Server Type-ok IP címei
- PXE Bootmenü
- PXE Bootprompt (felhasználót értesíti, hogy nyomjon F8-at a bootmenühöz)
- timeout
A Boot Server megkapja a kiválasztott PXE Boot Server Type-ot és a PXE Boot Server Layert a klienstől DHCPREQUEST formájában (a szerver daemonja több boot server type-ot is futtathat).
A Boot server DHCPACK csomaggal válaszol, amely tartalmazza:
- a NBP (Network Bootstrap Program) elérési útját (TFTP)
- PXE Boot Server Type-ot, PXE Boot Layert
- multicast TFTP beállításait, ha ezt a megoldást alkalmazzák
Network bootstrap program:
A kliens (ha kell, ellenőrzést követően)a DHCPACK-ban megkapott elérési útról letölti a Network Bootstrap Programot a RAM-jába, és végrehajtja azt.
3.2 PXE konfigurálása
DHCP szerver beállítása
Telepítés:
sudo aptitude install dhcp3-server
A DHCP szerver fogja kiosztani az IP-címet a klienseknek, és a tftp szerver elérhetőségét. Ezért módosítani kell a DHCP szerver konfigurációját:
sudo vim /etc/dhcp.conf
Adjuk meg a TFTP szerver címét (ugyanaz a gép is lehet) és a pxelinux.0 fájl elérhetőségét, amit el akarunk küldeni a klienseknek
next-server 192.168.0.254 filename "/tftpboot/pxelinux.0";
Ezután újra kell indítani a DHCP szervert:
sudo /etc/init.d/dhcpd restart
TFTP boot image elhelyezése a TFTP szerveren
sudo mkdir /tftpboot/ubuntu9.10 sudo mount –o loop CD.iso /mnt sudo rsync –aHS /mnt/. /var/www/html/ubuntu9.10/. sudo cp /var/www/html/ubuntu9.10/install/netboot/ubuntu-installer/i386/linux /tftpboot/ubuntu9.10 sudo cp /var/www/html/ubuntu9.10/install/netboot/ubuntu-installer/i386/linux /tftpboot/ubuntu9.10 sudo cp /var/www/html/ubuntu9.10/install/netboot/ubuntu-installer/i386/initrd.gz /tftpboot/ubuntu9.10
pxelinux.cfg/default konfigurálása
sudo vim /tftpboot/pxelinux.cfg/default
Ebbe a fájlba írhatjuk bele, hogy a user amikor a boot.msg fájl alapján látott boot menüből kiválasztja a telepítendő operációs rendszert, hol találja meg a hozzá tartozó initrd-t, amit a kliensnek le kell töltenie az initial ram diskjére:
default 0 prompt 1 display msgs/boot.msg # begin list of available boot options label ubuntu9.10 kernel ubuntu9.10/linux append initrd=ubuntu9.10/initrd.gz
pxelinux.cfg/msgs/boot.msg konfigurálás
Jelen esetben elég ennyit beleírni:
ubuntu9.10 - Select this to install Ubuntu 9.10 over network
TFTP server engedélyezése
A TFTP szerver engedélyezéséhez a következő sornak kell lennie a /etc/inetd.conf fájlban
tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot
Telepítés
Ezután az egyik klienst elindítjuk, megjelenik a boot menü, kiválasztjuk, hogy telepíteni akarjuk a Ubuntu9.10-et. Az Ubuntu9.10 telepítője felajánlja, hogy iSCSI targetre akarjuk-e telepíteni, válasszuk ki azt. A rendszer így feltelepül az iSCSI targetre.
Azonban mi nem azt akarjuk elérni, hogy hálózaton keresztül fel tudjuk telepíteni a operációs rendszert a kliensekre, hanem azt, hogy a diskless kliensek a tftp szerveren keresztül az iSCSI targetre feltelepített rendszert indítsák el.
Ehhez a iSCSI targetre települt kliens initrd-jét (initrd-ng3.img) és kernelét át kell másolni a tftp szerverre, majd módosítani a pxelinux.cfg fájlt kódrészlethez hasonlóan
DEFAULT vesamenu.c32 PROMPT 0 MENU TITLE PXE Network boot TIMEOUT 30 LABEL 1 MENU LABEL ^Ubuntu Linux 9.10 MENU DEFAULT KERNEL 10.10.0.23::/vmlinuz-2.6.31-14-server APPEND ip=bootp root=/dev/sda1 iscsi_initiator=iqn.ubuntu.istgt iscsi_target_name=iqn.2007-09.jp.ne.peach.istgt:disk0 iscsi_target_ip=10.10.0.23 iscsi_target_group=1 iscsi_target_port=3260 initrd=initrd-ng3.img
E szerint a kliens DHCP-n keresztül lekéri az IP-jét, a 10.10.0.23-mon éri el az iSCSI targetet, és betölti az initrd-ng3.img fájlt az initial ram diskjébe.