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 [email protected] reboot
ssh [email protected] reboot
ssh [email protected] reboot
ssh [email protected] reboot
ssh [email protected] reboot
ssh [email protected] 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 [email protected] reboot
ssh [email protected] reboot
ssh [email protected] reboot
ssh [email protected] reboot
ssh [email protected] 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.
Odpowiedzi:
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.
źródło
Skonfiguruj SSH, aby korzystał z uwierzytelniania opartego na certyfikatach. Następnie użyj polecenia takiego jak to:
źródło
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.
źródło
Posługiwać się pary kluczy ssh więc nie musisz wpisywać hasła tyle razy.
źródło
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.źródło
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:
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).
źródło