GeoServer a PostGIS: rozhoduje VPN cesta servera
To, že sa váš notebook dostane na GeoServer, nič nehovorí o tom, či sa GeoServer dostane na PostGIS. Porovnajte dva zdroje, hranicu vyrovnávacej pamäte a samotný zdroj úložiska údajov.
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 tested | What it proves |
|---|---|
Portal page or GetCapabilities | HTTP reachability to GeoServer only |
| A tile served from cache | nothing about the database |
GetMap for an uncached layer | a 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ť.