Dobre sposoby ponownego uruchomienia wszystkich komputerów w zdalnym klastrze?


2

Mam klaster, którym zarządzam i od czasu do czasu otrzymuję wiadomości e-mail z każdego węzła (i węzła głównego), prosząc o ponowne uruchomienie po automatycznej aktualizacji.

Obecnie moim najlepszym rozwiązaniem jest skrypt powłoki, taki jak:

 $> cat cluster_reboot.sh
 ssh root@node1.host.edu reboot
 ssh root@node2.host.edu reboot
 ssh root@node3.host.edu reboot
 ssh root@node4.host.edu reboot
 ssh root@node5.host.edu reboot
 ssh root@headnode.host.edu reboot

W końcu po prostu wpisuję hasło roota sześć razy, ale chyba działa. Czy jest lepszy sposób? Czy mogę zmusić węzeł główny do ponownego uruchomienia komputerów?

UPDATE: Chciałbym uniknąć korzystania z keyless login dla root użytkownik ... ale to metoda, która na pewno zadziała.

AKTUALIZACJA 2: W końcu pary kluczy mogą być używane. Co z loginem z kluczem do węzła głównego, a następnie bez logowania z węzła głównego do wszystkich węzłów obliczeniowych. Potem coś takiego:

 $> ssh root@headnode
 Enter password for 'root':
 [<headnode>]$: cat cluster_reboot.sh
 ssh root@node1.host.edu reboot
 ssh root@node2.host.edu reboot
 ssh root@node3.host.edu reboot
 ssh root@node4.host.edu reboot
 ssh root@node5.host.edu reboot
 echo "Nodes rebooted. Rebooting this computer now."
 reboot
 [<headnode>]$: sh cluster_reboot.sh
 "Nodes rebooted. Rebooting this computer now."

Myślę, że to może być bezpieczne + łatwe rozwiązanie.


4
Zamieść moc do budynku?
Phoshi

Odpowiedzi:


1

Może robienie systemu sprawdzania i sprawdzania może również tutaj działać?

Zakładając, że masz jakiś serwer HTTP działający na głównym węźle, możesz napisać trochę skryptu php / perl / any, który pozwala oznaczyć, które komputery są w stanie zrestartować komputer.

Następnie na każdym węźle umieść zadanie cron, które odpytuje ten skrypt, aby sprawdzić, czy można ponownie uruchomić komputer. Jeśli węzeł główny wyśle ​​ok, to powinien się zrestartować. Gdy headnode wyśle ​​polecenie ok-to-reboot, może usunąć flagę.

Ustawiłbym to przy użyciu katalogu z kilkoma plikami tekstowymi, jeśli skrypt zobaczy nazwę, a następnie odsyła ok, aby zrestartować, a następnie usuwa plik. Łatwe w zarządzaniu, ponieważ wystarczy je dotknąć, aby wyrazić zgodę. Bezpieczne, ponieważ nigdy nie musisz przekazywać żadnej z tych informacji bezpośrednio do systemu plików.

Każdy skrypt w podrzędnych węzłach sprawdzałby po prostu nazwę hosta lub coś;

http: // headnode / reboot? name = subnode1

Sprawdzanie co 5 minut nie powinno być zbyt obciążające.


1

Skonfiguruj SSH, aby korzystał z uwierzytelniania opartego na certyfikatach. Następnie użyj polecenia takiego jak to:

$ for h in node1 node2 node3 node4 node5 headnode; do
>   ssh root@$h reboot
>   done

1

Proponuję skonfigurować zarządzanie pozapasmowe dla klastra. W ten sposób można dotrzeć do konsoli, nawet jeśli skrzynka spadnie z sieci, a zdalne ponowne uruchomienie komputerów jest bardzo proste. Będziesz musiał wydać pieniądze na zakup dedykowanego pudełka z dodatkowymi portami szeregowymi i przetaczanie własnego lub specjalnie skonstruowanego koncentratora portów szeregowych. To oczywiście nie jest najtańszym rozwiązaniem, ale ułatwi zarządzanie zdalne.


Dobre rozwiązanie. Ale nie w moim budżecie 0 $!
physicsmichael


0

Nie jest to rozwiązanie tego problemu, ale Skały to klaster „distro” zbudowany na CentOS, który ma klucze ssh i śledzi liczbę posiadanych węzłów. Po prostu biegniesz rocks run host reboot zrestartować wszystkie węzły. Rocks ma wszystko, czego potrzebujesz do pełnego klastra HPC, a ja osobiście wypróbowałem go w klastrze z ponad 1200 węzłami.


zazwyczaj sugerowałbym opublikowanie czegoś takiego jako komentarza, ale myślę, że to uczciwa odpowiedź. jest możliwe (być może nawet prawdopodobne), że dystrybucja klastrowa używana przez OP ma podobne polecenie. oczywiście co polecenie zależy od szczegółów tego, czego używa OP. dzięki za to.
quack quixote

To było przydatne. Przygotowuję inny klaster z CentOS, a teraz zajrzę do Rocków.
physicsmichael

0

Użyj ansible narzędzie do administrowania klastrami, być może połączone z polecenie „at” zaplanować ponowne uruchomienie do własnych potrzeb.

Możesz skonfigurować skrypt („playbook” w terminologii ansible), ale generalnie robię to za pomocą interfejsu wiersza poleceń „ad hoc”, coś w tym stylu:

ansible clusternodes -m shell -a "echo shutdown -r +15 | at 6am Monday" -sK

Gdzie clusternodes jest aliasem do zestawu hostów zdefiniowanych w moim ansible Inwentarz , -m shell oznacza „uruchom to w linii poleceń”, -a "blah" daje polecenie powłoki i -sK oznacza „uruchom w trybie sudo i poproś mnie o hasło.

(Uwaga: najpierw będziesz chciał skonfigurować klucze SSH, aby uzyskać dostęp do węzłów bez hasła).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.