Odprete plast v QGIS in ta se izriše. Kolega v istem VPN dobi napako za isto plast. Nekdo sklene, da je VPN pokvarjen, in naslednja ura mine pri premikanju podatkovne baze ali odpiranju vrat, ki ju ni potreboval niti eden niti drugi. Zahteva z namizja in poizvedba, ki jo GeoServer pošlje v PostGIS, se začneta na različnih strojih, v različnih imenskih prostorih omrežja, z različnimi poverilnicami. Ločitev teh dveh poti je večina diagnoze.

Dve povezavi, dva izvora

QGIS  ->  client's permitted path (often the VPN)  ->  GeoServer listener
GeoServer -> server's permitted path  ->  PostGIS listener

Druga puščica ne podeduje tunela prvega računalnika. GeoServer v vsebniku ima omrežni sklad vsebnika, ne gostitelja, in vsebnik v mostnem omrežju lahko doseže bazo, ki je gostitelj ne doseže, ali obratno. Isti uporabnik lahko torej v eni seji uspe in spodleti, odvisno od tega, ali je odgovor prišel iz predpomnilnika ali iz sveže poizvedbe.

What you testedWhat it proves
Portal page or GetCapabilitiesHTTP reachability to GeoServer only
A tile served from cachenothing about the database
GetMap for an uncached layera datastore query had to happen

Poiščite korak, ki je v resnici spodletel

Zavrnitev na ravni storitve, zahteva za sliko, ki ne doseže svoje shrambe podatkov, in težava z dovoljenji v eni plasti so na zavihku brskalnika videti podobne, v dnevniku strežnika pa povsem drugačne. Zahtevajte konkretno operacijo in nato preberite GeoServerjev lastni dogodek za isto časovno oznako.

curl -s -o /dev/null -w '%{http_code}\n' \
  "https://gis.example.com/geoserver/wms?service=WMS&version=1.3.0&request=GetCapabilities"

curl -s -o /tmp/tile.png -w '%{http_code} %{size_download}\n' \
  "https://gis.example.com/geoserver/wms?service=WMS&version=1.3.0&request=GetMap&layers=corp:parcels&bbox=-13650000,4500000,-13600000,4550000&width=256&height=256&srs=EPSG:3857&format=image/png"

200 iz druge zahteve s sprejemljivo sliko dokazuje, da je shramba podatkov odgovorila. 200 z dokumentom izjeme storitve dokazuje, da ni, in besedilo izjeme običajno navede shrambo, ne odjemalca.

Preberite shrambo podatkov s strani strežnika

Referenca PostGIS GeoServerja našteva, kaj shramba potrebuje: gostitelja, vrata, bazo in poverilnice. Vse to opisuje povezavo, ki jo GeoServer odpre. Nič od tega ne opisuje prijave z namiznim odjemalcem. Berite ta štiri polja kot trditev o omrežnem kontekstu strežnika in cel razred zahtevkov »pri njih deluje« postane obvladljiv.

Zato je localhost v shrambi podatkov tako pogosta napaka. Pomeni omrežni kontekst samega procesa GeoServer. Če GeoServer teče v Dockerju, medtem ko PostGIS teče na gostitelju, localhost kaže v notranjost vsebnika in ne najde ničesar, in nobena konfiguracija VPN tega ne spremeni.

Na strežniku preverite pot, poslušalca in pravilnik preverjanja pristnosti v tem vrstnem redu. Preverjanje pristnosti PostgreSQL na podlagi gostitelja primerja izvorni naslov, ki ga vidi, in prehod ga lahko prevede, zato dodajanje odjemalskega VPN bazena v datoteko HBA redko popravi povezavo na strani strežnika. Testirajte tako, kot bi strežnik: isti gostitelj, ista vrata, isti uporabnik. Če ta test uspe, medtem ko GeoServer še vedno spodleti, je razlika v kontekstu procesa in ne v bazi.

ip route get 10.20.5.11
ss -tnp | grep 5432
psql "host=10.20.5.11 dbname=gis user=geoserver" -c 'select 1'

Bazeni in predpomnilniki hranijo stanje skozi spremembe

Bazeni povezav shrambe podatkov držijo vtičnice odprte. Tunel, ki se je dvignil uro po ustvaritvi bazena, bazenu ne da nujno nove poti, in nedejavna povezava lahko ostane na mrtvi poti, dokler je validacija ali časovna omejitev ne zapre. Preverite nastavitve validacije nameščene shrambe, namesto da bi predpostavljali obnovitev, in se izognite skušnjavi, da bi znova zagnali celotno storitev, preden veste, katera plast je spodletela.

Predpomnilniki ploščic ustvarijo zrcalno sliko te težave: lahko strežejo videzno pravilen zemljevid še dolgo potem, ko se je povezava z bazo pretrgala. Čiščenje predpomnilnika, da bi »videli, ali pomaga«, uniči edini dokaz, ki bi vam povedal, katera pot je bila živa.

Predajte z navedenima obema izvoroma

Opis, ki dobi hitro popravilo, navede dve stvari: odjemalsko zahtevo, ki je dosegla GeoServer, in zaledno operacijo, ki je GeoServer ni mogel dokončati. Z obema lahko pravi lastnik popravi pot, ki je spodletela. Samo s prvo je naravno popravilo javna izpostavitev baze, kar zahtevek reši tako, da ustvari slabšo težavo.

Zapišite plast, kodo odgovora, izjemo na strani strežnika ter vsebnik ali gostitelja, ki jo je ustvaril. To so štiri vrstice in povsem odstranijo dvoumnost.

Sorodni članki