Search
1000 results for “Urist_McRabbit”
-
#PhotOctober2023
J5, thème 1 et 2
#Film et #BizarreJ'ai trouvé très bizarre ce canapé et cette télé sortie du sable d'une plage déserte de l'ile d'#Uist (Hébrides, Écosse).
Je m'y suis installé pour regarder un improbable film 🤔 -
#PhotOctober2023
J5, thème 1 et 2
#Film et #BizarreJ'ai trouvé très bizarre ce canapé et cette télé sortie du sable d'une plage déserte de l'ile d'#Uist (Hébrides, Écosse).
Je m'y suis installé pour regarder un improbable film 🤔 -
Cycling north & south #Uist on the Outer #Hebrides - my #bikepacking Scotland diary day 16 - there are beaches & sunsets after the storm on day 15
https://youtu.be/n8pPu0aHBY4 -
[Veille] Aline Bouchard, Christophe Boudry. Utilisation et usages des identifiants numériques chercheurs en France. Synthèse de l’enquête nationale 2023. Réseau des URFIST. 2024. https://hal.science/hal-04537803
#ORCID #ESR #scienceouverte #identifiants #recherche #bibliothèques
-
Bonjour Masto,
connais-tu des utilisateurs avancés du logiciel d'analyses quali Taguette (https://app.taguette.org/)
Repwouet bienvenus !
#taguette #analysequali #tag #marquage -
Error 502 ja sivustojen backup-näyttö
https://www.eksis.one/palvelimet/error-502-ja-sivustojen-backup-naytto/
Tuskin kukaan pitää tilanteesta, jossa selain esittää kliinisen kylmän error 500/502/503/504 virheen. Kävijät siksi, että eivät näe sisältöä. Ylläpito siksi, että 50x-sarjan virheet kertovat, että jokin serverillä on nurin, mutta ei anna pienintäkään viitettä syystä.
Kertomattomuus johtuu siitä, että viallinen ei pysty kertomaan mihin sattuu, ja kuunteleva ei ymmärrä mistä on kyse.
Omassa stackissa Nginx – Varnish – Apache2 (PHP, MariaDB, WordPress) virhekoodi saattaa antaa jotain suuntaa.
- 500: Nginx tai virtuaalihostin konffi on rikki
- 502: Varnish on kaatunut
- 503: useimmiten Apache2 on kaatunut
- 504: Apachen takana oleva WordPress on sekaisin
Mutta tuohonkin on olemassa poikkeuksia ja kaikki riippuu siitä miten ongelmakohta pystyy vastaamaan pyyntöihin ja miten kyselijä ilmoituksen tulkitsee.
Varajärjestelmän varajärjestelmä
Olen kehittänyt 50x-sarjan virheistä itselleni eräänlaisen pakkomielteen. Osaksi koska inhoan niitä syvästi ja osaksi siksi, että pääsääntöisesti minä olen syypäänä onnistunut kaatamaan tai rikkomaan jotain. Aika harvoin ohjelmat itsessään hajoavat, vaikka niitäkin tapauksia on ollut.
Katkokset ovat siten suolaa haavoihin hierova muistutus kädettömän sysadminin ammattitaidottomuudesta. Tai en tiedä voidaanko tällaisen kotitarveylläpitäjän kohdalla puhua ammattitaidottomuudesta. Kyse on pelkästään kyvyttömyydestä. Ja huolimattomuudestakin aika usein.
Ongelman toinen puoli on se, että en aina tiedä suoraan miten virheen korjaan. Tunteja voi kulua, ja koko sen ajan jokainen sivusto on saavuttamattomissa. Joten tarvitsin mahdollisuuksien mukaan joko informatiivisemmat virhesivut tai jonkun backup-järjestelmän, joka esittää sisällön.
Palapeli palapelin selässä
Minulla työnkuva on useimmiten mallia on ongelma, etsin ensimmäisen ratkaisun, ongelma laajenee, etsin uuden ratkaisun, en tiedä mihin päädyn ja miten.
50x-virheiden kohdalla tuo tarkoittaa sitä, että ensin lähdin säätämään virhesivuja. Niiden muuttaminen on aika triviaalia, mutta lisäinformaation saaminen ei ollut. Joten tyydyin vain muuttamaan tekstiä ja kerjäämään ihmisiä kertomaan, että sivustot ovat alhaalla.
En yleensä saanut mitään tietoa kaatumisista, koska kaupalliset monitorit ovat kalliita ja ilmaiset ratkaisut aina jollain tapaa ongelmallisia.
Joten seuraavaksi aloin selvittämään miten pystyisin saamaan tiedon minulle sopivalla tavalla, kun jokin palvelu ei tee sitä mitä sen kuuluisi. Olin aiemmin oivaltanut, että sellaista outoutta kuin API voidaan käyttää keskustelujen avaamiseen Discourse-foorumillani — ja se osaa lähettää push-ilmoituksia minulle.
Joten ensin pienen ja sitä seuranneen isomman riidan jälkeen sain rakennettua tavan, jossa Nginx kertoo Plesk-serverille 50x-virheestä. Se taasen esittää kustomoidun virheilmoituksen ja avaa Discoursessa ketjun sille virheelle.
Varnish tuuraa Apachea
Siinä samalla oli alkanut itää ajatus esittää backup-sisältöä. Miksi tyytyä virheilmoituksiin, jos voisikin esittää edes jotain sisältöä.
Helpointa, ainakin sillä hetkellä, oli keskittyä 503/504-virheisiin. Tilanteisiin, joissa Varnish käy ja kukkuu, mutta Apache2 tai WordPress on kaatunut. Helpointa siksi, että minullahan oli jo sisältö valmiina, ainakin osaksi: Varnishin cachessa. Se sisältö ei muutoinkaan koskaan piittaa backendistä; se on cachen pointti ja merkitys. Cache hyödyttää korvikesisältönä vain, jos cache lämmitetään, eli kaikki kopioidaan sinne. Se tavataan tehdä wgetillä — joka kykenee luomaan kohtuullisesti toimivan staattisen version sivustoista.
Joten kun alkuperäinen tavoite oli vain lämmittää cache, niin olin tullut luoneeksi siinä ohessa snapshot-sisältöä. Tein siitä varajärjestelmän varajärjestelmän.
Apache2/WordPress kaatuu. Niin kauan kun kukaan ei tee POST-kutsua tai pyydä sellaista, jota ei voida cachettaa, niin kukaan ei tiedä ongelmista mitään. Kaikki tulee 1:1 kopioina Varnishista.
Varnish saa tiedon backendin hengettömyydestä, kun pyydetään sisältöä, jota ei löydy cachesta. Se vaihtaa backendiä ja hakeekin Nginxin kautta snapshot-sisällön, jos se on kelvollista (GET/HEAD) , tai esittää tympeän virheilmon (POST, admin jne.). Kyllä, olisin voinut tuottaa Nginxin kautta dynaamisen sisällön, mutta en lähtenyt sille tielle. En halua sählätä liikaa tietokannan kanssa. Jos se hajoaa, vaikka kaksoiskäytön takia, niin olen liian syvissä vesissä täysin uimataidottomana. Pelkään tietokantoja.
Kun snapshot-sisältöön siirrytään, niin siitä menee tieto Pleskille, joka kertoo Discourselle, joka kertoo minulle.
Samaan aikaan kävijät eivät tiedä mitään ongelmista, cachen takia, tai saavat ehkä hieman rikkinäisen, mutta käytettävän sisällön. Eivät jotain error-ilmoitusta.
Kuka tuuraa Varnishia?
Minulla useimmiten kaatuu Varnish. Ei sen takia, että se olisi epävakaa, vaan koska säädän sitä aina kun on liikaa vapaa-aikaa. Minun säätöni tapaavat olla aika riskialttiita. Joten tarvitsin jonkin turvajärjestelmän Varnishin kaatumisen varalta.
Minulla on Nginx ja minulla on valmis snapshot-sisältö. En siis tarvinnut muuta kuin tavan tunnistaa 502-virhe, eli Varnishin kaatuminen, ja sen myötä kääntääkin proxy-liikenne uuteen suuntaan: snapshot-serverille, joka oli Nginxin hoivissa.
Tässäkin vain staattiset kyselyt kelpasivat, koska tavoitteeni ei ollut milloinkaan rakentaa täysin toimivaa korvaajaa. Halusin tarjota jotain sisältöä virheilmoituksen sijaan.
Sain sen rakennettua. Mutta minulla oli melkoisia ongelmia saada kävijät pois emergency-reitiltä takaisin normaaliin siinä vaiheessa, kun Varnish palasi linjoille.
Tiesin entisestään, että mm. Bing ei piittaa 410 virheistä, tai redirect 301/302 erosta, vaan koputtelee maailman tappiin saakka kaikkea löytämäänsä. Päinvastoin kuin mitä Google selittää, niin samaa tekee osaltaan googlebot ja varsinkin google-image. Mutta minulle oli yllätys kuinka vähän laillisetkin botit piittasivat 302 käännön väliaikaisuudesta sekä cache-headereista, jotka ohjasivat olemaan tallentamatta sisältöä.
Ne indeksoivatki suunnilleen kaiken ja väliaikaisiksi leimattuja emergency-polkuja alkoi löytymään hakutuloksista. Tuo ei ollut haluttua.
Snapshot versio 2
Nginxin serveriblokit alkoivat lisäksi olla melkoista sekasotkua. Oli mappia ja oli if-lausetta. Kaikki hyvin pitkälle siksi, että kun kävijän saaminen emergency-reitille ja snapshot-serverille ei ollut kovinkaan vaikeaa, niin en saanut selaimia pois hätäreitiltä, kun paniikki oli ohi.
Javascriptillä toki olisi onnistunut, mutta siitä en tiedä mitään. En minä ole koodari. Minä olen kopypeistaaja.
Riitelin taas kerran Nginxin kanssa tämän asian puitteissa. Olin sammuttanut Varnishin simuloidakseni Varnishin kaatumista ja koska normaalisti Varnish käynnistyy hitaasti, niin hyödynsin sen panic-toimintaa simulaationa tilanteen normalisoitumisessa. Se kun käynnistyy silmänräpäyksessä.
Minulla on panic-scripti tilanteita varten, jossa Varnish kaatuu, ja tiedän korjauksen vievän aikaa. Siinä master ohitetaan CLI:n avulla. Joten jos Varnishin ytimessä henki pihisee, niin saan sen käyntiin. Toki menetän cachen ja sellaisia asioita, mutta sivustoille pääsee Varnishin ollessa vain tyhmä putki.
Jäin testeissäni ihmettelemään mitä olin juuri tehnyt. Olin käynnistänyt tmuxin, koska CLI täytyy olla koko ajan käynnissä, ja potkaissut Varnishin prosessin käyntiin. Mutta virallisestihan Varnish oli edelleen naamallaan, ja sehän on juurikin se tilanne, jonka hätätoimintoa yritin Nginxillä rakentaa.
Olen tehnyt tuon ennenkin, monta kertaa. Kuten kun sekoilin kääntämisessä, ja rikoin Varnishin, niin pyöritin sitä tmuxin sisällä CLI:n kautta lähes viikon. Joten… miksi en tekisi samaa nyt, mutta ilman tmuxia ja automatisoituna, jolloin minun ei tarvitse riidellä niin paljon emergency-polun kanssa.
Puolikkaan työpäivän ja useiden kokeilujen ja erehdysten jälkeen minulla on nyt järjestelmä, jossa Varnishin kaatuessa 10 sekunnin ajan esitetään virheilmoitus ja pyydetään kävijältä reload (tuo viive on Pleskin takia, luultavasti 5 sekuntiakin riittäisi varnistamaan, että API-pyyntö lähtee Discourseen).
Seuraavaksi käynnistetään Varnish CLI-malliin mutta automaattisesti scriptillä. Taustalla käydään kyselemässä aika ajoin onko aito Varnish vihdoin järjissään ja kun se on käynnistynyt, niin vaihdetaan paniikki-Varnishista aitoon normaaliin Varnishiin.
Eikä kukaan huomaa mitään — paitsi sen ensimmäisen 10 sekunnin ajan.
Mutta… jos Varnish kaatuu oikeasti?
Tuo järjestelmä ei ole todellakaan aukoton. Kaikkea muuta. Mutta noin 98 kertaa sadasta Varnishin kaatuminen on sellainen, että uusi instanssi saadaan käynnistettyä.
Jos Varnish on täysin kuollut, niin sille ei ole varsinaista varajärjestelmää. Snapshot-serverin emergency ei onnistu minun taidoillani. Se hemmetin emergency-polku pysyy siellä, kiitos selainten. Ja koska moinen päätyy hakukoneisiin, niin en käytä sitä. Esitän mieluummin virheilmoitusta.
Lisään emergencyn polkuun kahdesta syystä. Ensimmäinen on, että sillä estän wgetin muokkaaman (ja hieman rikkoman) sisällön saastuttamasta aitoa cachea. Toinen syy on, että silloin urista näkee, että ei olla normaalitilanteessa.
Jos backend on saavuttamattomissa, niin Varnish ja Nginx käyttävät cacheamattoman sisällön kohdalla emergency-polkua. Mutta cachen lämmitys on noin 95 prosenttisen tehokas, joten se tulee käyttöön erittäin harvoin. Kun tulee, niin Varnish siivoaa emergemcy-osan pois vastauksesta tilanteen normalisoiduttua.
Ihmiset näkevät emergencyn urlissa korjaantumisen jälkeenkin, paitsi jos klikkaavat jotain uutta linkkiä — merkintä lisätään Nginxissä, ei snapshotteihin — mutta botit näkevät polun oikein oikeilla headereilla. Eikä ihmisistä ole väliä, koska selaimethan eivät enää edes varsinaisesti näytä urlia.
Mutta jos Varnish on totaalisen kuollut, niin laitan Nginxin juttelemaan suoraan Apachen kanssa. Se on vielä manuaalinen säätö, mutta tiedän miten sen saisi semiautomaattiseksi — ehkä teen sen muutoksen, kun taas on hieman liikaa vapaa-aikaa.
Varajärjestelmä tämä kirjoitettaessa
Jos backend kaatuu, niin Varnish käyttää cachea tai ohjaa Nginxin kautta snapshot-sisältöön.
Jos Varnish kaatuu, niin käynnistetään toisenlainen Varnish, joka keskustelee suoraan backendin kanssa.
Jos Varnish kaatuu totaalisesti, niin pakotan manuaalisesti Nginxin juttelemaan Apachen kanssa.
Jos Nginx kaatuu… tuota en ole vielä tehnyt, mutta minulla on alustava konsepti. Ehkä saisin Hitchin tai muun SSL/TSL-terminaattorin hoitamaan saapuvan liikenteen ja kääntäisin sen tyhmälle paniikki-Varnishille.
Miten koostin nykyisen Varnish korvaa Varnishin?
Alleviivaan jo mainittua: en ole koodari. Tämän olisi varmaan voinut tehdä helpomminkin, mutta minä en tätä kummallisempaan kyennyt.
Nginx kääntää uudelle proxylle:
Ennen server-blokkia (käytä omia porttejasi):
❯ Näytä koodi[map $panic $varnish_upstream ](#) 0 127.0.0.1:8080; # normaali Varnish 1 127.0.0.1:8081; # panic-Varnish}Server-blokkiin:
❯ Näytä koodiset $panic 0; if (-f /run/emergency_on) { set $panic 1; } location / { proxy_pass http://$varnish_upstream;...Varnishin kaatumisen ja nousun tunnistus
Varnishin tilaa vahtii scripti
❯ Näytä koodivarnish-switchover.sh:#!/usr/bin/env bashset -euo pipefail# stop doing several ones at the same timeexec 9>/run/varnish_switchover.lockflock -n 9 || exit 0HEALTH_URL="http://127.0.0.1:8080/"EMER_FLAG="/run/emergency_on"OK_CNT="/run/varnish_ok.count"BAD_CNT="/run/varnish_bad.count"BAD_SINCE="/run/varnish_bad_since.ts"MIN_BAD_SEC=10# Checking if actual Varnish is healthyif varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret -t 1 ping >/dev/null 2>&1; then healthy=1else healthy=0fiinc() { local f="$1"; local n=0; [[ -f "$f" ]] && n=$(cat "$f" 2>/dev/null || echo 0); echo $((n+1)) > "$f"; }reset() { : > "$1"; }if (( healthy )); then # reseting “bad since” [[ -f "$BAD_SINCE" ]] && rm -f "$BAD_SINCE" # keep small hysteresis: 2 OK in the row before dropping the flag inc "$OK_CNT"; reset "$BAD_CNT" if (( $(cat "$OK_CNT") >= 2 )); then [[ -f "$EMER_FLAG" ]] && rm -f "$EMER_FLAG" fielse # first BAD → mark startingtime (at this point Plesk get time to do its jobs, like post to Discourse) if [[ ! -f "$BAD_SINCE" ]]; then date +%s > "$BAD_SINCE" reset "$OK_CNT" fi inc "$BAD_CNT" bad_for=$(( $(date +%s) - $(cat "$BAD_SINCE" 2>/dev/null || echo 0) )) # raise the flag when BAD has been at least MIN_BAD_SEC if (( bad_for >= MIN_BAD_SEC )); then [[ -f "$EMER_FLAG" ]] || touch "$EMER_FLAG" fifiSe käyttää paria laskuria määrittelemään koska reagoidaan. Kun normaali Varnish ei vastaa kahteen kyselyyn peräkkäin, niin 10 sekunnin kuluttua asetetaan lippu
/run/emergency_on. Sen löytyessä Nginx vaihtaa proxyksi paniikki-Varnishin.Scriptin kutsuu system-unit
❯ Näytä koodivarnish-healthcheck.service:[Unit]Description=Varnish healthcheck and switchover[Service]Type=oneshotExecStart=/usr/local/sbin/varnish-switchover.shSitä taasen ajastaa 5 sekunnin välein
❯ Näytä koodivarnish-healthcheck.timer:[Unit]Description=Run Varnish healthcheck every 30s[Timer]OnBootSec=10sOnUnitActiveSec=30sAccuracySec=1sUnit=varnish-healthcheck.service[Install]WantedBy=timers.targetAikaa voi toki muuttaa ja itse käytän hieman nopeasti reagoivaa.
Paniikki-Varnish käynnistyy scriptillä
❯ Näytä koodivarnish-panic.sh:#!/usr/bin/env bash# Automatic panic handlingset -euo pipefailexec 9>/run/varnish-panic.lockflock -n 9 || { echo "panic varnish already running"; exit 0; }# Original:# varnishd -I /etc/varnish/start.cli.emerg -P /var/run/varnish.pid \# -j unix,user=vcache -F -a :8080 -T localhost:6082 -f "" \# -S /etc/varnish/secret -s malloc,256M/usr/sbin/varnishd \ -n panic \ -a 127.0.0.1:8081 \ -T 127.0.0.1:6083 \ -S /etc/varnish/secret \ -s malloc,256M \ -j unix,user=vcache \ -F \ -f '' \ -I /etc/varnish/start.cli.emergKoska molemmat Varnishit ovat koko ajan yhtä aikaa käynnissä, niin
- paniikki tarvitsee oman työhakemiston asetettuna -n lipulla
- paniikki ei saa kuunnella samaa porttia Nginxin suuntaan kuin normaali
- paniikki ei saa kuunnella backendiään samassa portissa kuin normaali
- kommentoitu
Originalkohta toimii yksinään manuaalisenapanic.shratkaisuna; kannattaa ajaa esim. tmuxissa
Lisäksi paniikki tarvitsee oman käynnistystiedoston. Jos se käyttää samaa
❯ Näytä koodidefault.vcltiedostoa tai vastaavaa, niin se kaatuu aivan samalla tavalla. Käyttämänistart.cli.emergon:vcl.load hot /etc/varnish/emergency.vclvcl.use hotJa tarvittava
emergency.vclon perusmallinen vcl, joka määrittelee backendit ja asettaareturn(pipe):. Löydät sen täältä:https://github.com/eksiscloud/Varnish7.x-multiplesites/blob/main/emergency.vclPaniikki-Varnishin käynnistysscriptin pitää hengissä system-unit
❯ Näytä koodivarnish-panic.service:[Unit]Description=Varnish PANIC instance on :8081After=network-online.targetWants=network-online.target[Service]Type=simpleExecStart=/usr/local/bin/varnish-panic.shRestart=alwaysRestartSec=2sUser=rootGroup=root[Install]WantedBy=multi-user.targetOmassa Ubuntussa systemd-yksiköt, service ja timer, löytyvät hakemistosta
/etc/systemd/system/ja scriptit olen tottunut laittamaan hakemistoon/usr/local/bin.Servicet ja timerit vaativat sekä
systemctl daemon-reloadkuin myössystemctl enable --now <nimi>. Scriptit muuttuvat ajettavaksichmod +x <nimi>.Kaikki Varnishiin liittyvät löytyvät reposta https://github.com/eksiscloud/Varnish_7.x-multiple_sites
-
Error 502 ja sivustojen backup-näyttö
https://www.eksis.one/palvelimet/error-502-ja-sivustojen-backup-naytto/
Tuskin kukaan pitää tilanteesta, jossa selain esittää kliinisen kylmän error 500/502/503/504 virheen. Kävijät siksi, että eivät näe sisältöä. Ylläpito siksi, että 50x-sarjan virheet kertovat, että jokin serverillä on nurin, mutta ei anna pienintäkään viitettä syystä.
Kertomattomuus johtuu siitä, että viallinen ei pysty kertomaan mihin sattuu, ja kuunteleva ei ymmärrä mistä on kyse.
Omassa stackissa Nginx – Varnish – Apache2 (PHP, MariaDB, WordPress) virhekoodi saattaa antaa jotain suuntaa.
- 500: Nginx tai virtuaalihostin konffi on rikki
- 502: Varnish on kaatunut
- 503: useimmiten Apache2 on kaatunut
- 504: Apachen takana oleva WordPress on sekaisin
Mutta tuohonkin on olemassa poikkeuksia ja kaikki riippuu siitä miten ongelmakohta pystyy vastaamaan pyyntöihin ja miten kyselijä ilmoituksen tulkitsee.
Varajärjestelmän varajärjestelmä
Olen kehittänyt 50x-sarjan virheistä itselleni eräänlaisen pakkomielteen. Osaksi koska inhoan niitä syvästi ja osaksi siksi, että pääsääntöisesti minä olen syypäänä onnistunut kaatamaan tai rikkomaan jotain. Aika harvoin ohjelmat itsessään hajoavat, vaikka niitäkin tapauksia on ollut.
Katkokset ovat siten suolaa haavoihin hierova muistutus kädettömän sysadminin ammattitaidottomuudesta. Tai en tiedä voidaanko tällaisen kotitarveylläpitäjän kohdalla puhua ammattitaidottomuudesta. Kyse on pelkästään kyvyttömyydestä. Ja huolimattomuudestakin aika usein.
Ongelman toinen puoli on se, että en aina tiedä suoraan miten virheen korjaan. Tunteja voi kulua, ja koko sen ajan jokainen sivusto on saavuttamattomissa. Joten tarvitsin mahdollisuuksien mukaan joko informatiivisemmat virhesivut tai jonkun backup-järjestelmän, joka esittää sisällön.
Palapeli palapelin selässä
Minulla työnkuva on useimmiten mallia on ongelma, etsin ensimmäisen ratkaisun, ongelma laajenee, etsin uuden ratkaisun, en tiedä mihin päädyn ja miten.
50x-virheiden kohdalla tuo tarkoittaa sitä, että ensin lähdin säätämään virhesivuja. Niiden muuttaminen on aika triviaalia, mutta lisäinformaation saaminen ei ollut. Joten tyydyin vain muuttamaan tekstiä ja kerjäämään ihmisiä kertomaan, että sivustot ovat alhaalla.
En yleensä saanut mitään tietoa kaatumisista, koska kaupalliset monitorit ovat kalliita ja ilmaiset ratkaisut aina jollain tapaa ongelmallisia.
Joten seuraavaksi aloin selvittämään miten pystyisin saamaan tiedon minulle sopivalla tavalla, kun jokin palvelu ei tee sitä mitä sen kuuluisi. Olin aiemmin oivaltanut, että sellaista outoutta kuin API voidaan käyttää keskustelujen avaamiseen Discourse-foorumillani — ja se osaa lähettää push-ilmoituksia minulle.
Joten ensin pienen ja sitä seuranneen isomman riidan jälkeen sain rakennettua tavan, jossa Nginx kertoo Plesk-serverille 50x-virheestä. Se taasen esittää kustomoidun virheilmoituksen ja avaa Discoursessa ketjun sille virheelle.
Varnish tuuraa Apachea
Siinä samalla oli alkanut itää ajatus esittää backup-sisältöä. Miksi tyytyä virheilmoituksiin, jos voisikin esittää edes jotain sisältöä.
Helpointa, ainakin sillä hetkellä, oli keskittyä 503/504-virheisiin. Tilanteisiin, joissa Varnish käy ja kukkuu, mutta Apache2 tai WordPress on kaatunut. Helpointa siksi, että minullahan oli jo sisältö valmiina, ainakin osaksi: Varnishin cachessa. Se sisältö ei muutoinkaan koskaan piittaa backendistä; se on cachen pointti ja merkitys. Cache hyödyttää korvikesisältönä vain, jos cache lämmitetään, eli kaikki kopioidaan sinne. Se tavataan tehdä wgetillä — joka kykenee luomaan kohtuullisesti toimivan staattisen version sivustoista.
Joten kun alkuperäinen tavoite oli vain lämmittää cache, niin olin tullut luoneeksi siinä ohessa snapshot-sisältöä. Tein siitä varajärjestelmän varajärjestelmän.
Apache2/WordPress kaatuu. Niin kauan kun kukaan ei tee POST-kutsua tai pyydä sellaista, jota ei voida cachettaa, niin kukaan ei tiedä ongelmista mitään. Kaikki tulee 1:1 kopioina Varnishista.
Varnish saa tiedon backendin hengettömyydestä, kun pyydetään sisältöä, jota ei löydy cachesta. Se vaihtaa backendiä ja hakeekin Nginxin kautta snapshot-sisällön, jos se on kelvollista (GET/HEAD) , tai esittää tympeän virheilmon (POST, admin jne.). Kyllä, olisin voinut tuottaa Nginxin kautta dynaamisen sisällön, mutta en lähtenyt sille tielle. En halua sählätä liikaa tietokannan kanssa. Jos se hajoaa, vaikka kaksoiskäytön takia, niin olen liian syvissä vesissä täysin uimataidottomana. Pelkään tietokantoja.
Kun snapshot-sisältöön siirrytään, niin siitä menee tieto Pleskille, joka kertoo Discourselle, joka kertoo minulle.
Samaan aikaan kävijät eivät tiedä mitään ongelmista, cachen takia, tai saavat ehkä hieman rikkinäisen, mutta käytettävän sisällön. Eivät jotain error-ilmoitusta.
Kuka tuuraa Varnishia?
Minulla useimmiten kaatuu Varnish. Ei sen takia, että se olisi epävakaa, vaan koska säädän sitä aina kun on liikaa vapaa-aikaa. Minun säätöni tapaavat olla aika riskialttiita. Joten tarvitsin jonkin turvajärjestelmän Varnishin kaatumisen varalta.
Minulla on Nginx ja minulla on valmis snapshot-sisältö. En siis tarvinnut muuta kuin tavan tunnistaa 502-virhe, eli Varnishin kaatuminen, ja sen myötä kääntääkin proxy-liikenne uuteen suuntaan: snapshot-serverille, joka oli Nginxin hoivissa.
Tässäkin vain staattiset kyselyt kelpasivat, koska tavoitteeni ei ollut milloinkaan rakentaa täysin toimivaa korvaajaa. Halusin tarjota jotain sisältöä virheilmoituksen sijaan.
Sain sen rakennettua. Mutta minulla oli melkoisia ongelmia saada kävijät pois emergency-reitiltä takaisin normaaliin siinä vaiheessa, kun Varnish palasi linjoille.
Tiesin entisestään, että mm. Bing ei piittaa 410 virheistä, tai redirect 301/302 erosta, vaan koputtelee maailman tappiin saakka kaikkea löytämäänsä. Päinvastoin kuin mitä Google selittää, niin samaa tekee osaltaan googlebot ja varsinkin google-image. Mutta minulle oli yllätys kuinka vähän laillisetkin botit piittasivat 302 käännön väliaikaisuudesta sekä cache-headereista, jotka ohjasivat olemaan tallentamatta sisältöä.
Ne indeksoivatki suunnilleen kaiken ja väliaikaisiksi leimattuja emergency-polkuja alkoi löytymään hakutuloksista. Tuo ei ollut haluttua.
Snapshot versio 2
Nginxin serveriblokit alkoivat lisäksi olla melkoista sekasotkua. Oli mappia ja oli if-lausetta. Kaikki hyvin pitkälle siksi, että kun kävijän saaminen emergency-reitille ja snapshot-serverille ei ollut kovinkaan vaikeaa, niin en saanut selaimia pois hätäreitiltä, kun paniikki oli ohi.
Javascriptillä toki olisi onnistunut, mutta siitä en tiedä mitään. En minä ole koodari. Minä olen kopypeistaaja.
Riitelin taas kerran Nginxin kanssa tämän asian puitteissa. Olin sammuttanut Varnishin simuloidakseni Varnishin kaatumista ja koska normaalisti Varnish käynnistyy hitaasti, niin hyödynsin sen panic-toimintaa simulaationa tilanteen normalisoitumisessa. Se kun käynnistyy silmänräpäyksessä.
Minulla on panic-scripti tilanteita varten, jossa Varnish kaatuu, ja tiedän korjauksen vievän aikaa. Siinä master ohitetaan CLI:n avulla. Joten jos Varnishin ytimessä henki pihisee, niin saan sen käyntiin. Toki menetän cachen ja sellaisia asioita, mutta sivustoille pääsee Varnishin ollessa vain tyhmä putki.
Jäin testeissäni ihmettelemään mitä olin juuri tehnyt. Olin käynnistänyt tmuxin, koska CLI täytyy olla koko ajan käynnissä, ja potkaissut Varnishin prosessin käyntiin. Mutta virallisestihan Varnish oli edelleen naamallaan, ja sehän on juurikin se tilanne, jonka hätätoimintoa yritin Nginxillä rakentaa.
Olen tehnyt tuon ennenkin, monta kertaa. Kuten kun sekoilin kääntämisessä, ja rikoin Varnishin, niin pyöritin sitä tmuxin sisällä CLI:n kautta lähes viikon. Joten… miksi en tekisi samaa nyt, mutta ilman tmuxia ja automatisoituna, jolloin minun ei tarvitse riidellä niin paljon emergency-polun kanssa.
Puolikkaan työpäivän ja useiden kokeilujen ja erehdysten jälkeen minulla on nyt järjestelmä, jossa Varnishin kaatuessa 10 sekunnin ajan esitetään virheilmoitus ja pyydetään kävijältä reload (tuo viive on Pleskin takia, luultavasti 5 sekuntiakin riittäisi varnistamaan, että API-pyyntö lähtee Discourseen).
Seuraavaksi käynnistetään Varnish CLI-malliin mutta automaattisesti scriptillä. Taustalla käydään kyselemässä aika ajoin onko aito Varnish vihdoin järjissään ja kun se on käynnistynyt, niin vaihdetaan paniikki-Varnishista aitoon normaaliin Varnishiin.
Eikä kukaan huomaa mitään — paitsi sen ensimmäisen 10 sekunnin ajan.
Mutta… jos Varnish kaatuu oikeasti?
Tuo järjestelmä ei ole todellakaan aukoton. Kaikkea muuta. Mutta noin 98 kertaa sadasta Varnishin kaatuminen on sellainen, että uusi instanssi saadaan käynnistettyä.
Jos Varnish on täysin kuollut, niin sille ei ole varsinaista varajärjestelmää. Snapshot-serverin emergency ei onnistu minun taidoillani. Se hemmetin emergency-polku pysyy siellä, kiitos selainten. Ja koska moinen päätyy hakukoneisiin, niin en käytä sitä. Esitän mieluummin virheilmoitusta.
Lisään emergencyn polkuun kahdesta syystä. Ensimmäinen on, että sillä estän wgetin muokkaaman (ja hieman rikkoman) sisällön saastuttamasta aitoa cachea. Toinen syy on, että silloin urista näkee, että ei olla normaalitilanteessa.
Jos backend on saavuttamattomissa, niin Varnish ja Nginx käyttävät cacheamattoman sisällön kohdalla emergency-polkua. Mutta cachen lämmitys on noin 95 prosenttisen tehokas, joten se tulee käyttöön erittäin harvoin. Kun tulee, niin Varnish siivoaa emergemcy-osan pois vastauksesta tilanteen normalisoiduttua.
Ihmiset näkevät emergencyn urlissa korjaantumisen jälkeenkin, paitsi jos klikkaavat jotain uutta linkkiä — merkintä lisätään Nginxissä, ei snapshotteihin — mutta botit näkevät polun oikein oikeilla headereilla. Eikä ihmisistä ole väliä, koska selaimethan eivät enää edes varsinaisesti näytä urlia.
Mutta jos Varnish on totaalisen kuollut, niin laitan Nginxin juttelemaan suoraan Apachen kanssa. Se on vielä manuaalinen säätö, mutta tiedän miten sen saisi semiautomaattiseksi — ehkä teen sen muutoksen, kun taas on hieman liikaa vapaa-aikaa.
Varajärjestelmä tämä kirjoitettaessa
Jos backend kaatuu, niin Varnish käyttää cachea tai ohjaa Nginxin kautta snapshot-sisältöön.
Jos Varnish kaatuu, niin käynnistetään toisenlainen Varnish, joka keskustelee suoraan backendin kanssa.
Jos Varnish kaatuu totaalisesti, niin pakotan manuaalisesti Nginxin juttelemaan Apachen kanssa.
Jos Nginx kaatuu… tuota en ole vielä tehnyt, mutta minulla on alustava konsepti. Ehkä saisin Hitchin tai muun SSL/TSL-terminaattorin hoitamaan saapuvan liikenteen ja kääntäisin sen tyhmälle paniikki-Varnishille.
Miten koostin nykyisen Varnish korvaa Varnishin?
Alleviivaan jo mainittua: en ole koodari. Tämän olisi varmaan voinut tehdä helpomminkin, mutta minä en tätä kummallisempaan kyennyt.
Nginx kääntää uudelle proxylle:
Ennen server-blokkia (käytä omia porttejasi):
❯ Näytä koodi[map $panic $varnish_upstream ](#) 0 127.0.0.1:8080; # normaali Varnish 1 127.0.0.1:8081; # panic-Varnish}Server-blokkiin:
❯ Näytä koodiset $panic 0; if (-f /run/emergency_on) { set $panic 1; } location / { proxy_pass http://$varnish_upstream;...Varnishin kaatumisen ja nousun tunnistus
Varnishin tilaa vahtii scripti
❯ Näytä koodivarnish-switchover.sh:#!/usr/bin/env bashset -euo pipefail# stop doing several ones at the same timeexec 9>/run/varnish_switchover.lockflock -n 9 || exit 0HEALTH_URL="http://127.0.0.1:8080/"EMER_FLAG="/run/emergency_on"OK_CNT="/run/varnish_ok.count"BAD_CNT="/run/varnish_bad.count"BAD_SINCE="/run/varnish_bad_since.ts"MIN_BAD_SEC=10# Checking if actual Varnish is healthyif varnishadm -T 127.0.0.1:6082 -S /etc/varnish/secret -t 1 ping >/dev/null 2>&1; then healthy=1else healthy=0fiinc() { local f="$1"; local n=0; [[ -f "$f" ]] && n=$(cat "$f" 2>/dev/null || echo 0); echo $((n+1)) > "$f"; }reset() { : > "$1"; }if (( healthy )); then # reseting “bad since” [[ -f "$BAD_SINCE" ]] && rm -f "$BAD_SINCE" # keep small hysteresis: 2 OK in the row before dropping the flag inc "$OK_CNT"; reset "$BAD_CNT" if (( $(cat "$OK_CNT") >= 2 )); then [[ -f "$EMER_FLAG" ]] && rm -f "$EMER_FLAG" fielse # first BAD → mark startingtime (at this point Plesk get time to do its jobs, like post to Discourse) if [[ ! -f "$BAD_SINCE" ]]; then date +%s > "$BAD_SINCE" reset "$OK_CNT" fi inc "$BAD_CNT" bad_for=$(( $(date +%s) - $(cat "$BAD_SINCE" 2>/dev/null || echo 0) )) # raise the flag when BAD has been at least MIN_BAD_SEC if (( bad_for >= MIN_BAD_SEC )); then [[ -f "$EMER_FLAG" ]] || touch "$EMER_FLAG" fifiSe käyttää paria laskuria määrittelemään koska reagoidaan. Kun normaali Varnish ei vastaa kahteen kyselyyn peräkkäin, niin 10 sekunnin kuluttua asetetaan lippu
/run/emergency_on. Sen löytyessä Nginx vaihtaa proxyksi paniikki-Varnishin.Scriptin kutsuu system-unit
❯ Näytä koodivarnish-healthcheck.service:[Unit]Description=Varnish healthcheck and switchover[Service]Type=oneshotExecStart=/usr/local/sbin/varnish-switchover.shSitä taasen ajastaa 5 sekunnin välein
❯ Näytä koodivarnish-healthcheck.timer:[Unit]Description=Run Varnish healthcheck every 30s[Timer]OnBootSec=10sOnUnitActiveSec=30sAccuracySec=1sUnit=varnish-healthcheck.service[Install]WantedBy=timers.targetAikaa voi toki muuttaa ja itse käytän hieman nopeasti reagoivaa.
Paniikki-Varnish käynnistyy scriptillä
❯ Näytä koodivarnish-panic.sh:#!/usr/bin/env bash# Automatic panic handlingset -euo pipefailexec 9>/run/varnish-panic.lockflock -n 9 || { echo "panic varnish already running"; exit 0; }# Original:# varnishd -I /etc/varnish/start.cli.emerg -P /var/run/varnish.pid \# -j unix,user=vcache -F -a :8080 -T localhost:6082 -f "" \# -S /etc/varnish/secret -s malloc,256M/usr/sbin/varnishd \ -n panic \ -a 127.0.0.1:8081 \ -T 127.0.0.1:6083 \ -S /etc/varnish/secret \ -s malloc,256M \ -j unix,user=vcache \ -F \ -f '' \ -I /etc/varnish/start.cli.emergKoska molemmat Varnishit ovat koko ajan yhtä aikaa käynnissä, niin
- paniikki tarvitsee oman työhakemiston asetettuna -n lipulla
- paniikki ei saa kuunnella samaa porttia Nginxin suuntaan kuin normaali
- paniikki ei saa kuunnella backendiään samassa portissa kuin normaali
- kommentoitu
Originalkohta toimii yksinään manuaalisenapanic.shratkaisuna; kannattaa ajaa esim. tmuxissa
Lisäksi paniikki tarvitsee oman käynnistystiedoston. Jos se käyttää samaa
❯ Näytä koodidefault.vcltiedostoa tai vastaavaa, niin se kaatuu aivan samalla tavalla. Käyttämänistart.cli.emergon:vcl.load hot /etc/varnish/emergency.vclvcl.use hotJa tarvittava
emergency.vclon perusmallinen vcl, joka määrittelee backendit ja asettaareturn(pipe):. Löydät sen täältä:https://github.com/eksiscloud/Varnish7.x-multiplesites/blob/main/emergency.vclPaniikki-Varnishin käynnistysscriptin pitää hengissä system-unit
❯ Näytä koodivarnish-panic.service:[Unit]Description=Varnish PANIC instance on :8081After=network-online.targetWants=network-online.target[Service]Type=simpleExecStart=/usr/local/bin/varnish-panic.shRestart=alwaysRestartSec=2sUser=rootGroup=root[Install]WantedBy=multi-user.targetOmassa Ubuntussa systemd-yksiköt, service ja timer, löytyvät hakemistosta
/etc/systemd/system/ja scriptit olen tottunut laittamaan hakemistoon/usr/local/bin.Servicet ja timerit vaativat sekä
systemctl daemon-reloadkuin myössystemctl enable --now <nimi>. Scriptit muuttuvat ajettavaksichmod +x <nimi>.Kaikki Varnishiin liittyvät löytyvät reposta https://github.com/eksiscloud/Varnish_7.x-multiple_sites
-
https://www.europesays.com/ee/165867/ KLÕPS | Nii suureks sirgunud! Cheryl näitas üle pika aja enda ja Liam Payne’i ühist poega #CherylCole #EE #Eesti #EestiKeel #Entertainment #Estonia #Estonian #LiamPayne #meelelahutus
-
La captation vidéo du #cafésrenatis n°20 "Focus sur Wikidata, Wikifier la Science" du 3 avril ? Retrouvez la vidéo📽️ sur
@canal-u.bsky.social
➡️ https://doi.org/10.60527/3s8m-k854
#wikidata #wikimedia #commons #openscience #communscientifiques #opendata #researchdata #urfist -
📢1er #CafésRenatis de 2025, #19, mardi prochain🗓️ 18 février avec les Wikimédiens en résidence au sein de @UrfistBordeaux, @UrfistLyon et @UrfistNice du projet "wikifier la science" ! S’inscrire ➡️https://indico.mathrice.fr/event/658/
#openscience #wikipedia #urfist cc @Wikimedia_Fr -
In the summer of 2011, I was utterly spent—physically, mentally, creatively—after hauling my film END:CIV across North America. When I returned to Vancouver, I had no place to live, so I did what many DIY filmmakers do: I moved into my van. Then came an invitation that changed everything: members of the Unist’ot’en Clan asked me to screen my film on #Wetsuweten territory.
So I piled some anarchist friends into my old camper and headed north, not realizing I was about to witness—and document—a legendary fight against pipelines on the #yintah. This is my story...
-
A New Operating System For The Whole World https://tinyurl.com/597ktd33 via @forbes
#dataviz #mapping #maps #location #spatial #intelligence #AI #GIS #GISchat #geospatial #esri @esri @esrifederalgovt @esrislgov @esritraining @urisa
-
VIDEO | #Turista americana trova la #borseggiatrice 13enne: la afferra per i #capelli e chiama i #vigili
https://www.larampa.news/2025/08/venezia-turista-american-afferra-baby-borseggiatrice-capelli/
-
A view of the harbour at Mallaig, the village at the end of the "Road to the Isles" and the West Highland Railway; and a place where you can catch ferries to Skye, the Small Isles, South Uist and the Knoydart peninsula. More pics and info: https://www.undiscoveredscotland.co.uk/mallaig/mallaig/index.html
-
Just tagged and uploaded the 47.2 dot release of GNOME Maps.
This release contains a bugfix, for opening geo: URIs without a zoom level parameter, where it should now use the last used zoom level instead of reverting back to 0 (this regressed after adding support for the zoom level parameter in the URI). And there's also a couple of translation updates.https://download.gnome.org/sources/gnome-maps/47/
It's also available in the stable Flatpak on Flathub
-
Gravenhurst train station needs to reach full potential with incoming Northlander, say residents
#northlander #ontarionorthland #gravenhurst #passengerrail
https://www.muskokaregion.com/news/gravenhurst-train-station-reopening/article_e7857596-f2de-5398-9bcc-08567280019f.html -
Blog: Deciding how many #utility #networks to use https://tinyurl.com/458wd5wr
#utilitynetworks #AssetManagement #water #electric #gas #publicworks #GIS #esri #arcgis #mapping @esri @esrislgov @esritraining @urisa
-
Navigating Devastation: #GIS Aids #HurricaneHelene Response https://tinyurl.com/eb4vuhv6
#hurricane #EmergencyResponse #govtech #NorthCarolina #NC #DOT #esri #arcgis #NCDOT #GISchat #geospatial #mapstodon @esri @gispublicsafety @esrislgov @urisa
-
Flora MacDonald's birthplace and monument on beautiful South Uist in the Western Isles. She was born on an apparently unknown date in 1722 and would later become famous for helping Bonnie Prince Charlie cross "over the sea to Skye". More pics and info: https://www.undiscoveredscotland.co.uk/southuist/southuist/index.html
#Scotland #FloraMacDonald #birthplace #cairn #SouthUist #WesternIsles #UndiscoveredScotland
-
Flora MacDonald's birthplace and monument on beautiful South Uist in the Western Isles. She was born on an apparently unknown date in 1722 and would later become famous for helping Bonnie Prince Charlie cross "over the sea to Skye". More pics and info: https://www.undiscoveredscotland.co.uk/southuist/southuist/index.html
#Scotland #FloraMacDonald #birthplace #cairn #SouthUist #WesternIsles #UndiscoveredScotland