Rozdział 3. System kolejkowania i monitoring klastra

Rafal Pisarczyk, przywódca grupy

Michał Pochopień

Adrian Pelczar

Prowadzący zajęcia projektowe: Rafał Petryniak (strona domowa zajęć projektowych).

Spis treści

1. Konfiguracja systemu kolejkowania zadań
1.1. TORQUE wprowadzenie.
1.2. Serwer główny torque (PBS) wezęł 22 ( instalacja , konfiguracja).
1.3. Klient (instalacja + konfiguracja).
1.4. Wersje oprogramowania TORQUE (przegląd).
1.5. Testowanie komunikacji między node'ami a serwerem głównym.
1.6. Polecenie qstat - informacje o kolejce.
1.7. Polecenie qsub, qdel
1.8. Pierwsze testy - 'skrypt_batch'.
1.9. Drugi test (kolejka workqueue, skrypt nowy).
1.10. Queue Configuration.
2. Monitoring klastra - Ganglia
2.1. Ganglia wprowadzenie.
2.2. Ganglia instalacja węzeł 22 (serwer gółwny).
2.3. Ganglia instalacja pozostałe node'y (7001,...,7016).
2.4. Moduł PHP WEB FRONTED.
2.5. Wersje oprogramowania GANGLIA (przegląd).
2.6. Autoryzacja 111.222.333.444/ganglia .
2.7. WHO USES GANGLIA?.
3. Dodatkowe czynności administracyjne
3.1. Ponowne uruchomienie klastra.
3.2. Htop, monitoring lokalny.
3.3. Interfejs graficzny PBS.
3.4. Dokładne informacje na temat zleconego zadania TRACEJOB.

1. Konfiguracja systemu kolejkowania zadań

Rysunek 3.1. Torque(PBS)

Torque(PBS)

1.1. TORQUE wprowadzenie.

System do zarządzania zasobami obliczeniowymi klastra TORQUE bazuje na oprogramowaniu *PBS (Portable Batch System) i jest rozwijany jako projekt Opensource, gdzie dostępność kodu źródłowego jest darmowa. Torque Resource Manager jest programem bazującym na PBS (Portable Batch System) służącym do zarządzania zasobami obliczeniowymi i pozwalającym na optymalne ich wykorzystanie . Do głównych zadań tego programu należy kontrola zasobów obliczeniowych klastra, przyjmowanie zadań od użytkowników oraz kolejkowanie ich, w razie możliwości przydział zasobów obliczeniowych i wykonywanie zadań na węzłach klastra oraz monitorowanie zleceń użytkowników wykonywanych w obrębie klastra . Torque jest systemem kolejkowym, który rezerwuje i przydziela zasoby użytkownikom zgodnie z wyznaczonymi zasadami. Po stronie użytkownika praca z takim systemem ogranicza się do napisania skryptu, w którym określa się zasoby z jakich chce się skorzystać (np. Ilość węzłów, czas pracy procesora). Następnie wprowadza się zadanie do systemu kolejkowego za pomocą komendy qsub. System kolejkowy na bieżąco sprawdza dostępne zasoby obliczeniowe całego klastra i jeśli jest możliwość rezerwuje zasoby określone przez użytkownika, a następnie przystępuje do wykonywania zadania. W momencie, gdy zadania zlecone przez użytkowników przekraczają dostępne zasoby obliczeniowe, zlecenia wykonywane są zgodnie z priorytetem wyznaczonym na podstawie podanego zapotrzebowania na zasoby (tj. pamięci operacyjnej, czasu procesora). Po zakończeniu zadania użytkownika system kolejkowy zwalnia zarezerwowane wcześniej zasoby i przystępuje do realizacji kolejnych zadań umieszczonych w kolejce

Jego główne funkcje to:

  • kontrola zasobów obliczeniowych w obrębie klastra

  • przyjmowanie i kolejkowanie zadań od użytkowników

  • przydział zasobów obliczeniowych (CPU) i wysyłanie zadań do maszyn w klastrze

  • monitorowanie i kontrola zadań użytkownika wykonywanych w obrębie klastra

Z punktu widzenia użytkownika system praktycznie nie różni się od innych odmian PBS.

Architektura:

  • Command - interfejs użytkownika (linia poleceń, GUI).

  • Job Server - przyjmuje zadania i zleca je do obliczenia.

  • Job Executor (Mom) - uruchamia zadanie po otrzymaniu zlecenia od Serwera.

  • Job Scheduler - nadzoruje przydzielanie zadań przez Serwer np polecenie qstat.

1.2. Serwer główny torque (PBS) wezęł 22 ( instalacja , konfiguracja).

1.2.1. Nazwa hosta dla węzła głównego.

Możemy ustawić nazwę, za pomocą której nasza maszyna będzie się przedstawiała zalogowanym użytkownikom, i niektórym programom w pliku /etc/sysconfig/network

Ustawiamy: HOSTNAME=xxx.yyy.pk.edu.pl

