Otvoríte vrstvu v QGIS a vykreslí sa. Kolega na tej istej VPN dostane pri tej istej vrstve chybu. Niekto usúdi, že je VPN pokazená, a nasledujúca hodina padne na presun databázy alebo na otvorenie portu, ktorý nikdy nepotreboval ani jedno. Požiadavka z počítača a dopyt, ktorý GeoServer posiela do PostGIS, vychádzajú z rôznych strojov, v rôznych sieťových menných priestoroch, s rôznymi prihlasovacími údajmi. Rozdeliť tieto dve cesty je väčšina diagnózy.

Dve pripojenia, dva zdroje

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

Druhá šípka nededí tunel prvého počítača. GeoServer v kontajneri má sieťový stack kontajnera, nie hostiteľa, a kontajner v premosťovanej sieti môže dosiahnuť databázu, na ktorú hostiteľ nedosiahne, alebo naopak. Ten istý používateľ tak môže v jednej relácii uspieť aj zlyhať podľa toho, či odpoveď prišla z vyrovnávacej pamäte alebo z čerstvého dopytu.

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

Nájdite krok, ktorý skutočne zlyhal

Odmietnutie na úrovni služby, požiadavka na obrázok, ktorá nedosiahne svoje úložisko údajov, a problém s oprávneniami v jednej vrstve vyzerajú na karte prehliadača podobne a v logu servera úplne inak. Vyžiadajte si konkrétnu operáciu a potom si prečítajte vlastnú udalosť GeoServera pre rovnaký časový údaj.

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 z druhej požiadavky s vierohodným obrázkom dokazuje, že úložisko údajov odpovedalo. 200 s dokumentom výnimky služby dokazuje, že neodpovedalo, a text výnimky zvyčajne pomenuje úložisko, nie klienta.

Čítajte úložisko údajov zo strany servera

Referenčná príručka PostGIS GeoServera uvádza, čo úložisko potrebuje: hostiteľa, port, databázu a prihlasovacie údaje. To všetko opisuje pripojenie, ktoré GeoServer otvára. Nič z toho neopisuje prihlásenie z klientského počítača. Čítajte tieto štyri polia ako tvrdenie o sieťovom kontexte servera a celá trieda tiketov „u nich to funguje“ sa stane zvládnuteľnou.

Preto je localhost v úložisku údajov takou častou chybou. Znamená sieťový kontext samotného procesu GeoServera. Ak GeoServer beží v Dockeri, zatiaľ čo PostGIS beží na hostiteľovi, localhost ukazuje dovnútra kontajnera a nič nenájde, a žiadna konfigurácia VPN to nezmení.

Na serveri skontrolujte trasu, naslúchajúci proces a zásady overovania v tomto poradí. Overovanie PostgreSQL založené na hostiteľovi porovnáva zdrojovú adresu, ktorú vidí, a brána ju môže preložiť, takže pridanie klientského VPN poolu do súboru HBA zriedka opraví pripojenie na strane servera. Testujte tak, ako by to urobil server: rovnaký hostiteľ, rovnaký port, rovnaký používateľ. Ak tento test uspeje, zatiaľ čo GeoServer stále zlyháva, rozdiel je v kontexte procesu, nie v databáze.

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

Pooly a vyrovnávacie pamäte držia stav naprieč zmenami

Connection pooly úložiska údajov držia sockety otvorené. Tunel, ktorý vznikol hodinu po vytvorení poolu, nemusí poolu dať novú cestu a nečinné pripojenie môže zostať na mŕtvej trase, kým ho validácia alebo časový limit neukončí. Skontrolujte nastavenia validácie nainštalovaného úložiska, namiesto toho, aby ste predpokladali obnovenie, a vyhnite sa pokušeniu reštartovať celú službu, kým neviete, ktorá vrstva zlyhala.

Vyrovnávacie pamäte dlaždíc vytvárajú zrkadlový obraz tohto problému: môžu vydávať správne vyzerajúcu mapu dlho po tom, čo sa pripojenie k databáze prerušilo. Vymazanie vyrovnávacej pamäte, aby sme „videli, či to pomôže“, ničí jediný dôkaz, ktorý by vám povedal, ktorá cesta bola živá.

Odovzdajte prípad s oboma zdrojmi

Popis, ktorý prinesie rýchlu opravu, pomenuje dve veci: požiadavku klienta, ktorá dorazila do GeoServera, a backendovú operáciu, ktorú GeoServer nedokázal dokončiť. S oboma môže správny vlastník opraviť cestu, ktorá zlyhala. S iba prvou je prirodzenou opravou verejné vystavenie databázy, čo tiket vyrieši vytvorením horšieho problému.

Poznamenajte vrstvu, kód odpovede, výnimku na strane servera a kontajner alebo hostiteľa, ktorý ju vytvoril. Sú to štyri riadky a úplne odstránia nejednoznačnosť.

Súvisiace články