Cookie Warning

Thursday 2 August 2012

gsh czyli grupowe SSH

GSH (obecnie przemianowany na Polysh), ktorego nazwa pochodzi od Group Shell, to skrypt umozliwiajacy rownolegle polaczenie z dowolna (ograniczeniem sa tutaj mozliwosci systemu) iloscia serwerow poprzez SSH. Dzieki temu mozemy wykonac dowolne polecenie na wielu hostach naraz. Oczywiscie fani Bash'a zapytaja "ale w czym to lepsze od prostej petli for?":
for i in `db0{01...20}`; do uname -a; done; 
Chocby w tym, ze powyzszy skrypt bedzie wykonywal sie dla kazdego hostu po kolei. W przypadku malej liczby serwerow i szybko wykonujacego sie polecenia nie ma wiekszych problemow. Zaczynaja sie one, gdy mamy wiele (powiedzmy ponad 50) serwerow i skrypt ktory wykonuje sie kilkanascie/kilkadziesiat sekund. W takim przypadku docenimy mozliwosc rownoleglego wykonania tego polecenia na wszystkich hostach. Oczywiscie mozemy z pomoca bash'a wykonac to rownolegle, jednak naklad pracy jest zdecydowanie wiekszy. Do tego wykonanie tego samego polecenia za pomoca gsh jest duzo prostsze:
gsh db0"<01-20>" --command='uname -a' 
#lub
gsh db0"<01-20>"
Ready(20) > uname -a
Pierwszy przykład stosuje rzadko - praktycznie tylko gdy wynik dzialania skryptu na wielu hostach jest dodatkowo przetwarzany dalej (sort, wc, grep etc.). Drugi przyklad umozliwia nam dzialanie jak na zwyklej konsoli, z ta roznica ze polecenie jest wykonywane na wszystkich hostach jednoczesnie. W przypadku maszyn wirtualnych, na kotrych wywolanie danego polecenia/skryptu wywoluje duze obciazenie warto pamietac o zadbaniu by skrypt nie uruchamial sie w tym samym czasie na wszystkich wirtualkach:
sleep $(( $RANDOM%120));

No comments:

Post a Comment