Listing pliku /etc/sysconfig/network
[root@m7-ps3a ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=xxx.yyy.pk.edu.pl

Podaną tutaj nazwę trzeba zwykle dopisać do plik /etc/hosts.

Listing pliku /etc/hosts przed zmianami:

[root@m7-ps3a ~]# cat /etc/hosts_2009_09_10
127.0.0.1               localhost.localdomain localhost
197.197.197.1           xxx.yyy.pk.edu.pl
197.197.197.101         m7ps301
197.197.197.102         m7ps302
197.197.197.103         m7ps303
197.197.197.104         m7ps304
197.197.197.105         m7ps305
197.197.197.106         m7ps306
197.197.197.107         m7ps307
197.197.197.108         m7ps308
197.197.197.109         m7ps309
197.197.197.110         m7ps310
197.197.197.111         m7ps311
197.197.197.112         m7ps312
197.197.197.113         m7ps313
197.197.197.114         m7ps314
197.197.197.115         m7ps315
197.197.197.116         m7ps316

Obecnie:127.0.0.1 localhost localhost.localdomain

Ustawiamy: 127.0.0.1 xxx.yyy.pk.edu.pl xxx.yyy.pk.edu.pl.localdomain localhost localhost.localdomain

Listing pliku /etc/hosts po zmianach:

[root@m7-ps3a ~]# cat /etc/hosts
127.0.0.1               xxx.yyy.pk.edu.pl xxx.yyy.pk.edu.pl.localdomain localhost localhost.localdomain
197.197.197.1           xxx.yyy.pk.edu.pl
197.197.197.101         m7ps301
197.197.197.102         m7ps302
197.197.197.103         m7ps303
197.197.197.104         m7ps304
197.197.197.105         m7ps305
197.197.197.106         m7ps306
197.197.197.107         m7ps307
197.197.197.108         m7ps308
197.197.197.109         m7ps309
197.197.197.110         m7ps310
197.197.197.111         m7ps311
197.197.197.112         m7ps312
197.197.197.113         m7ps313
197.197.197.114         m7ps314
197.197.197.115         m7ps315
197.197.197.116         m7ps316

Aby skrypt instalacyjny torque.setup poprawnie interpretował nazawę hosta oraz nazwę domeny należy zmienić pierwszą linia powyższego pliku konfiguracyjnego. Plik ten defacto wspólpracuje z DNS odzwierciedlając nazwy hostów na przypisane im adresy IP ( forma pliku to : IP_ADRES NAZWA_HOSTA NAZWA_DOMENY ). Podczas próby zapisu wprowadzonych zmian , system pyta użytkownika czy na pewno chce dokonać zapisu.

Poleceniem hostname -f sprawdzamy poprawność nazwy hosta, w typ wypadku hostname = xxx.yyy.pk.edu.pl

[root@m7-ps3a ~]# hostname -f
xxx.yyy.pk.edu.pl

Jest to kluczowa sprawa gdyż skrypt instalacyjny domyślne korzysta z polecenia hostname jeśli nie będzie on zwracać poprawnej wartości, skrypt nie wykona sie poprwanie, a użytkownik zostanie powiadomiony o tym przez system :

UNAUTHORIZED ACCESS

Po zakończeniu wprowadzania zmian na konsoli głównej węzeł 22 ( IP: 197.197.197.1) restartujemy sieć:

polecenie: service network restart

1.2.2. Instalacja torque.

Instalacji wymaganych pakietów dokonujemy poprzez użycie programu yum install :

Zainstalwoane pakiety:

libtorque.ppc       : Run-time libs for programs which will use the torque library
libtorque-devel.ppc : Development tools for programs which will use the torque
                    : library
torque.ppc          : Tera-scale Open-source Resource and QUEue manager
torque-client.ppc   : Client part of TORQUE
torque-docs.ppc     : Documentation files for TORQUE
torque-gui.ppc      : Graphical clients for TORQUE
torque-mom.ppc      : Node execution daemon for TORQUE
torque-pam.ppc      : PAM module for TORQUE MOM nodes
torque-scheduler.ppc : Simple fifo scheduler for TORQUE
torque-server.ppc   : The main part of TORQUE
pbstop.ppc          : Full-screen curses monitor for PBS

(obecnie lokalne repozytorium udostępnia wszystkie wymagane pakiety dla architerktury PPC)

polecenie: yum install torque torque-client torque-server torque-qui torque-docs libtorque torque-mom torque-devel torque-sheduler pbstop
             torque-pam libtoqgue-devel

Po wykonaiu powższego polecenia serwer PBS został zainstalowany na systemie oraz uruchomiony, na tym etapie należy go jednak zastopować.

polecenie: /etc/int.d/pbs_server stop

1.2.3. Konfiguracja PBS.

1.2.3.1. Polecenia wstępne

Wydajemy polecenie:

pelecenie: pbs_server -t create

(ważnej jest tutaj aby pbs_serwer i pbs_mom był stop )

polecenie: /etc/init.d/pbs_server stop
       /etc/init.d/pbs_mom stop

Następnie konfigurujemy bazę danych PBS (przydładowa kolejka) używamy tutaj gotowego skryptu.

polecenie: /usr/share/doc/torque-2.1.10/torgue.setup root  (uruchamiane jako użytkownik root)

Listing skryptu /usr/share/doc/torque-2.1.10/torgue.setup:

[root@m7-ps3a ~]# cat /usr/share/doc/torque-2.1.10/torque.setup
#!/bin/sh
# torque.setup

# USAGE:  torque.setup USERNAME

if [ "$1" = "" ] ; then
  echo "USAGE:  torque.setup USERNAME"
  exit 1
  fi

# create default queue
# enable operator privileges

USER=$1@`hostname`

echo "initializing TORQUE (admin: $USER)"

pbs_server -t create

qmgr -c "set server scheduling=true"

echo set server operators += $USER | qmgr
echo set server managers += $USER | qmgr

qmgr -c 'create queue batch'
qmgr -c 'set queue batch queue_type = execution'
qmgr -c 'set queue batch started = true'
qmgr -c 'set queue batch enabled = true'
qmgr -c 'set queue batch resources_default.walltime = 1:00:00'
qmgr -c 'set queue batch resources_default.nodes = 1'

qmgr -c 'set server default_queue = batch'

Możemy skonfigurować pierwszą kolejkę na tym etapie ręcznie wydając w konsoli polecenie 'qmgr' i wprowadzając:

Qmgr: set server scheduling=true
Qmgr: create queue batch
Qmgr: set queue batch queue_type = execution
Qmgr: set queue batch started = true
Qmgr: set queue batch enabled = true
Qmgr: set queue batch resources_default.nodes = 1
Qmgr: set server default_queue = batch
Qmgr: exit

Jednak skrypt torque.setup robi to samo autmatycznie.

1.2.3.2. Ustawiamy nazwę dla serwera głównego PBS.
[root@m7-ps3a ~]# cat >> /var/torque/mom_priv/config
$pbsserver xxx.yyy.pk.edu.pl
1.2.3.3. Edytujemy plik konfiguracyjny /var/torque/server_name

Listing pliku /var/torque/server_name przed zmianami :

[root@m7-ps3a ~]# cat /var/torque/server_name
localhost

Zmieniamy nazwę hosta z localhost na xxx.yyy.pk.edu.pl

Listing pliku /var/torque/server_name po zmianach :

[root@m7-ps3a ~]# cat /var/torque/server_name
xxx.yyy.pk.edu.pl
1.2.3.4. Upgrade rc.firewall-new.

Domyślnie serwer pbs (torque) bedzie oczekiwał połączeń przychodząch na portach 15000:15004, firewall systemowy jest wyłączony natomiast używany jest inny zlokalizowany w plik /etc/rc.d/rc.firewall-new uruchamiany przy starcie systemu.

Listing /etc/rc.d/rc.firewall-new

[root@m7-ps3a ~]# cat /etc/rc.d/rc.firewall-new
#!/bin/sh

PATH="/sbin:/usr/sbin:/usr/local/sbin:$PATH"

FWVER=0.07
LASTCHANGE="2009.03.20"

echo -e "\nLoading rc.firewall - version $FWVER..\n"

IPTABLES=/sbin/iptables
MODPROBE=/sbin/modprobe

EXTIF="eth0"

echo "  External Interface:  $EXTIF"
echo "  ---"

EXTIP="111.222.333.444"
EXTIPNOMASK="111.222.333.444"

echo "  External IP: $EXTIP"
echo "  ---"

INTIF="eth1"

# Assign the internal TCP/IP network and IP address
INTNET="197.197.197.0/24"
INTIP="197.197.197.1/24"

echo "  LAN Interface:       $INTIF"

UNIVERSE="0.0.0.0/0"

echo "  Loading kernel modules.."
echo "    -ip_tables"
echo "    -ip_conntrack_ftp"
echo "    -ip_conntrack"
echo "    -ip_nat_ftp"
echo "    -iptable_nat"

$MODPROBE ip_tables
$MODPROBE ip_conntrack_ftp
$MODPROBE ip_conntrack
$MODPROBE ip_nat_ftp
$MODPROBE iptable_nat

echo "  Enabling forwarding.."
echo "1" > /proc/sys/net/ipv4/ip_forward

#Load the IPTABLES filtering module - "iptable_filter"
#  - Loaded automatically when filter policies are activated
echo "  ---"

echo "  Clearing any existing rules and setting default policy to DROP.."
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -F -t nat

echo "  Delete all User-specified chains.."
$IPTABLES -X

echo "  Reset all IPTABLES counters.."
$IPTABLES -Z

echo "  loopback interfaces are valid.."
#######################################################################
echo "  Access input for ports: 22, 53"
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p udp --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $INTIF -p tcp -m tcp --dport 15000:15004 -j ACCEPT
$IPTABLES -A INPUT -i $INTIF -p udp -m udp --dport 15000:15004 -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p ICMP -s $UNIVERSE -d $EXTIP -j ACCEPT
#######################################################################
$IPTABLES -t nat -A POSTROUTING -s $INTIP -o eth0 -j SNAT --to $EXTIP
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7001 -j DNAT --to-destination 197.197.197.101:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7002 -j DNAT --to-destination 197.197.197.102:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7003 -j DNAT --to-destination 197.197.197.103:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7004 -j DNAT --to-destination 197.197.197.104:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7005 -j DNAT --to-destination 197.197.197.105:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7006 -j DNAT --to-destination 197.197.197.106:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7007 -j DNAT --to-destination 197.197.197.107:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7008 -j DNAT --to-destination 197.197.197.108:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7009 -j DNAT --to-destination 197.197.197.109:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7010 -j DNAT --to-destination 197.197.197.110:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7011 -j DNAT --to-destination 197.197.197.111:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7012 -j DNAT --to-destination 197.197.197.112:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7013 -j DNAT --to-destination 197.197.197.113:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7014 -j DNAT --to-destination 197.197.197.114:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7015 -j DNAT --to-destination 197.197.197.115:22
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 7016 -j DNAT --to-destination 197.197.197.116:22

#######################################################################
# Infrates RMS 320
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 8123 -j DNAT --to-destination 197.197.197.222:23
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTIP --dport 8180 -j DNAT --to-destination 197.197.197.222:80

Musimy powiadomić firewall o połączeniach przychodzących na portach 15000:15004, aby były dopuszczane do systemu, w tym celu w powyższym pliku wykonywalnym firewall'a dodajemy wpisy:

$IPTABLES -A INPUT -i $INTIF -p tcp -m tcp --dport 15000:15004 -j ACCEPT
$IPTABLES -A INPUT -i $INTIF -p udp -m udp --dport 15000:15004 -j ACCEPT

Informują one rc.firewall o zaufaniu odnośnie usług działającyh na tych portach. Jest to kluczowa sprawa ponieważ domyślnie ruch na tak wysokich portach jest blokwany czyli komputery ( node'y ) próbujące się połączyć z serwerem głównym nie mogły by tego zrobić ich złgoszenia były by odrzucane przez rc.firewall.new który defacto tworzy nową tablice polityki odnośnie otwartości portów względem usług (iptables - polityka bezpieczeństwa dla systemu wpis w niej informują o tym co może się dostać do systemu a co nie). Zmienna systemowa $INTIF informuje firewall o tym że pakiety przychodzące na porty (w tym wypadku 15000:15004) są otwarte dla połączeń wewnętrznych analogicznie zmiena $EXTIF otwiera porty dla połączeń zewnętrznych (internet). Następnie resetuejemy firewall.

polecenie: /etc/rc.d/rc.firewall-new

Uwaga !! Jeśli uruchomimy '/etc/init.d/iptables restert' wtedy zostaną wznowione ustawienia firewall'a domyślnego co całkowicie zablokuje możliwość łączanie się z siecią po portach, ponieważ zostanie wtedy uruchomiona polityka domyślna (wpuszczania połączeń).

1.2.3.5. Dodawanie informacji o hostach (node'ach).

Najpierw oczywiście należy zainstaloawć i skonfigurwać torque na host'ach łączących się z systmem natomiast informacje dla serwera o noade'ach przechowywać bedziemy w pliku /var/torque/server_priv/nodes .

Dodajemy wpisy odpowiednio dla wszystkich maszyn (node'ow). Plik jest w formie nazwa_hosta ilość_procesorów. Dodajemy poniższe wpisy:

m7ps301 np=2
m7ps302 np=2
m7ps303 np=2
m7ps304 np=2
m7ps305 np=2
m7ps306 np=2
m7ps307 np=2
m7ps308 np=2
m7ps309 np=2
m7ps310 np=2
m7ps311 np=2
m7ps312 np=2
m7ps313 np=2
m7ps314 np=2
m7ps315 np=2
m7ps316 np=2

Identyfikacja maszyn następuje po nazwach, tłumaczenie na ip realizowane jest w pliku /etc/hosts

Listing pliku /var/torque/server_priv/nodes

[root@m7-ps3a ~]# cat /var/torque/server_priv/nodes
m7ps301 np=2
m7ps301 np=2
m7ps302 np=2
m7ps303 np=2
m7ps304 np=2
m7ps305 np=2
m7ps306 np=2
m7ps307 np=2
m7ps308 np=2
m7ps309 np=2
m7ps310 np=2
m7ps311 np=2
m7ps312 np=2
m7ps313 np=2
m7ps314 np=2
m7ps315 np=2
m7ps316 np=2

1.2.4. Uruchomienie serwera.

polecenia : /etc/init.d/network restart  (profilaktycznie)
            /etc/init.d/pbs_server restart
            /etc/init.d/pbs_mom restart

1.3. Klient (instalacja + konfiguracja).

1.3.1. Nazwa hosta dla węzła(node'a).

Zmiana nazwy hosta wezłów od 7001 do 7016 następuje analogicznie do sytuacji przedstawionej podczasz zmiany nazwy hosta węzła głównego. Przedstawię tutaj zmiany wprowadzaone dla węzła 7001 dla przykładu:

W pliku /etc/sysconfig/network

Ustawiamy: HOSTNAME=m7ps301

Listing pliku /etc/sysconfig/network

[root@m7-ps3a ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=m7ps301

Podaną tutaj nazwę będzie trzeba dopisać do plik /etc/hosts

Listing pliku /etc/hosts przed zmianami:

[root@m7-ps3a ~]# cat /etc/hosts_2009_09_10
127.0.0.1               localhost.localdomain localhost
197.197.197.1           xxx.yyy.pk.edu.pl
197.197.197.101         m7ps301
197.197.197.102         m7ps302
197.197.197.103         m7ps303
197.197.197.104         m7ps304
197.197.197.105         m7ps305
197.197.197.106         m7ps306
197.197.197.107         m7ps307
197.197.197.108         m7ps308
197.197.197.109         m7ps309
197.197.197.110         m7ps310
197.197.197.111         m7ps311
197.197.197.112         m7ps312
197.197.197.113         m7ps313
197.197.197.114         m7ps314
197.197.197.115         m7ps315
197.197.197.116         m7ps316

Obecnie:127.0.0.1 localhost localhost.localdomain

Ustawiamy: 127.0.0.1 m7ps301 m7ps301.localdomain localhost localhost.localdomain

Listing pliku /etc/hosts po zmianach:

[root@m7-ps3a ~]# cat /etc/hosts
127.0.0.1               m7ps301 m7ps301.localdomain localhost localhost.localdomain
197.197.197.1           xxx.yyy.pk.edu.pl
197.197.197.101         m7ps301
197.197.197.102         m7ps302
197.197.197.103         m7ps303
197.197.197.104         m7ps304
197.197.197.105         m7ps305
197.197.197.106         m7ps306
197.197.197.107         m7ps307
197.197.197.108         m7ps308
197.197.197.109         m7ps309
197.197.197.110         m7ps310
197.197.197.111         m7ps311
197.197.197.112         m7ps312
197.197.197.113         m7ps313
197.197.197.114         m7ps314
197.197.197.115         m7ps315
197.197.197.116         m7ps316

1.3.2. Instalacja torque dla węzłów 7001:7016 (klient).

Instalacji wymaganych pakietów dokonujemy poprzez użycie programu yum install (lokalne repozytorium) :

Zainstalowane pakiety:

torque-client.ppc : Client part of TORQUE
torque-server.ppc : The main part of TORQUE
polecenie: yum install torque-client torque-mom
1.3.2.1. Informacja dla node'a o węźle głównym (serwer).

Aby hosty poprwanie komunikowały się z serwerm PBS musimy powiadomić ich o jego nazwie:

polecenia: echo "xxx.yyy.pk.edu.pl" >> /var/torque/server_name
           echo "\$pbsserver xxx.yyy.pk.edu.pl" >> /var/torque/mom_priv/config
1.3.2.2. Uruchamianie damona wykonania dla node'ów (pbs_mom).
polecenie: /etc/init.d/pbs_mom start

1.3.3. Instalacja w pigułce.

Aby instalacja na pozostałych konsolach przebiegała sprawnie -- instalacja skrótowa:

0. z poziomu root, wykonanie kroków poniżej.

1. yum install torque-client torque-mom.

2. zmieniasz plik /etc/hosts ( tak jak w wzorze ).

3. edytujesz plik /var/torque/server_name wpisujesz tam xxx.yyy.pk.edu.pl .

4. edytujesz plik /var/torque/mom_priv/config i dodajesz w nim wpis $pbsserver xxx.yyy.pk.edu.pl .

5. uruchamiasz usługę /etc/init.d/pbs_mom start .

1.4. Wersje oprogramowania TORQUE (przegląd).

SERWER GŁÓWNYCH host: xxx.yyy.pk.edu.pl

[m7ps3@m7-ps3a ~]$ rpm -qa | grep torque
torque-2.1.10-5.fc9.ppc
torque-gui-2.1.10-5.fc9.ppc
torque-mom-2.1.10-5.fc9.ppc
libtorque-2.1.10-5.fc9.ppc
libtorque-2.1.10-5.fc9.ppc64
torque-pam-2.1.10-5.fc9.ppc
torque-server-2.1.10-5.fc9.ppc
torque-docs-2.1.10-5.fc9.ppc
torque-client-2.1.10-5.fc9.ppc
torque-scheduler-2.1.10-5.fc9.ppc
libtorque-devel-2.1.10-5.fc9.ppc

[m7ps3@m7-ps3a ~]$ rpm -qa | grep pbs
pbstop-4.16-3.fc9.ppc

KLIENT hosty: m7ps301,m7ps302,m7ps303,...,m7ps316

[m7ps3@m7-ps308 ~]$ rpm -qa | grep torque
torque-2.1.10-5.fc9.ppc
torque-mom-2.1.10-5.fc9.ppc
libtorque-2.1.10-5.fc9.ppc
torque-client-2.1.10-5.fc9.ppc

1.5. Testowanie komunikacji między node'ami a serwerem głównym.

Będąc zalogowanym na węźle głównym z poziomu użytkownika root wydajemy polecenie pbsnodes -a

Listing polecania pbsnodes -a

[root@m7-ps3a server_priv]# pbsnodes -a
m7ps301
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps301 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=20106 20130 20142 20156 20198 20664 20874 20978 21089 21217 21241 25835,nsessions=12,nusers=1,
   idletime=147,totmem=726392kb,availmem=614248kb,physmem=202112kb,ncpus=2,loadave=18.00,netload=2060216852,
   state=free,jobs=? 0,rectime=1252672168

m7ps302
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps302 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=20011 20206 20298 20409 20537 20561 24634,nsessions=7,nusers=1,idletime=28,totmem=726392kb,
   availmem=656612kb,physmem=202112kb,ncpus=2,loadave=12.01,netload=290321165,state=free,jobs=? 0,rectime=1252672197

m7ps303
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps303 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=19778 19932 20023 20134 20261 20285,nsessions=6,nusers=1,idletime=84678,totmem=726392kb,
   availmem=654592kb,physmem=202112kb,ncpus=2,loadave=12.00,netload=225412404,state=free,jobs=? 0,rectime=1252672200

m7ps304
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps304 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=20065 20219 20299 20410 20526 20550,nsessions=6,nusers=1,idletime=85168,totmem=726392kb,availmem=655508kb,
   physmem=202112kb,ncpus=2,loadave=12.00,netload=194995093,state=free,jobs=? 0,rectime=1252672199

m7ps305
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps305 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12190 12344 12424 12534 12650 12674,nsessions=6,nusers=1,idletime=85297,totmem=726392kb,availmem=659092kb,
   physmem=202112kb,ncpus=2,loadave=12.00,netload=186070638,state=free,jobs=? 0,rectime=1252672199

m7ps306
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps306 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12153 12416 12532 12556,nsessions=4,nusers=1,idletime=85990,totmem=726392kb,availmem=667200kb,
   physmem=202112kb,ncpus=2,loadave=8.00,netload=152866157,state=free,jobs=? 0,rectime=1252672199

m7ps307
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps307 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=31964 32227 32343 32367,nsessions=4,nusers=1,idletime=86007,totmem=726392kb,availmem=665824kb,
   physmem=202112kb,ncpus=2,loadave=8.00,netload=152898292,state=free,jobs=? 0,rectime=1252672199

m7ps308
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps308 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=15178 15781 15824 15870 15913 18790 18833 19309 19680 20006 20040 21756 21826 21984 22026,nsessions=15,
   nusers=1,idletime=87709,totmem=726392kb,availmem=618376kb,physmem=202112kb,ncpus=2,loadave=8.00,netload=3674825471,
   state=free,jobs=? 0,rectime=1252672199

m7ps309
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps309 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12126 12365 12481 12505,nsessions=4,nusers=1,idletime=88185,totmem=726392kb,availmem=667648kb,
   physmem=202112kb,ncpus=2,loadave=8.00,netload=132620619,state=free,jobs=? 0,rectime=1252672198

m7ps310
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps310 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12115 12352 12456 12480,nsessions=4,nusers=1,idletime=88143,totmem=726392kb,availmem=668264kb,
   physmem=202112kb,ncpus=2,loadave=8.00,netload=118211408,state=free,jobs=? 0,rectime=1252672199

m7ps311
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps311 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12414 12728 12754,nsessions=3,nusers=1,idletime=88930,totmem=726392kb,availmem=654800kb,
   physmem=202112kb,ncpus=2,loadave=6.08,netload=96412175,state=free,jobs=? 0,rectime=1252672199

m7ps313
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps313 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12160 12407 12431,nsessions=3,nusers=1,idletime=89716,totmem=726392kb,availmem=670224kb,
   physmem=202112kb,ncpus=2,loadave=6.01,netload=80806889,state=free,jobs=? 0,rectime=1252672197

m7ps314
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps314 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12162 12397 12421,nsessions=3,nusers=1,idletime=90098,totmem=726392kb,availmem=670232kb,
   physmem=202112kb,ncpus=2,loadave=6.00,netload=77279489,state=free,jobs=? 0,rectime=1252672199

m7ps315
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps315 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12105 12329 12353,nsessions=3,nusers=1,idletime=90874,totmem=726392kb,availmem=669828kb,
   physmem=202112kb,ncpus=2,loadave=6.00,netload=74617724,state=free,jobs=? 0,rectime=1252672199

m7ps316
     state = free
     np = 2
     ntype = cluster
     status = opsys=linux,uname=Linux m7ps316 2.6.25-14.fc9.ppc64 #1 SMP Thu May 1 05:49:24 EDT 2008 ppc64,
   sessions=12155 12332 12356,nsessions=3,nusers=1,idletime=91700,totmem=726392kb,availmem=668940kb,
   physmem=202112kb,ncpus=2,loadave=6.00,netload=62612343,state=free,jobs=? 0,rectime=1252672199

Polecenie pbsnodes z opcja -a informuje administratora systemu czy serwer torque poprawnie widzi podporządkowane pod swoją jurysdykcją maszyny ( czyli w kolejności konsole o nazwa odpwiednio m7ps301 do m7ps316 na których zostały zainstalowane aplikacje klienckie torque ). Generalnie polecenie wyświetla informacje o maszynach wraz z dostępnymi zasobami. Np. zasób totmem=wartość , jest informacją o ilosći dostępnej pamięci operacyjnej. Widzimy że konsola odpowiada na zaptytanie serwera , w odpowiedzi wysyła wskazane wyżej informacje w tutule podając swoją nazwę hostname.

1.6. Polecenie qstat - informacje o kolejce.

Dostarcza informacji na temat kolejek i zadań.

qstat podaje listę wszystkich zadań oraz ich stan

qstat -n jak wyżej, dodatkowo podaje nazwy przydzielonych maszyn

qstat job_id podaje informacje o stanie zadania o podanym job_id

qstat -q wyświetla liste kolejek w systemie PBS

qstat -Q wyświetla informacje na temat kolejek w nieco innym formacie

qstat -Q -f wyświetla szczegółowe informacje na temat kolejek

qstat -f job_id podaje szczegółowe informacje o wybranym zadaniu

[root@m7-ps3a repository]# qstat -q

server: xxx.yyy.pk.edu.pl

Queue            Memory CPU Time Walltime Node  Run Que Lm  State
---------------- ------ -------- -------- ----  --- --- --  -----
batch              --      --       --      --    0   0 --   E R
                                               ----- -----
                                                   0     0


[root@m7-ps3a repository]# qstat -Q -f
Queue: batch
    queue_type = Execution
    total_jobs = 0
    state_count = Transit:0 Queued:0 Held:0 Waiting:0 Running:0 Exiting:0
    resources_default.nodes = 1
    resources_default.walltime = 01:00:00
    mtime = 1252509072
    enabled = True
    started = True

[root@m7-ps3a repository]# qstat -Q
Queue              Max   Tot   Ena   Str   Que   Run   Hld   Wat   Trn   Ext T
----------------   ---   ---   ---   ---   ---   ---   ---   ---   ---   --- -
batch                0     0   yes   yes     0     0     0     0     0     0 E

Polecenie gstat oraz gstat -n nie podają żadnych informacji odnośnie aktywnych zadań (POLE Que=0), ponieważ takich w tej chwili nie ma w systemie.

Sprawdzenie ustawień serwera oraz kolejek

[m7ps3@m7-ps3a test]$ qmgr
Max open servers: 4
Qmgr: print server
#
# Create queues and set their attributes.
#
#
# Create and define queue workqueue
#
create queue workqueue
set queue workqueue queue_type = Execution
set queue workqueue acl_host_enable = False
set queue workqueue acl_user_enable = False
set queue workqueue acl_users = m7ps3@xxx.yyy.pk.edu.pl
set queue workqueue acl_users += root@xxx.yyy.pk.edu.pl
set queue workqueue resources_max.cput = 24:00:00
set queue workqueue resources_min.cput = 00:00:01
set queue workqueue enabled = True
set queue workqueue started = True
#
# Create and define queue batch
#
create queue batch
set queue batch queue_type = Execution
set queue batch acl_host_enable = False
set queue batch acl_hosts = xxx.yyy.pk.edu.pl
set queue batch acl_user_enable = False
set queue batch acl_users = root
set queue batch resources_default.nodes = 1
set queue batch resources_default.walltime = 01:00:00
set queue batch enabled = True
set queue batch started = True
#
# Set server attributes.
#
set server scheduling = True
set server managers = root@xxx.yyy.pk.edu.pl
set server operators = root@xxx.yyy.pk.edu.pl
set server default_queue = batch
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 6
set server pbs_version = 2.1.10
set server submit_hosts = xxx.yyy.pk.edu.pl
set server allow_node_submit = True
Qmgr: quit

Ustawienia dla serwera:

set server scheduling = True -- ważny wpis urchomione zostaje wykonywanie zadania po dodaniu do klejki

set server submit_hosts = xxx.yyy.pk.edu.pl -- wpis informuje o tym że job'y można dodawać tylko z maszyny głównej

set server allow_node_submit = True -- każdy użytkownik systemu może wydawać polecenia dodania zadania do kolejki (wyjątek root)

1.7. Polecenie qsub, qdel

1.7.1. Zlecanie zadań.

Zlecanie zadań do systemu kolejkowego należy wykonywać z tzw. maszyny dostępowej (xxx.yyy.pk.edu.pl , wpis zdefiniowany set server submit_hosts = xxx.yyy.pk.edu.pl). Następnym krokiem jest utworzenie skryptu startowego i dodanie go do kolejki przy pomocy polecenia qsub. Możliwe jest także bezpośrednie dodanie programu z pominięciem skryptu. Jednak pierwsze podejście jest bardziej klarowne.

polecenie: qsub ./skrypt    (Działanie: dodaje zadanie do wskazanej kolejki z zadanymi parametrami)
   albo
polecenie: qsub skrypt

Powyższa linijka dodaje zadanie do kolejki. Parametry pobierane są ze 'skrypt.sh'. Jeżeli w skrypcie nie zdefiniowano parametrów to przyjmowane są wartości domyślne.

UWAGA --1--

Domyślnie job nie może być dodawany z poziomu superuser'a , kompilator tutaj wyrzuca bardzo subtelny i trudny w interpretacji błąd:

qsub: Bad UID for Job Execution 

UWAGA --2--

Skrypt musi mieć możliwość wykonania (execute), z poziomu użytkownika root wydajemy polecenie:

polecenie: chmod 755 skrypt 

4-read 2-write 1-execute

Usunięcie zadania z kolejki

Składnia polecenia: gdel JOB_ID

1.7.2. Scheduler running.

Uruchomienia daemona wykonywania zadań w kolejce

polecenie: /etc/init.d/pbs_sched

pbs_sched jest to domyślny natywny scheduler, jeśli nie zostanie on uruchomiony zadania w kolejce (kolumna S ) będą miały stan ustawiony na 'Q' czyli czeka na wykonanie ZAWSZE

1.7.3. qsub ErrorMessages.

-----qsub Error messages-----

Invalid option
  $ qsub -h -N mylcl -J K localsched
  qsub: invalid option -- J
  usage: qsub [-a date_time] [-A account_string] [-c interval]

Invalid directive, extra characters in #PBS -q infinite
  $ qsub cpbs.cmd
  qsub: directive error: -q infinite ###reset to use infinite queue
  Directive lines cannot contain extra characters, like comments describing the directive action

Invalid server name in directive #PBS -q workq@dell26
  $ qsub cpbs.cmd
  Unknown Host.
  qsub: cannot connect to server dell26 (errno=15008)

Invalid queue name in directive #PBS -q workq
  $ qsub cpbs.cmd
  qsub: Unknown queue

Unsupported limits in directive mem=550MB,cput=288000
  $ qsub -h cpbs.cmd
  qsub: Job exceeds queue resource limits
  the invalid value is cput=288000 seconds, that sets job CPU limit to 80 hours, while the longest allowed CPU limit is 72 hours (queue infinite)

Invalid user in #PBS -u new-user
  $ qsub sube.cmd
  qsub: Bad UID for job execution

1.8. Pierwsze testy - 'skrypt_batch'.

Pierwsze job jaki dodany został do kolejki zadań to skrypt który został umieszczony w katalogu /home/test o nazwie 'skrypt_batch'

Listing skryptu 'skrypt_batch':

[m7ps3@m7-ps3a test]$ cat skrypt_batch
#!/bin/bash
#PBS -N zadanie01
#PBS -q batch
#PBS -l walltime=00:01:00
echo -n "Hostname:"
/bin/hostname

Jest to prosty programik wypisujący nazwę hosta maszyny za pomocą polecenia /bin/hostname

Pierwsza linia określa interpreter dla naszego skryptu, jeśli nie ma wyraźnych powodów należy używać bash'a. Ważne jest aby wybrany interpreter był dostępny na klastrze! Linie rozpoczynające się dyrektywą #PBS zawierają parametry dla qsub Pozostałe linie to treść skryptu (sekwencja poleceń do wykonania)

Linie rozpoczynające się dyrektywą #PBS zawierają parametry dla qsub. Pozostałe linie to treść skryptu (sekwencja poleceń do wykonania).

Wybrane paremetry polecenia qsub:

parametr    opis                       przykład
-N   określa nazwę dla naszego zadania              -N zadanie01
-q   definiuje kolejke do której dodajemy zadanie       -q batch
-l   definiuje zasoby wymagane przez zadanie              -l walltime=00:01:00
-o   określa plik do którego przekierowane zostanie stdout  -o comp01job.stdout

Wybrane zasoby (dla opcji -l):

resource                    format                                        description
cput       seconds, or [HH:]MM:]SS----------------Maximum amount of CPU time used by all processes in the job
nice       integer between -20 and 19-------------Adjust the process’ execution priority
nodes      {node_count or hostname} ---------------------------------------------------------------------------------
----------------------------------------------------------------Number and/or type of nodes to be reserved for exclusive  use by the job.
----------------------------------------------------------------The value is one or more node_specs joined with the ‘+’
----------------------------------------------------------------character, “node_spec[+node_spec...]”. Each node_spec is an
----------------------------------------------------------------number of nodes required of the type declared in the
----------------------------------------------------------------node_spec and a name or one or more property or properties
----------------------------------------------------------------desired for the nodes. The number, the name, and each
----------------------------------------------------------------property in the node_spec are separated by a colon ‘:’.
----------------------------------------------------------------If no number is specified, one (1) is assumed.
----------------------------------------------------------------The name of a node is its hostname. The properties of nodes
----------------------------------------------------------------are: *ppn=# - specifying the number of processors per node
----------------------------------------------------------------requested. Defaults to 1.*features - a string assigned by
----------------------------------------------------------------the system administrator specify a node’s features.
pcput      seconds, or [HH:]MM:]SS----------------Maximum amount of CPU time used by any single process in the job
pmem       size-----------------------------------Maximum amount of physical memory used by any single process of the job
pvmem      size-----------------------------------Maximum amount of virtual memory used by any single process in the job
vmem       size-----------------------------------Maximum amount of virtual memory used by all concurrent processes in the job
walltime     seconds, or [HH:]MM:]SS----------------Maximum amount of real time during which the job can be in the running state

Dodanie zadania do kolejki z poziomu użytkownika (m7ps3).

[m7ps3@m7-ps3a test]$ qsub skrypt_batch
36.xxx.yyy.pk.edu.pl

Sprawdzam kolejkę

[m7ps3@m7-ps3a test]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
36.m7-ps3a          zadanie01        m7ps3                  0 Q batch

Kolumna S zawiera informacje na temat stanu zadania:

R - Running (Uruchomione)

Q - Queued (Zakolejkowane, czeka na wykonanie)

E - Exiting

C - Completed

Faktycznie zadanie zostało dodane do kolejki batch i czeka na wykonanie (opcja Q) w skrypcie ustawiliśmy maksymalny czas wykonania zadania na 1 minute w ciągu tego czasu job się wykona. Gdybyśmy nie ustawili opcji walltime=00:01:00 w 'skrypt_batch' wtedy została by użytwa opcja domyślna kolejki i zadanie wykonane zostało by w ciągu 60 minut. Widać również że został przydzielony numer ID JOB( 36.xxx.yyy.pk.edu.pl bądź skrócona wersja 36.m7-ps3a) oraz jest poprawna informacja o nazwie zadania (zadanie01)

Porównanie dostępnych kolejek w systemie

[m7ps3@m7-ps3a test]$ qstat -Q
Queue              Max   Tot   Ena   Str   Que   Run   Hld   Wat   Trn   Ext T
----------------   ---   ---   ---   ---   ---   ---   ---   ---   ---   --- -
workqueue            0     0   yes   yes     0     0     0     0     0     0 E
batch                0     1   yes   yes     1     0     0     0     0     0 E

Do kolejki batch zostało przydzielone jedno zadanie natomaist w kolejce workqueue brak job'ów

Wyświetlenie szczegółowych informacji o zadaniu w kolejce batch.

[m7ps3@m7-ps3a test]$ qstat -f
Job Id: 36.xxx.yyy.pk.edu.pl
    Job_Name = zadanie01
    Job_Owner = m7ps3@xxx.yyy.pk.edu.pl
    job_state = Q
    queue = batch
    server = xxx.yyy.pk.edu.pl
    Checkpoint = u
    ctime = Fri Sep 11 23:08:25 2009
    Error_Path = xxx.yyy.pk.edu.pl:/home/test/zadanie01.e36
    Hold_Types = n
    Join_Path = n
    Keep_Files = n
    Mail_Points = a
    mtime = Fri Sep 11 23:08:25 2009
    Output_Path = xxx.yyy.pk.edu.pl:/home/test/zadanie01.o36
    Priority = 0
    qtime = Fri Sep 11 23:08:25 2009
    Rerunable = True
    Resource_List.nodect = 1
    Resource_List.nodes = 1
    Resource_List.walltime = 00:01:00
    Variable_List = PBS_O_HOME=/home/m7ps3,PBS_O_LANG=pl_PL.UTF-8,
        PBS_O_LOGNAME=m7ps3,
        PBS_O_PATH=/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/bin:/usr
        /bin:/home/m7ps3/bin,PBS_O_MAIL=/var/spool/mail/m7ps3,
        PBS_O_SHELL=/bin/bash,PBS_O_HOST=xxx.yyy.pk.edu.pl,
        PBS_O_WORKDIR=/home/test,PBS_O_QUEUE=batch
    etime = Fri Sep 11 23:08:25 2009

[m7ps3@m7-ps3a test]$ qstat -f 36.xxx.yyy.pk.edu.pl
Job Id: 36.xxx.yyy.pk.edu.pl
    Job_Name = zadanie01
    Job_Owner = m7ps3@xxx.yyy.pk.edu.pl
    job_state = Q
    queue = batch
    server = xxx.yyy.pk.edu.pl
    Checkpoint = u
    ctime = Fri Sep 11 23:08:25 2009
    Error_Path = xxx.yyy.pk.edu.pl:/home/test/zadanie01.e36
    Hold_Types = n
    Join_Path = n
    Keep_Files = n
    Mail_Points = a
    mtime = Fri Sep 11 23:08:25 2009
    Output_Path = xxx.yyy.pk.edu.pl:/home/test/zadanie01.o36
    Priority = 0
    qtime = Fri Sep 11 23:08:25 2009
    Rerunable = True
    Resource_List.nodect = 1
    Resource_List.nodes = 1
    Resource_List.walltime = 00:01:00
    Variable_List = PBS_O_HOME=/home/m7ps3,PBS_O_LANG=pl_PL.UTF-8,
        PBS_O_LOGNAME=m7ps3,
        PBS_O_PATH=/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/bin:/usr
        /bin:/home/m7ps3/bin,PBS_O_MAIL=/var/spool/mail/m7ps3,
        PBS_O_SHELL=/bin/bash,PBS_O_HOST=xxx.yyy.pk.edu.pl,
        PBS_O_WORKDIR=/home/test,PBS_O_QUEUE=batch
    etime = Fri Sep 11 23:08:25 2009

Usunięcie zadania z kolejki

Składnia polecenia: gdel JOB_ID

[m7ps3@m7-ps3a test]$ qdel 36.m7-ps3a

1.9. Drugi test (kolejka workqueue, skrypt nowy).

Do celów testowych został utworzony skrypt którego wykonanie zostanie przeprowadzone docelowo na maszynie m7ps301 zostało to zaimplemetowanie w skrypcie za pomocą polecenia node=m7ps301 dodatkowo przekierowano wynik działania skryptu w celach sprawdzenia poprawności wykonania na danej maszynie.

0. ----Listing ../dokumentacja/projekty/projekt2/torque_job/nowy
[m7ps3@m7-ps3a torque_job]$ cat nowy
#!/bin/bash
#PBS -q workqueue
#PBS -N zadanie_test
#PBS -l nodes=m7ps301,walltime=00:01:00    ---- > skierowanie wykonania zadanie na konkretny węzeł

echo "starting $PBS_JOBNAME" > /tmp/output.$PBS_JOBID

         1. ----DODANIE skryptu do kolejki zadań do wykonania  POLECENIE ( qsub ) -----
[m7ps3@m7-ps3a torque_job]$ qsub nowy
64.xxx.yyy.pk.edu.pl

         2. ----SPRAWDZAM czy zadanie zostało faktycznie dodane POLECENIE ( gstat -G ) -----
[m7ps3@m7-ps3a torque_job]$ qstat -G

xxx.yyy.pk.edu.pl:
                                                                   Req'd  Req'd   Elap
Job ID               Username Queue    Jobname    SessID NDS   TSK Memory Time  S Time
-------------------- -------- -------- ---------- ------ ----- --- ------ ----- - -----
64.xxx.yyy.pk.e m7ps3    workqueu zadanie_te    --      1  --    --  24:00 Q   --

         3. ----MONITOROWANIE na bieżąco stanu zadań w kolejce workqueue ( qstat ) -----
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3                  0 Q workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3                  0 Q workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3                  0 Q workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3                  0 Q workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3                  0 R workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue
[m7ps3@m7-ps3a torque_job]$ qstat
Job id              Name             User            Time Use S Queue
------------------- ---------------- --------------- -------- - -----
64.m7-ps3a          zadanie_test     m7ps3           00:00:00 E workqueue

(zadanie jest najpier kolejkonowane  opcja Q(Queued) następnie przechodzi do działania R(Running) na końcu E (Exe)

Skrypt miał dolecelowo wykonać się na maszynie m7ps301, dodatkowo na tej konsoli w folderze /tmp będzie przechowywany wynik srdOUT wykonania skryptu plik ten będzie miał następującą nazwę zdefiniowaną podczasz wykonywania:

echo "starting $PBS_JOBNAME" > /tmp/output.$PBS_JOBID

Czyli nazwa w /tmp na dysku lokalnym m7ps301 będzie (output.JOB_ID) ----> output.64.xxx.yyy.pk.edu.pl. Oraz wewnątrz pliku /tcp/output.64.xxx.yyy.pk.edu.pl będzie widnieć nazwa wykonywanego zadania (zadanie_test).

1.10. Queue Configuration.

Pierwsza sprawa to utworzenie przykładowej kolejki

qmgr -c "create queue batch queue_type=execution"

Następnie możemy dodawać atrybuty. Omówię kilka z nich:

1. acl_hosts
        HOST[+HOST]...   specyfikacja odnośnie hostów możliwych do pracy w danej kolejce (np mogących dodawać zadania)
        qmgr -c "set queue batch acl_hosts=h1+h2+h3"  dodanie przykładowych hostów do kolejki batch
    qmgr -c "set queue batch acl_host_enable=true ustawienie filtracji hostów na true
2. acl_users
        USER[@HOST][+USER[@HOST]]... secyfikacja user'ów do pracy w kolejce
        qmgr -c "set queue batch acl_users=john"
        qmgr -c "set queue batch acl_users+=steve@h2"
        qmgr -c "set queue batch acl_users+=stevek@h3"
    qmgr -c "set queue batch acl_user_enable=true ustawienie filtracji hostów na true

do celów testowych wprowadzaone zotały ustawienia dla hosta xxx.yyy.pk.edu.pl następnie wyłączone opcję acl_host_enable=false w celach przywrócenia poprawnej pracy dodatkowo wprowadzono

set server allow_node_submit = True

Jest to ustawienie globalne dla całego serwera umożliwia wszystkim węzłą na klastrze dodawanie job'ów do wszystkich kolejek. Ten wpis zabija inne ustawienie serwera mianowicie:

set server submit_hosts = xxx.yyy.pk.edu.pl

Ciekawym poleceniem odnośnie zadania jest tracejob JOB_ID , najwięcej informacji możemy uzyskać wywołując go z maszyny na której postawiony został serwer torque czyli (xxx.yyy.pk.edu.pl) z poziomu użytkownika root. Poniżej przykład dla zadania JOB_ID = 70.

[root@m7-ps3a ~]# tracejob 70
/var/torque/mom_logs/20090914: No matching job records located

Job: 70.xxx.yyy.pk.edu.pl

09/14/2009 22:53:26  S    enqueuing into workqueue, state 1 hop 1
09/14/2009 22:53:26  S    Job Queued at request of m7ps3@m7ps301, owner =
                          m7ps3@m7ps301, job name = zadanie_test, queue =
                          workqueue
09/14/2009 22:53:26  A    queue=workqueue
09/14/2009 22:54:26  S    Job Modified at request of
                          Scheduler@xxx.yyy.pk.edu.pl
09/14/2009 22:54:26  L    Job Run
09/14/2009 22:54:26  S    Job Run at request of Scheduler@xxx.yyy.pk.edu.pl
09/14/2009 22:54:26  A    user=m7ps3 group=m7ps3 jobname=zadanie_test
                          queue=workqueue ctime=1252961606 qtime=1252961606
                          etime=1252961606 start=1252961666 exec_host=m7ps301/0
                          Resource_List.cput=24:00:00
                          Resource_List.neednodes=m7ps301 Resource_List.nodect=1
                          Resource_List.nodes=m7ps301
                          Resource_List.walltime=00:01:00
09/14/2009 22:54:32  S    Exit_status=0 resources_used.cput=00:00:00
                          resources_used.mem=0kb resources_used.vmem=0kb
                          resources_used.walltime=00:00:04
09/14/2009 22:54:32  A    user=m7ps3 group=m7ps3 jobname=zadanie_test
                          queue=workqueue ctime=1252961606 qtime=1252961606
                          etime=1252961606 start=1252961666 exec_host=m7ps301/0
                          Resource_List.cput=24:00:00
                          Resource_List.neednodes=m7ps301 Resource_List.nodect=1
                          Resource_List.nodes=m7ps301
                          Resource_List.walltime=00:01:00 session=3946
                          end=1252961672 Exit_status=0
                          resources_used.cput=00:00:00 resources_used.mem=0kb
                          resources_used.vmem=0kb
                          resources_used.walltime=00:00:04
09/14/2009 22:54:36  S    dequeuing from workqueue, state COMPLETE

bardzo szczegółowe informacje na temat zadania (czas, kto zlecił, kto wykonał, zasoby), na końcu widnieje bardzo ważna wiadomość mianowicie "state COMPLETE".

2. Monitoring klastra - Ganglia

Rysunek 3.2. GANGLIA

GANGLIA

2.1. Ganglia wprowadzenie.

Ganglia is a scalable distributed monitoring system for high-performance computing systems such as clusters and Grids. It is based on a hierarchical design targeted at federations of clusters. It leverages widely used echnologies such as XML for data representation, XDR for compact, portable data transport, and RRDtool for data storage and visualization. http://ganglia.info/

Ganglia jest systemem monitorowania przeznaczonym dla klastróww (grid'ów). Jest to projekt przydatny zarówno dla administratorów jak i użytkowników, pozwala sprawdzić obciążenie (określić kondycję) klastra lub grupy klastrów jak również każdego węzła z osobna. Monitorowaniu moze podlegać aktywność procesora, sieci, pamięci itp. Dodatkowo program dostarcza informacji o systemie (jest to np. wersja jądra systemowego, nazwa systemu operacyjnego) i sprzęcie (np. częstotliwość taktowania procesora i jego architektura, ilość pamięci RAM) na którym został uruchomiony. Projekt może być używany do monitorowania również systemów wirtualnych uruchomionych na jednej maszynie z WSO. Ogromn zalet projektu Ganglia jest latwość wykrywania węzłów nieaktywnych lub niepracujących prawidłowo - jest to przydatne szczególnie w przypadkach, gdy klaster składa się z bardzo dużej ilości węzłów. Na projekt składa się kilka programów. Najważniejsze z nich to:

- Gmond (Ganglia MONitor Daemon) jest to program uruchamiany na każdym z węzłów klastra. Nie wymaga systemu plików, użytkownika ze specjalnymi uprawnieniami czy bazy danych. Jego zadanie polega na monitorowaniu stanu węzła i informowaniu program gmetad o zmianach na węźle. Wykorzystuje protokół multicast do rozsyłania informacji do innych węzłów.

- Gmetad (Ganglia METAdata Daemon) jest uruchamiany na jednym komputerze np. kontrolerze klastra lub na niezależnej maszynie. Jego funkcja polega na zbieraniu danych pochodzcych od programów gmond (monitorujócych węzły) jak również od innych programów gmetad (monitorujócych inne klastry) i zapisywaniu ich w bazie Round Robin Database (RRD). Zebrane informacje podlegają następnie odpowiedniej obróbce i prezentowane są na stronie www w postaci wykresów.

- rrdtool (Round Rabin Database) , baza danych przchowujóca statyski klastra

Właściwości systemu i wykorzystanie:

- rozproszony system monitorowania klastrów i gridów

- wykorzystywany na tysiącach klastrów na całym świecie (CERN, Motorola, Cisco, itd. )

- XML, XDR

- przechowywanie i prezentacja wyników: RRDTOOL specjalne algorytmy i struktury danych

- minimalizacja narzutów czasowych

- skalowalność (do 2000 węzłów)

-dostępny na wiele systemów operacyjnych i architektur (AMD64, Intel, itd.)

Architektura (schemat ogólny)

2.2. Ganglia instalacja węzeł 22 (serwer gółwny).

Serwer jak większość aplikacji zarządzających został postawiony na węźle 22 ( ip: 197.197.197.1), będzie on pełnił funkcję zbierania statystyk i udostępniania w postaci inferfejsu web'owego.

2.2.1. Instalacja wymaganego oprogramowania.

Listing procesu instalacj:

[root@m7-ps3a ~]#  yum install rrdtool ganglia ganglia-gmetad ganglia-gmond ganglia-web httpd php
fedora                                                   | 2.4 kB     00:00
updates                                                  | 2.6 kB     00:00
Ustawianie procesu instalacji
Analizowanie argumentów instalacji pakietów
Rozwiązywanie zależności
--> Wykonywanie sprawdzania transakcji
---> Pakiet ganglia-gmetad.ppc 0:3.0.7-1.fc9 zostanie zaktualizowany
---> Pakiet ganglia-gmond.ppc 0:3.0.7-1.fc9 zostanie zaktualizowany
---> Pakiet rrdtool.ppc 0:1.3-0.12.beta4.fc9 zostanie zaktualizowany
--> Przetwarzanie zależności: dejavu-lgc-fonts dla pakietu: rrdtool
---> Pakiet php.ppc 0:5.2.5-7.fc9 zostanie zaktualizowany
--> Przetwarzanie zależności: php-common = 5.2.5-7.fc9 dla pakietu: php
--> Przetwarzanie zależności: php-cli = 5.2.5-7.fc9 dla pakietu: php
---> Pakiet ganglia.ppc 0:3.0.7-1.fc9 zostanie zaktualizowany
---> Pakiet ganglia-web.ppc 0:3.0.7-1.fc9 zostanie zaktualizowany
--> Przetwarzanie zależności: php-gd dla pakietu: ganglia-web
---> Pakiet httpd.ppc 0:2.2.8-3 zostanie zaktualizowany
--> Przetwarzanie zależności: httpd-tools = 2.2.8-3 dla pakietu: httpd
--> Wykonywanie sprawdzania transakcji
---> Pakiet php-common.ppc 0:5.2.5-7.fc9 zostanie zaktualizowany
---> Pakiet httpd-tools.ppc 0:2.2.8-3 zostanie zaktualizowany
---> Pakiet php-cli.ppc 0:5.2.5-7.fc9 zostanie zaktualizowany
---> Pakiet php-gd.ppc 0:5.2.5-7.fc9 zostanie zaktualizowany
---> Pakiet dejavu-lgc-fonts.noarch 0:2.24-3.fc9 zostanie zaktualizowany
--> Zakończono rozwiązywanie zależności

Rozwiązano zależności

=============================================================================
 Pakiet                  Architektura  Wersja           Repozytorium      Rozmiar
=============================================================================
Instalowanie:
 ganglia                 ppc        3.0.7-1.fc9      fedora             94 k
 ganglia-gmetad          ppc        3.0.7-1.fc9      fedora             93 k
 ganglia-gmond           ppc        3.0.7-1.fc9      fedora            238 k
 ganglia-web             ppc        3.0.7-1.fc9      fedora            120 k
 httpd                   ppc        2.2.8-3          fedora            1.2 M
 php                     ppc        5.2.5-7.fc9      fedora            1.3 M
 rrdtool                 ppc        1.3-0.12.beta4.fc9  fedora            440 k
Instalowanie, aby rozwiązać zależności:
 dejavu-lgc-fonts        noarch     2.24-3.fc9       fedora            3.4 M
 httpd-tools             ppc        2.2.8-3          fedora             80 k
 php-cli                 ppc        5.2.5-7.fc9      fedora            2.5 M
 php-common              ppc        5.2.5-7.fc9      fedora            235 k
 php-gd                  ppc        5.2.5-7.fc9      fedora            124 k

Podsumowanie transakcji
=============================================================================
Instalowanie      12 pakietów
Aktualizowanie     0 pakietów
Usuwanie           0 pakietów

Zainstalowano tutaj dodatkowo serwer apache (httpd) z modułem php będzie on tutaj współpracował z ganglia udostępniając wyniki gmetric w http.

2.2.2. Gmond (Ganglia Monitoring Daemon) - konfiguracja serwer.

Wstępne informacje:

- działa na każdym węzle

- 37 różnych metryk wbudowanych (np. obciążenie procesora , liczba procesów

- konfiguracja: /etc/gmond.conf

Przechodzimy do konfiguracji deamon'a gmond w tym celu edytujemy plik /etc/gmond.conf. Oraz wprowadzamy zmiany:

cluster {
  name = "m7ps3"
  owner = "M-7"
  latlong = "unspecified"
  url = "unspecified"
}

Zmieaniemy pole name, oraz owner wprowadzajać odpowiednio m7ps3 oraz M-7.

udp_send_channel {
  host = 197.197.197.1   /*adres demona agregującego - gmond*/
  port = 8649
}

W polu host wpisujemy adres ip maszyny , oraz port którego serwer bedzie używał do komunikacji tutaj 8649.

udp_recv_channel {
  port = 8649
  family = inet4
}

tcp_accept_channel {
  port = 8649
}

Port na którym gmond bedzie oczekiwał połączeń również ustawiamy na 8649, oraz wprowadzamy pole family z parametrem inet4 połączenia akcepotowalne tcp należy ustawić również na porcie 8649.

Listing pliku /etc/gmond.conf ( pierwsz 60 lini )

[root@m7-ps3a etc]# head -n 60 /etc/gmond.conf
/* This configuration is as close to 2.5.x default behavior as possible
   The values closely match ./gmond/metric.h definitions in 2.5.x */
globals {
  daemonize = yes
  setuid = yes
  user = ganglia
  debug_level = 0
  max_udp_msg_len = 1472
  mute = no
  deaf = no
  host_dmax = 0 /*secs */
  cleanup_threshold = 300 /*secs */
  gexec = no
}

/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
 * of a CLUSTER tag.  If you do not specify a cluster tag, then all HOSTS will
 * NOT be wrapped inside of a CLUSTER tag. */
cluster {
  name = "m7ps3"
  owner = "M-7"
  latlong = "unspecified"
  url = "unspecified"
}

/* The host section describes attributes of the host, like the location */
host {
  location = "unspecified"
}

/* Feel free to specify as many udp_send_channels as you like.  Gmond
   used to only support having a single channel */
udp_send_channel {
  host = 197.197.197.1
  port = 8649
}

/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
  port = 8649
  family = inet4
}

/* You can specify as many tcp_accept_channels as you like to share
   an xml description of the state of the cluster */
tcp_accept_channel {
  port = 8649
}

2.2.3. Gmetad (Ganglia Meta Daemon) - konfiguracja.

Wstępne informacje:

- co pewien interwał czasu odpytuje daemon'y gmond na poszczególnych węzłach

- parsuje odpowiedzi XML

- agreguje w bazie danych RRD (round-robin database), RRD – baza o stałym rozmiarze

- konfiguracja: /etc/gmetad.conf

Przechodzimy do konfiguracji daemona gmetad w tym celu edytujemy plik /etc/gmetad.conf. Oraz wprowadzamy zmiany:

root@m7-ps3a ~]# cat /etc/gmetad.conf
# This is an example of a Ganglia Meta Daemon configuration file
#                http://ganglia.sourceforge.net/
#
# $Id: gmetad.conf 667 2006-07-20 08:49:41Z knobi1 $
#
#-------------------------------------------------------------------------------
# Setting the debug_level to 1 will keep daemon in the forground and
# show only error messages. Setting this value higher than 1 will make
# gmetad output debugging information and stay in the foreground.
# default: 0
# debug_level 10
#
#-------------------------------------------------------------------------------
# What to monitor. The most important section of this file.
#
# The data_source tag specifies either a cluster or a grid to
# monitor. If we detect the source is a cluster, we will maintain a complete
# set of RRD databases for it, which can be used to create historical
# graphs of the metrics. If the source is a grid (it comes from another gmetad),
# we will only maintain summary RRDs for it.
#
# Format:
# data_source "my cluster" [polling interval] address1:port addreses2:port ...
#
# The keyword 'data_source' must immediately be followed by a unique
# string which identifies the source, then an optional polling interval in
# seconds. The source will be polled at this interval on average.
# If the polling interval is omitted, 15sec is asssumed.
#
# A list of machines which service the data source follows, in the
# format ip:port, or name:port. If a port is not specified then 8649
# (the default gmond port) is assumed.
# default: There is no default value
#
# data_source "my cluster" 10 localhost  my.machine.edu:8649  1.2.3.5:8655
# data_source "my grid" 50 1.3.4.7:8655 grid.org:8651 grid-backup.org:8651
# data_source "another source" 1.3.4.7:8655  1.3.4.8

data_source "m7ps3" 127.0.0.1:8649

#
# Round-Robin Archives
# You can specify custom Round-Robin archives here (defaults are listed below)
#
# RRAs "RRA:AVERAGE:0.5:1:244" "RRA:AVERAGE:0.5:24:244" "RRA:AVERAGE:0.5:168:244" "RRA:AVERAGE:0.5:672:244" \
#      "RRA:AVERAGE:0.5:5760:374"
#

#
#-------------------------------------------------------------------------------
# Scalability mode. If on, we summarize over downstream grids, and respect
# authority tags. If off, we take on 2.5.0-era behavior: we do not wrap our output
# in GRID>/GRID tags, we ignore all GRID tags we see, and always assume
# we are the "authority" on data source feeds. This approach does not scale to
# large groups of clusters, but is provided for backwards compatibility.
# default: on
# scalable off
#
#-------------------------------------------------------------------------------
# The name of this Grid. All the data sources above will be wrapped in a GRID
# tag with this name.
# default: Unspecified
# gridname "MyGrid"
#
#-------------------------------------------------------------------------------
# The authority URL for this grid. Used by other gmetads to locate graphs
# for our data sources. Generally points to a ganglia/
# website on this machine.
# default: "http://hostname/ganglia/",
#   where hostname is the name of this machine, as defined by gethostname().
# authority "http://mycluster.org/newprefix/"
#
#-------------------------------------------------------------------------------
# List of machines this gmetad will share XML with. Localhost
# is always trusted.
# default: There is no default value
# trusted_hosts 127.0.0.1 169.229.50.165 my.gmetad.org
#
#-------------------------------------------------------------------------------
# If you want any host which connects to the gmetad XML to receive
# data, then set this value to "on"
# default: off
# all_trusted on
#
#-------------------------------------------------------------------------------
# If you don't want gmetad to setuid then set this to off
# default: on
# setuid off
#
#-------------------------------------------------------------------------------
# User gmetad will setuid to (defaults to "ganglia")
# default: "ganglia"
# setuid_username "ganglia"
#
#-------------------------------------------------------------------------------
# The port gmetad will answer requests for XML
# default: 8651
# xml_port 8651
#
#-------------------------------------------------------------------------------
# The port gmetad will answer queries for XML. This facility allows
# simple subtree and summation views of the XML tree.
# default: 8652
# interactive_port 8652
#
#-------------------------------------------------------------------------------
# The number of threads answering XML requests
# default: 4
# server_threads 10
#
#-------------------------------------------------------------------------------
# Where gmetad stores its round-robin databases
# default: "/var/lib/ganglia/rrds"
# rrd_rootdir "/some/other/place"

Edytujemy linie --data_source "m7ps3" 127.0.0.1:8649-- wprowadzając adres pętli zwrotnej i port 8649.

2.2.4. Uruchamianie oprogramowania(gmond,gmetad,httpd).

polecenia:
    /etc/init.d/httpd start
    /etc/init.d/gmond start
    /etc/init.d/gmetad start

polecenie: ( uruchamianie podczas startu systemu)
    chkconfig gmond on
chkconfig gmetad on
chkconfig httpd on

2.3. Ganglia instalacja pozostałe node'y (7001,...,7016).

2.3.1. Instalacja wymaganego oprogramowania.

pozostałe węzły do komunikacji z serwerem wymagają tylko daemon'a gmond

root@m7-ps3a ~]# yum install ganglia-gmond

2.3.2. Gmond (Ganglia Monitoring Deamon) - konfiguracja klient.

Konfiguracja jest analogiczna w stosunku do serwera, można spokojnie skopiować plik /etc/gmond.conf z serwera na pozostałe węzły. Przechodzimy do konfiguracji daemona gmond w tym celu edytujemy plik /etc/gmond.conf. Oraz wprowadzamy zmiany:

cluster {
  name = "m7ps3"
  owner = "M-7"
  latlong = "unspecified"
  url = "unspecified"
}

Zmieniamy pole name, oraz owner wprowadzajac odpowiednio m7ps3 oraz M-7.

udp_send_channel {
  host = 197.197.197.1   /*adres demona agregującego - gmond*/
  port = 8649
}

W polu host wpisujemy adres ip maszyny , oraz port którego node bedzie używał do komunikacji port=8649.

udp_recv_channel {
  port = 8649
  family = inet4
}

tcp_accept_channel {
  port = 8649
}

Port na którym gmond bedzie oczekiwał połączeń również ustawiamy na 8649, oraz wprowadzamy pole family z parametrem inet4 połączenia akcepotowalne tcp należy ustawić również na porcie 8649.

Listing pliku /etc/gmond.conf ( pierwsz 60 lini )

[root@m7-m7-ps308 ]# head -n 60 /etc/gmond.conf
/* This configuration is as close to 2.5.x default behavior as possible
   The values closely match ./gmond/metric.h definitions in 2.5.x */
globals {
  daemonize = yes
  setuid = yes
  user = ganglia
  debug_level = 0
  max_udp_msg_len = 1472
  mute = no
  deaf = no
  host_dmax = 0 /*secs */
  cleanup_threshold = 300 /*secs */
  gexec = no
}

/* If a cluster attribute is specified, then all gmond hosts are wrapped inside
 * of a CLUSTER tag.  If you do not specify a cluster tag, then all HOSTS will
 * NOT be wrapped inside of a CLUSTER tag. */
cluster {
  name = "m7ps3"
  owner = "M-7"
  latlong = "unspecified"
  url = "unspecified"
}

/* The host section describes attributes of the host, like the location */
host {
  location = "unspecified"
}

/* Feel free to specify as many udp_send_channels as you like.  Gmond
   used to only support having a single channel */
udp_send_channel {
  host = 197.197.197.1
  port = 8649
}

/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
  port = 8649
  family = inet4
}

/* You can specify as many tcp_accept_channels as you like to share
   an xml description of the state of the cluster */
tcp_accept_channel {
  port = 8649
}

2.3.3. Uruchamianie oprogramowania(gmond).

polecenia:
    /etc/init.d/gmond start

polecenie: ( uruchamianie podczas startu systemu)
    chkconfig gmond on

2.3.4. Instalacja w pigułce.

Aby instalacja na pozostałych konsolach przebiegała sprawnie -- instalacja skrótowa:

0. Z poziomu root.

1. yum install ganglia-gmond

2. chkconfig gmond on

3. Włączasz mc , przechodzisz do katalogu /etc/gmond.conf i go edytujesz .

4. Edytujesz go zmieniając:

  cluster {
    name = "m7ps3"
    owner = "M-7"
    latlong = "unspecified"
    url = "unspecified"
  }

  udp_send_channel {
    host = 197.197.197.1
    port = 8649
  }

  udp_recv_channel {
    port = 8649
    family = inet4
  }
5. /etc/init.d/gmond start

2.3.5. Test z poziomu konsoli.

Sprawdzanie aktywności maszyn z poziomu konsoli za pomcą polecenia gstat ( nie mylić z qstat-informacje o kolejkach torque)

[m7ps3@m7-ps3a repository]$ gstat
CLUSTER INFORMATION
       Name: m7ps3
      Hosts: 16
Gexec Hosts: 0
 Dead Hosts: 0
  Localtime: Sun Sep 13 21:04:22 2009

2.4. Moduł PHP WEB FRONTED.

Dzięki gmetad oraz httpd, mamy do dyspozycji web'owy interfejs programu ganglia dostępny pod adresem 111.222.333.444/ganglia.

2.4.1. Strona powitalna.

Ogólne informacje odnośnie monitorowanego klastra, mamy do dyspozycji 32 procesory na 16 maszynach , wszystkie maszyny są aktywne (Host down = 0), cztery środkowe wykresy informują globalnie o stanie klastra, wartości liczbowe przeliczane są za pomocą specjalnych algorytmów dzięki czemu możemy obserwować wyniki w postaći przejrzystych grafów.

Informacje odnośnie ilości maszyn i sprzętu prezentuje wykres LOAD, następnie dalej jest graf przezentujące stan CPU klastra, pamięci MEMORY oraz zajetości sieci (NETWORK).

W każdej chwili możemy ustawić intresującą nas metryką (jest ich 37) oraz zdefiniować okres pomiaru jaki nas interesuje (max: rok) wstecz.

Pobranie aktualnych statystyk następuje po kliknięciu przycisku "GET FRESH DATA".

2.4.2. Dokładne statystyki węzłów.

Pod wykresami ogólnymi stanu całego klastra widnieją informacje odnośnie node'ów, aby uzyskać wszystkie statystyki (grafy, wykresy, info odnośnie sprzętu) należy kliknąć w wybrany wykres albo skorzystać z pola wyboru --Choose a Node --.

Po kliknięciu m7ps301 mamy:

Poniżej bardzo szczegółowe grafy zawierające wszytkie informacje o stanie danego węzła

2.5. Wersje oprogramowania GANGLIA (przegląd).

SERWER GŁÓWNYCH host: xxx.yyy.pk.edu.pl

[m7ps3@m7-ps3a ~]$ rpm -qa | grep ganglia
ganglia-web-3.0.7-1.fc9.ppc
ganglia-3.0.7-1.fc9.ppc
ganglia-gmetad-3.0.7-1.fc9.ppc
ganglia-gmond-3.0.7-1.fc9.ppc

[m7ps3@m7-ps3a ~]$ rpm -qa | grep rrdtool
rrdtool-1.3-0.12.beta4.fc9.ppc

[m7ps3@m7-ps3a ~]$ rpm -qa | grep httpd
httpd-2.2.8-3.ppc
httpd-tools-2.2.8-3.ppc

[m7ps3@m7-ps3a ~]$ rpm -qa | grep php
php-cli-5.2.5-7.fc9.ppc
php-5.2.5-7.fc9.ppc
php-gd-5.2.5-7.fc9.ppc
php-common-5.2.5-7.fc9.ppc

KLIENT hosty: m7ps301,m7ps302,m7ps303,...,m7ps316

[m7ps3@m7ps301 ~]$ rpm -qa | grep ganglia
ganglia-gmond-3.0.7-1.fc9.ppc
ganglia-3.0.7-1.fc9.ppc64

2.6. Autoryzacja 111.222.333.444/ganglia .

W celach bezpieczeństwa wprowadzona została autoryzacja użytkownika , hasło wygenerowane zostało za pomocą programu htpasswd -c.

htpasswd -c ./home/services/httpd/.htpassword  m7admin

Sposób szyfrowania jest standardowym jakie oferują systemy Linux , listing pliku .htpassword ( hasło jest szyfrowane ):

[root@m7-ps3a httpd]# cat .htpasswd
m7admin:hc1TdyfEUsXqQ

Takie zabezpieczenie jest wystarczające w szczególności, że usługa ganglia nie oferuje możliwości ingerencji w procesy bądź konfigurację systemu. Poniewż gmetad korzysta z apache w pliku konfiguracyjnym httpd zostały wprowadzony odpowiednie zmiany odnośnie wyświetlania usługi.

Logowanie: wprowadź login oraz hasło

3-krotnie wprowadzone błędne hasło

2.7. WHO USES GANGLIA?.

Ganglia jest zdecydowanie najpopularniejszym systemem monitoringu grid'ów, używają jej między innymi takie potęgi jak Motorola, HP, Microsoft, Cisco oraz najpoularniejsze i najbardziej renomowane universytety Havard, Stanford, Yale teraz także Cracow University of Technology

1. Berkeley (the birthplace of ganglia)
2. Twitter
3. flickr
4. last.fm
4. San Diego Supercomputing Center (contributed great code to the project)
5. Massachusetts Institute of Technology (MIT)
6. National Aeronautics and Space Administration (NASA)
7. National Institutes of Health (NIH)
8. Reuters
9. Internet Archive
10. Industrial Light  Magic
11. Wikipedia (check it out!)
12. Virginia Tech (built the fastest supercomputer at any academic institution in the world using ganglia)
13. Dow Chemical
15. Motorola
16. Harvard
17. D.E. Shaw
18. Lucent
19. CERN
20. Cisco
21. Sun (thanks for recommending ganglia for Grid Infrastructure!)
22. HP
23. Microsoft
24. Dell (thanks for the hardware donation!)
25. Cray
26. Boeing
27. Lockheed-Martin
28. GE Global Research
30. Cadence Design Systems
31. nVidia
32. Duke University
33. Bank of America
34. Queensland University of Technology
35. Georgetown University
36. UOL.com
37. PriceGrabber.com
38. Ticket Master
39. Qinetiq
40. Cummins
41. freescale
42. Sandia National Laboratories
43. Rocketcalc
44. Yale
45. Deutsches Elektronen-Synchrotron
46. bp
47. Nortel
48. LexisNexis
49. Landmark
50. SARA
51. Bellsouth
52. University of Pisa, Italy
53. X-ISS
54. Tennesee Tech University
55. Princeton
56. The Moving Picture Company
57. University of Michigan
58. Universite De Sherbrook
58. The Royal Bank of Scotland
59. U.S. Air Force
60. Celgene
61. Groundwork
62. Brookhaven National Laboratory
63. N.E.C.
64. GlobeXplorer
65. John Deere
66. Xilinx
67. Freddie Mac
68. jeteye
69. Tokyo Institute of Technology
70. Purdue University
71. Stanford
                                         info: http://ganglia.info/

3. Dodatkowe czynności administracyjne

3.1. Ponowne uruchomienie klastra.

W razie zaniku zasilania, awarii, zaistnienia init 6 poniższe usługi zostaną automatycznie włączone po reboot'cie

[root@m7-ps3a ~]# /sbin/chkconfig --list |grep '3:włączone' | sed -e 's/ączone/./g' | sort
atd             0:wył.  1:wył.  2:wył.  3:wł.   4:wł.   5:wł.   6:wył.
crond           0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
gmetad          0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
gmond           0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
haldaemon       0:wył.  1:wył.  2:wył.  3:wł.   4:wł.   5:wł.   6:wył.
httpd           0:wył.  1:wył.  2:wył.  3:wł.   4:wył.  5:wył.  6:wył.
iptables        0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
irqbalance      0:wył.  1:wył.  2:wył.  3:wł.   4:wł.   5:wł.   6:wył.
mdmonitor       0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
messagebus      0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
netfs           0:wył.  1:wył.  2:wył.  3:wł.   4:wł.   5:wł.   6:wył.
network         0:wł.   1:wł.   2:wł.   3:wł.   4:wł.   5:wł.   6:wł.
nfs             0:wł.   1:wł.   2:wł.   3:wł.   4:wł.   5:wł.   6:wł.
nfslock         0:wył.  1:wył.  2:wył.  3:wł.   4:wł.   5:wł.   6:wył.
pbs_mom         0:wył.  1:wył.  2:wył.  3:wł.   4:wył.  5:wł.   6:wył.
pbs_sched       0:wył.  1:wył.  2:wył.  3:wł.   4:wył.  5:wł.   6:wył.
pbs_server      0:wył.  1:wył.  2:wył.  3:wł.   4:wył.  5:wł.   6:wył.
pcscd           0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
restorecond     0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
rpcbind         0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
rpcgssd         0:wył.  1:wył.  2:wył.  3:wł.   4:wł.   5:wł.   6:wył.
rpcidmapd       0:wył.  1:wył.  2:wył.  3:wł.   4:wł.   5:wł.   6:wył.
rsyslog         0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
sshd            0:wł.   1:wł.   2:wł.   3:wł.   4:wł.   5:wł.   6:wł.
udev-post       0:wył.  1:wł.   2:wł.   3:wł.   4:wł.   5:wł.   6:wył.

Po ponownym uruchomieniu systemu, torque(pbs) oraz ganglia zostaną wznowione.

3.2. Htop, monitoring lokalny.

Aplikacj służy do monitorowania systemu loklanie (wzbogacony top)


Ekran powitalny programu htop, informacje odonośnie aktywnych procesów zajętości pamięci,cpu. Interfejs jest bardzo intuicyjny możemy łatwo wyszukać interesujący nas proces.

F1 -- help
F3 -- wyszukaj proces
F9 -- zabij proces
F5 -- tree
F10 -- wyjście z programu

3.3. Interfejs graficzny PBS.

Zainstalwany na węźle główny oraz węźle 7008 , możliwość uruchamiana tylko z poziomu X-Window

polecenie: yum intall torque-gui

Ułatwia użytkowanie systemu torque, możliwość przeglądania aktywnych kolejek oraz zadań przewidzianych do wykonania. Ponadto możemy wstrzymywać zadania usuwać je z kolejki przenosić do innej kolejki, aplikacja łączy się z serwerem głównym (197.197.197.1) i pobiera aktualne informacje na temat stanu zadań i aktywnych kolejek.

Uruchomienie programu następuje po wpisaniu w oknie terminala hasła xpbs .

Wygodny interfejs w szczególności dla użytkowników końcowych nie zagłębiających sie bardzo w system . Generalnie przeglądanie aktywanych zadań i możliwość ich wstrzymania oraz usunięci. Niestety nie ma możliwości dodania nowego zadania z poziomu gui trzeba używać qsub w oknie terminala.

3.4. Dokładne informacje na temat zleconego zadania TRACEJOB.

Ciekawym polceniem odnośnie zadania jest tracejob JOB_ID , najwięcej informacji możemy uzyskać wywołując go z maszyny na której postawiony został serwer torque czyli (xxx.yyy.pk.edu.pl) z poziomu użytkownika root. Poniżej przykład dla zadania nr. 70.

[root@m7-ps3a ~]# tracejob 70
/var/torque/mom_logs/20090914: No matching job records located

Job: 70.xxx.yyy.pk.edu.pl

09/14/2009 22:53:26  S    enqueuing into workqueue, state 1 hop 1
09/14/2009 22:53:26  S    Job Queued at request of m7ps3@m7ps301, owner =
                          m7ps3@m7ps301, job name = zadanie_test, queue =
                          workqueue
09/14/2009 22:53:26  A    queue=workqueue
09/14/2009 22:54:26  S    Job Modified at request of
                          Scheduler@xxx.yyy.pk.edu.pl
09/14/2009 22:54:26  L    Job Run
09/14/2009 22:54:26  S    Job Run at request of Scheduler@xxx.yyy.pk.edu.pl
09/14/2009 22:54:26  A    user=m7ps3 group=m7ps3 jobname=zadanie_test
                          queue=workqueue ctime=1252961606 qtime=1252961606
                          etime=1252961606 start=1252961666 exec_host=m7ps301/0
                          Resource_List.cput=24:00:00
                          Resource_List.neednodes=m7ps301 Resource_List.nodect=1
                          Resource_List.nodes=m7ps301
                          Resource_List.walltime=00:01:00
09/14/2009 22:54:32  S    Exit_status=0 resources_used.cput=00:00:00
                          resources_used.mem=0kb resources_used.vmem=0kb
                          resources_used.walltime=00:00:04
09/14/2009 22:54:32  A    user=m7ps3 group=m7ps3 jobname=zadanie_test
                          queue=workqueue ctime=1252961606 qtime=1252961606
                          etime=1252961606 start=1252961666 exec_host=m7ps301/0
                          Resource_List.cput=24:00:00
                          Resource_List.neednodes=m7ps301 Resource_List.nodect=1
                          Resource_List.nodes=m7ps301
                          Resource_List.walltime=00:01:00 session=3946
                          end=1252961672 Exit_status=0
                          resources_used.cput=00:00:00 resources_used.mem=0kb
                          resources_used.vmem=0kb
                          resources_used.walltime=00:00:04
09/14/2009 22:54:36  S    dequeuing from workqueue, state COMPLETE

bardzo szczegółowe informacje na temat zadania (czas, kto zlecił, kto wykonał, zasoby), na końcu widnieje bardzo ważna wiadomość mianowicie "state COMPLETE".