Uzun zaman önce "cluster" sistemi kurabilmek için uğraşmıştım. Sonrasında aldığım notlar ile bir döküman oluşturdum. Aldığım hatalar ve çözüm yöntemleriyle birlikte "cluster handbook" oluşturmaya çalıştım. Umarım işinize yarar.

1.Giriş

Cluster’ın kelime anlamı “salkım” manasındadır. Bunu bilgisiyar diline çevirdiğimizde birbirine fiziksel kablolarla bağlı onlarca sunucunun tek bir merkezden yönetilmesi diyebiliriz. Sunucular kümelendiği için onları tek bir sunucu gibi yönetme imkanı vardır. Yazılımları, güncelleştirmeleri veya uygulamaları tüm sunuculara tek elden yükleme imkanı sağlar. Clustering bir çok verimerkezlerinde güvenlik veya performans amaçlı kullanılmaktadır. Dünyadaki süper bilgisiyarlar da cluster yapısında çalışmaktadır. (http://i.top500.org/system/8819) Hesaplamalı bilimlerde de herhangi bir hesaplamayı birbirine paralel onlarca bilgisiyara paralel programlama altyapıları kullanılarak (OpenMPI,MPI,MPICH2vs.) paylaştırılarak işin daha hızlı ve doğru yapılması amaçlanmaktadır. Windows ve Linux'un özelleştirilmiş çeşitli cluster yapıları mevcuttur.

2. Cluster Yapısı ve Kurulumu

sunucular aşağıdaki No'lu sabit IP'li sunuculardan oluşmaktadır.

• 10.128.70.151
• 10.128.70.152
• 10.128.70.153
• 10.128.70.158

Debian işletim sistemi kurulumundan sonra bazı sunucular üzerinde haberleşme sorunları olduğu gözlenmiştir. 10.128.70.154 No'lu makine diğer sunucular ile sağlıklı iletişim kuramaması, iletişimin belirli aralıklarla kesilmesi üzerine Cluster yapısından çıkarılmıştır. Sunucuların birbirleriyle haberleşebilmesi için SSH altyapısı kullanılmıştır. Clusterın çalışabilmesi için cluster altyapısındaki tüm sunucuların birbirleriyle şifresiz olarak haberleşmek zorundadırlar. İlerde bu konuya değenilecektir.

Cluster kurulumu 7 aşamadan oluşmaktadır. Bunlar :

• Hostnameleri Tanımlama
• NFS ile Dosya Paylaşımı ve Kurulumu
• MPI kurulumu için kullanıcı oluşturma
• SSH sunucusu kurulumu
• SSH ile Node'lar Arasında Bağlantının Kurulması
• GCC ve gerekli diğer derleyicilerin yüklenmesi
• MPICH2 kurulumu

1. Hostnameleri Tanımlama

Hostnameler aşağıdaki gibi tüm sunucuların /etc/hosts dosyasında tanımlanmıştır.

127.0.0.1 localhost
10.128.70.158 mshowto.org mshowto
10.128.70.151 n1
10.128.70.152 n2
10.128.70.153 n3
10.128.70.158 n0

2. NFS Kurulumu

NFS kurulumu merkez olarak seçilen 10.128.70.158 no'lu sunucuda yapılmıştır.

2.1. Merkez Node'ın üzerine NFS yüklenildi. 

root@debian~$ apt-get install nfs-kernel-server

2.2. Paylaştırılacak “mirror” adlı paylaşım klasörü oluşturuldu. 

root@debian~$ mkdir /mirror

2.3. /etc/exports dosyasına aşağıdaki satır eklenmiştir.

/mirror 10.128.70.151(rw,sync,no_subtree_check)
/mirror 10.128.70.152(rw,sync,no_subtree_check)
/mirror 10.128.70.153(rw,sync,no_subtree_check)
/mirror 10.128.70.154(rw,sync,no_subtree_check)
/mirror 10.128.70.155(rw,sync,no_subtree_check)
#/mirror 10.128.70.157/24(rw,sync,no_subtree_check)

/usr/local/bin 10.128.70.0/24 (rw,sync,no_subtree_check)

rw: okuma ve yazma yetkileri verildi
sync: Veriler senkronize edilmesi sağlandı. Herhangi bir sunucunun /mirror dosyası altında yapacağı bir değişiklik sunucularda aynı anda görülebiliyor. 

2.4. NFS Servisleri yeniden başlatılması gerekiyor. 

root@debian~$ service portmap restart

root@debian~$ service nfs-kernel-server restart

2.5. Firewall 'ın konfigüre edilmesi gerekiyor. 111 ve 2409 No'lu portları aşağıdaki komutlar yardımıyla açmak gerekiyor. 

root@debian~$ iptables -I INPUT num -p tcp --dport 111 –s ub1_hostname --j ACCEPT

root@debian~$ iptables -I INPUT num -p tcp --dport 2049 --s ub1_hostname --j ACCEPT

2.6. Clientlar üzerinde /mirror dosyası “mount” ediliyor. 

root@debian~$ apt-get install nfs-common

root@debian~$ mount n0:/mirror /mirror

…

1. Kullanıcı Hesabı Yaratma MPI Programı İçin

3.1. /mirror dizinin altında tüm node'lar için mpiuser kullanıcısı oluşturuldu.

root@debian~$ useradd -d /mirror/mpiuser -m -s /bin/bash mpiuser

root@debian~$passwd mpiuser

… #aynı prosesi diğer node'lar üzerinden de uygulanması gerekmektedir.

Mpiuser için her node'da aynı şifrenin verilmesi gerekmektedir.

Projede Kullanıcı adı : “mpiuser” ; şifre: “user123” seçilmiştir. 

3.2. /mirror dosyasının sahipliği “mpiuser” kullanıcısına alınmaktadır.

root@debian~$ chown mpiuser /mirror

…#aynı işlemin tüm node'lar üzerinde uygulanması gerekmektedir.

1. SSH Sunucusu Kurulumu

Sunucular arasındaki haberleşmenin sağlıklı olabilmesi için node'lar arasında SSH sunucusu kurulmuştur. Aşağıdaki işlemin sunuculara uygulanması gerekmektedir.

root@debian~$ apt--get install openssh--server

…

5. Node'lar Arasında Şifresiz Bağlantı 

Node'lar arasında eğer şifresiz bağlantı gerçekleşmez ise Cluster sistemi çalışamaz. Bundan dolayı bu bölümün dikkatlice işleme alınması gerekiyor. Bölüm sonunda testlerin yapılması gerekmektedir.

5.1. n0'a(10.128.70.158 NFS Server, n0 olarak tanıtılmıştır) mpiuser olarak giriş yapılır:

root@debian~$ su mpiuser

5.2. SSH-Key üretilir:

mpiuser@n0:~$ ssh-keygen -t dsa # SSH – keygen üretildi. Keygene “home” dizini altında /.ssh/id_dsa.pub ile ulaşılabilir.
5.3. Eğer NFS server çalışıyorsa node'lara aşağıda verilen komut ile çalıştırılacak “id_dsa.pub” dosyası “authorized_keys” dosyasına kopyalanır.

mpiuser@n0:~$ cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys


5.4. Eğer NFS Server çalışmıyorsa bütün nodelara aşağıdaki komut yardımıyla “id_dsa.pub” dosyasının kopyalanması gerekir:

mpiuser@n1:~$ cat id_dsa.pub >>~/.ssh/authorized_keys
…

5.5. SSH login'in test edilmesi aşağıdaki komut yardımıyla yapılır.

mpiuser@n0:~$ ssh n1 hostname

#Şifre istememesi ve eğer şifre istenirse de yapılan adımların tekrar gözden geçirilmesi gerekmektedir.

6. GCC Derleyicisi Kurulumu

mpiuser@n0:~$apt-get install build-essential

…#Sunucularun hepsine GCC derleyecisinin yüklenmesi gerekmektedir.

7. MPICH2 Kurulumu 

7.1. MPICH2 apt-get ile kurulabilir ama sağlıklı çalıştırabilmesi ve doğru yere yüklenmesi için “source code” ile yüklenmesi gerekmektedir.:

1. Yol: mpiuser@ub0:~$ sudo apt-get install mpich2

Kaynak Kod ile MPICH Kurulumu:

Kaynak kod ile kurmak için aşağıdaki işlemler sırasıyla uygulanır. #MPICH2 resmi sitesi: MPICH | High-performance and Portable MPI. Kaynak kodlarına ve örnek programlara bu site vasıtasıyla ulaşılabilir.

mpiuser@n0:~$wget http://www.mcs.anl.gov/research/proj....tar.gz

#Kaynak kodu belirtilen adresten indiriyoruz. 

mpiuser@n0:~$tar -xvf mpich2-1.4.1p1.tar.gz
#mpich2 dosyasını tar ile açıyoruz.

Eğer “tar” opsiyonu sunucularda bulunmuyorsa aşağıdaki yöntemler kullanılabilir:

gunzip mpich2-1.4.1p1.tar.gz
tar xf mpich2-1.4.1p1.tar
cd mpich2-1.4.1p1




MPICH2 dosyasının nereye yükleneceğini belirtmek gerekiyor:

csh ve tcsh için:

./configure --prefix=/home/<USERNAME>/mpich2-install |& tee c.txt

bash ve sh için:

./configure --prefix=/home/<USERNAME>/mpich2-install 2>&1 | tee c.txt

MPICH2 Kurulumu:

csh ve tcsh için:

make |& tee m.txt

bash ve sh için:

make 2>&1 | tee m.txt

MPICH2 Yükleme Aşaması:

for csh and tcsh:

make install |& tee mi.txt

for bash and sh:

make install 2>&1 | tee mi.txt

Bu adım örnek argüman tarafından belirtilen dizin /bin alt dizininde gerekli tüm çalıştırılabilir scriptleri toplar.

Bu aşamadan sonra, /mirror/mpiuser/.bashrc dosyasına aşağıdaki satırlar girilir.

export PATH=/mirror/mpiuser/mpich2-install/bin:$PATH
export LD_LIBRARY_PATH=/mirror/mpiuser/mpich2-install/lib:$LD_LIBRARY_PATH
export INCLUDE=/mirror/mpiuser/mpich2-install/include:$INCLUDE

7.2. Kurulum aşamasından sonra MPICH2'nin çalışıp çalışmadığı test edilir:

root@uybhm:~# which mpiexec
/usr/local/bin/mpiexec
root@uybhm:~# which mpirun
/usr/local/bin/mpirun


7.3.Bu aşamadan sonra artık program derlenme aşamasına geçilir:

7.3.1. Node'ların IP'lerinin yer aldığı bir “host” dosyası oluşturulur. 

mpiuser@ub0:~$ vi machinefile

10.128.70.151
10.128.70.152
10.128.70.153
10.128.70.158


7.4. Paralel hesaplama testi yapılır. 

7.4.1. Derleme aşaması:

Hello World MPI Examples bu adresten herhangi bir MPI kodu indirilir ve .c uzantılı olarak kaydedilir. Bunun için “hello.c” dosyası seçildi.

Mpicc hello.c -o hello
mpiexec.hydra -f machinefile -n 32 /mirror/mpiuser/hello

Bazı dökümanlardaa “mpiexec.hydra” yerine “mpiexec” yazılmıştır. Bu şekilde program doğru çalışmamaktadır. 32, process sayısını göstermektedir. Bu sayı keyfidir ve arttırıp azaltmak mümkündür. Machinefile ise cluster yapısındaki sunucuların IP adresleri yer almaktadır. Yine dökümanlarda /mirror/mpiuser/hello yerine /hello dizini gösterilmiştir. Eğer sadece /hello dizini gösterilirse:

[proxy:0:2@uybhm] HYDU_create_process (./utils/launch/launch.c:69): execvp error on file /hello (No such file or directory)

Bu çeşit bir hata vermektedir. Bundan dolayı çalıştırılacak “c” dosyasının tam yeri yazılması zorunludur.

Komutların çalışabilmesi için 10.128.70.151 no'lu sunucuda

su mpiuser
cd /mirror/mpiuser

Komut işlemlerin yapılması gerekmektedir. Mpich2 dosyaları /mirror/mpiuser dosyaları altında olduğundan dolayı eğer root kullanıcı ile işlem yapılması istenirse hata verecektir. Bu hata -bash: mpicc: command not found şeklinde olacaktır.


Komutları işletildiğinde aşağıdaki gibi bir çıktı alınması gerekmektedir:


./hello komutu işletildikten sonra aşağıdaki gibi bir çıktı alınabilir.


Kaynaklar:

http://www.webstreet.com/super_compu...th-ubuntu.html