A perzisztens adatkezelő rendszer tesztelése és demonstrálása a GRID környezetben A TESZT KÖRNYEZET KIALAKÍTÁSA 2 A TESZT PÉLDA LEÍRÁSA 2 A TESZTHEZ SZÜKSÉGES ELŐKÉSZÜLETEK 3 A TESZT FUTTATÁS KÉPERNYŐ KÉPE 4 FÜGGELÉK: A SHELL SCRIPTEK LISTÁJA 6
A teszt környezet kialakítása A javasolt megoldás lényege a Globus rendszerben alkalmazott GridFTP protokollban rejlő lehetőségek kihasználása, illetve kipróbálása a párhuzamos feldolgozás kiterjesztésére A javaslat szerint szerver oldali (párhuzamos) feldolgozás Globus GridFTP szerverének a SITE EXEC nevű utasításával valósítható meg Ez az utasítás a GridFTP-nek alapul szolgáló wuftpd szerver az FTP deníciónak megfelelő - eredetileg is implementált utasítása A teszteléshez tehát egy olyan Globus rendszerre volt szükség, amelyen a GridFTP szerver is installálva van Ezt a SZTAKI klaszter n0hpccsztakihu nevű gépe biztosította Ugyanakkor szükség volt egy Globus elérési és használati jogosultságokkal rendelkező felhasználóra, aki a javasolt utasításokat, lépéseket végrehajtja Az egyszerűség kedvéért ez a felhasználó szintén a fenti gép egyik usere volt Ez a - helyileg máshol levő user a cpq17ilabsztakihu nevű gépről ssh program segítségével távoli terminálként jelentkezett be a rendszerbe A teszt környezet logikai és zikai felépítése a következő: A logikai felépítés azt tükrözi, hogy a tesztben az egyes folyamatok hogyan kapcsolódnak egymáshoz (Egy Globus felhasználó a Globus rendszert a GridFTP segítségével éri el) GRID Globus rendszer GridFTP szerver GridFTP Globus User A zikai felépítés pedig azt mutatja meg, hogy a teszt során az egyes logikai elemek hol, melyik számítógépen helyezkednek el (Az egyes számítógépek nevét vastag betű jelöli) n0hpccsztakihu GridFTP szerver dtb Globus User ssh cpq17ilabsztakihu dtb Linux User A teszt példa leírása A teszt során olyan szerver oldali feldolgozást póbáltunk ki, amikor a szerverről adat olvasás történik Ilyenkor arra van lehetőség, hogy a szerveren tárolt adathalmazból a szerveren először kiválogassuk a a számunkra szükséges adatokat, ami után csak a szükséges adatokat kell áthozni a szerverből Ezt a következő egyszerű példával valósítottuk meg A szerver oldali adathalmaz egy olyan szöveg fájl, amelynek sorai a természetes számokat tartalmazzák emelkedő sorrendben Minden sorban csak egy szám szerepel, a sorok száma véges, azaz a számok csak egy adott felső határig növekednek (Ezeket a fájlokat egy tdgensh nevű shell scripttel lehet előállítani, amelyet a függelékben ismertetünk)
Például az 1024 számot (és sort) tartalmazó td1024txt nevű fájl felépítése a következő: 1 2 3 1024 A szerver oldali feldolgozás pedig az adathalmaz bizonyos sorainak kiválasztását jelenti A feldolgozást végző program szintén egy shell script, amely a paramétereként megadott fájl minden n sorát gyűjti ki, ahol az n szintén paraméterként adható meg (Ha az n paraméter hiányzik, akkor minden második sorát gyűjti ki) Az adathalmaz struktúrájának ismeretében azt lehet mondani, hogy a válogató program az n-nel osztható számokat tartalmazó sorokat gyűjti össze (A shell script neve tdselsh, amelyet szintén a függelékben ismertetünk) Például a tdselsh program egy hívása a következő: /tdselsh td1024txt 3 A program lefutása után az általa kigyűjtött fájl neve jelenik meg, ahol a fájlnév a megadott paraméterekből generálódik: td1024txtout3 A fenti fájl felépítése a következő: 3 6 9 1023 A teszthez szükséges előkészületek A teszthez nem kellett önálló Globust telepíteni, elég volt egy felhasználói hozzáférést (user account-ot) biztosítani a SZTAKI klaszteren futó Globus rendszerhez A felhasználó neve dtb volt Egy lényeges feladat volt, az úgynevezett feldolgozó program telepítése Mint a korábbiakból már ismert, a SITE EXEC utasítás - biztonsági okokból - csak egy adott könytárban levő programok futtatását teszi lehetővé Ebbe a /bin/ftp-exec nevű könyvtárba kellett a fentebb ismertett tdselsh nevű programot - a megfelelő jogosultságok megszerzése után bemásolni A feldolgozandó adathalmazt pedig a dtb nevű felhasználó saját könyvtárában helyeztük el, mert ehhez fér hozzá Mivel a SITE EXEC utasítással indított program root jogosultságokkal
rendelkezik, ezért tetszőleges könyvtárhoz hozzáférhet, ami azt jelenti, a megadott célra tetszőleges felhasználó használhatja Az eredményt pedig ugyanabba a könyvtárba készíti el, ahol az eredeti (feldolgozandó) fájl volt A teszt futtatás képernyő képe A következő szövegben a teszt során a képernyőre kiíródó sorokat más betűtípus jelöli Az ezzel a betűtípussal (Courier New) írt sorokat egybefüggő szövegként kell elképzelni, amelybe - nem a sor elején kezdődő - magyarázó sorokat szúrtunk be Bejelentkezés dtb néven a cpq17ilabsztakihu nevű gépről az n0hpccsztakihu nevű gépre [dtb@cpq17 dtb]$ ssh n0hpccsztakihu dtb@n0hpccsztakihu's password: Linux n0 2418 #4 SMP Thu May 2 17:04:01 CEST 2002 i686 unknown Last login: Mon Jan 13 14:45:26 2003 from cpq17ilabsztakihu A saját könyvtár kilistázása, amelyben látható a td1024txt nevű feldolgozandó adatfájl, illetve a korábbi futtatások eredményeképpen létrejött td1024txtout2 és td1024txtout8 eredmény dtb@n0:~$ ls dtb mentes scripts td1024txt td1024txtout2 td1024txtout8 A /bin/ftp-exec könyvtár listája mutatja, hogy a tdselsh nevű feldolgozó program a helyén van dtb@n0:~$ ls /bin/ftp-exec ls tdselsh A dtb nevű felhasználó bejelentkezése a Globus rendszer alá dtb@n0:~$ grid-proxy-init Your identity: /O=Grid/O=GridLab/CN=Balazs D Toth Enter GRID pass phrase for this identity: Creating proxy Done Your proxy is valid until Tue Jan 14 22:28:33 2003 A GridFTP szerverrel kapcsolatot teremtő gsincftp nevű FTP kliens program indítása, kapcsolat felvétel a szerverrel dtb@n0:~$ gsincftp n0 NcFTP 300 (March 20, 2000) by Mike Gleason (ncftp@ncftpcom) Connecting to 193224187129 n0hpccsztakihu FTP server (GridFTP Server 10 [GSI patch v05] wu- 261(2) Wed Apr 24 13:06:14 CDT 2002) ready Logging in User dtb logged in Logged in to n0hpccsztakihu A következő sorokban a SITE EXEC utasítás hívása és annak eredménye látható Az első sorban az ncftp /home/dtb > szövegrész a kliens program promptja, amely után az utasítás látható A második sort a szerver írja ki a program elindításakor, ami az indítási parancs
pontos mása A gömbölyű zárójelek közötti szöveget tartalmazó (itt negyedik) sort szintén a szerver irja ki akkor, amikor a program futása befejeződött A kettő között levő (itt egyetlen) sor(ok) a futtatott program standard outputra írt üzeneteit tartalmazz(a/ák) Két dolgot lehet meggyelni Egyrészt a program indításakor a már ismert paramétereket kell megadni, ahol az adathalmaz nevét a teljes elérési úttal célszerű szerepeltetni Másrészt látható, hogy a program válasza az eredményfájl neve ncftp /home/dtb > site exec tdselsh /home/dtb/td1024txt 3 tdselsh /home/dtb/td1024txt 3 /home/dtb/td1024txtout3 (end of 'tdselsh /home/dtb/td1024txt 3') Elköszönés a GridFTP szervertől ncftp /home/dtb > bye Thank you for using NcFTP Ask your system administrator to try NcFTPd Server! http://wwwncftpcom A saját könyvtár listázása annak ellenőrzésére, hogy valóban létrejött-e a várt eredményfájl dtb@n0:~$ ls dtb scripts td1024txtout2 td1024txtout8 mentes td1024txt td1024txtout3 Az eredményfájl tartalmának ellenőrzése a less nevű listázó program segítségével dtb@n0:~$ less td1024txtout3 A felhasználó kijelentkezése az n0hpccsztakihu nevű gépről dtb@n0:~$ exit logout Connection to n0hpccsztakihu closed [dtb@cpq17 dtb]$ A fenti példából egyetlen dolog hiányzott, az eredményfájlnak a dtb nevű felhasználó gépére való eljuttatása a GridFTP segítségével Mivel a felhasználó gépe és a szervert futtató gép azonos volt, erre nem volt szükség A tesztnek egyébként sem az adatok, fájlok másolásának a bemutatása volt a célja, hanem a szerver oldali feldolgozás egy lehetséges megvalósításának kipróbálása
Függelék: A shell scriptek listája A tdgensh nevű shell script listája: #!/bin/bash # Test data generation if [! -z $1 ] le=$1 le=testdatatxt if [! -z $2 ] last=$2 last=65535 # Target le name given # Last number given echo "\"$le\" is being generated " for i in `seq $last` do echo $i done > $le # The numbers 1-last(65535) exit 0 A tdselsh nevű shell script listája: #!/bin/bash # Test data generation if [! -z $1 ] # Target le name given le=$1 # At least lename needed echo "Usage: `basename $0` lename [selection]" exit 0 if [! -z $2 ] sel=$2 sel=2 # Last number given ople=$leout$sel # echo "\"$ople\" is being generated " # Temporarily!!! i=1
while read line do if [ $i -eq $sel ] echo $line i=1 let "i=i+1" done < $le > $ople echo $ople # Send result's name exit 0