Perjantaina kello 1241 eräs rakas devaajamme kommitoi galtsuun uutta koodia. Koodi, joka toimi hyvin testausympäristössä, ei toiminutkaan täysin samalla tavalla tuotannossa, vaan alkoi kuormittamaan www-palvelimia enemmän kuin oli tarkoitus. Virhe huomattiin nopeasti, jonka johdosta tehtiin korjaus, joka ikävä kyllä aiheutti päättymättömän silmukan sisällä tapahtuvan virheen. Tällöin jokaisesta aiheutuneesta virheestä lähetetään viesti verkon yli logipalvelimelle joka tallentaa kaikki tapahtumat tiedostoon. Virhetilanne syntyi jokaisesta galtsun etusivun latauksesta.
Tämä ei tullut ilmi välittömästi, sillä www-palvelimissa on varalla reilusti todellista tarvetta enemmän kapasiteettia. Kuitenkin koska sivupyynnöt eivät valmistuneet, vaan jäivät ikuiseen silmukkaan, palvelimien vapaat resurssit hupenivat muutamassa minuutissa loppuun.
Valvontamonitorit huomasivat ongelmatilanteen nopeasti, mutta tällöin oli jo liian myöhäistä reagoida - webipalvelimien verkosta siirtyi logipalvelimen verkkoon noin miljoona pakettia sekunnissa, mikä ylikuormitti verkkojen välissä olevan reitittimen/palomuuriin.
Tämän johdosta webipalvelimet eivät saaneet enää yhteyttä levyjärjestelmään, koska levyjärjestelmä sijaitsee palomuurin toisella puolella. Tämän takia klusterin hallintaan tarkoitetut työkalut eivät enää saaneet yhteyttä webipalvelimiin, josta seurasi ettei webipalvelimia voinut enää sammuttaa. Samanaikaisesti yhteydet hallintapalvelimille menivät jumiin koska palomuuri yritti keskittyä reitittämään kaikkea webiverkosta tulevaa logiliikennettä. Et silleen.
Tilanteen vakavuuden selvittyä ylläpidon aina valmiustilassa olevat erikoisjoukot keskeyttivät Mario Kartin peluun ja riensivät oitis korjaamaan tilannetta. Normaalisti pienissä ongelmatilanteissa kytketään galtsuun väliaikaisesti virhesivu päälle, joka kertoo ystävällisesti käyttäjille jotain olevan pielessä. Valitettavasti virhesivua palvelevat www-palvelimet olivat myös jumissa. Lopulta emme löytäneet muuta ratkaisua kuin sammuttaa webiklusterin edessä olevat kuormantasaajat tarkoituksena estää uusien sivupyyntöjen pääsy www-palvelimiin, jotta virheellinen toiminta lakkaisi.
Valitettavasti ikiloopissa pyörivät virheelliset skriptit olivat edelleen ajossa www-palvelimilla, jonka johdosta kaikki tuotantoverkot olivat jumissa. www-palvelinverkon totaalinen eristäminen palautti muut tuotantoverkot toimintaan, mutta ongelma palasi välittömästi kun verkko kytkettiin takaisin toimintaan.
Lopulta ainoa jäljellä oleva vaihtoehto oli jälleenkäynnistää etähallinnan avulla jokainen www-palvelin erikseen, kytkeä www-palvelinverkko takaisin muuhun tuotantoverkkoon ja käynnistää varovasti www-palvelin kerrallaan samalla tarkkaillen ettei tilanne pääse eskaloitumaan uudelleen vastaavaksi ketjureaktioksi.
Yritämme pohtia miten saisimme vastaisuudessa estettyä vastaavan ongelman syntymisen. Hyvää viikonloppua :)