Դուք բացում եք շերտը QGIS-ում և այն գծվում է։ Նույն VPN-ում գտնվող գործընկերը սխալ է ստանում նույն շերտի համար։ Ինչ-որ մեկը եզրակացնում է, որ VPN-ը փչացած է, և հաջորդ ժամը անցնում է տվյալների բազա տեղափոխելու կամ պորտ բացելու վրա, որը երբեք դրա կարիքը չի ունեցել։ Սեղանադիրից եկող հարցումը և այն հարցումը, որ GeoServer-ը անում է PostGIS-ին, դուրս են գալիս տարբեր մեքենաներից, տարբեր ցանցային անվանատարածքներից, տարբեր հավատարմագրերով։ Այս երկու ուղիներն առանձնացնելը ախտորոշման մեծ մասն է։

Երկու միացում, երկու աղբյուր

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

Երկրորդ սլաքը չի ժառանգում առաջին համակարգչի թունելը։ Կոնտեյներում GeoServer-ն ունի կոնտեյների ցանցային կույտը, ոչ թե հոսթի, և կամրջված ցանցում գտնվող կոնտեյները կարող է հասնել տվյալների բազայի, որին հոսթը չի հասնում, կամ հակառակը։ Այսպիսով նույն օգտատերը կարող է հաջողել և ձախողվել նույն սեսիայում՝ կախված նրանից, թե պատասխանը եկել է քեշից, թե թարմ հարցումից։

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

Գտեք այն քայլը, որն իսկապես ձախողվել է

Ծառայության մակարդակի մերժումը, պատկերի հարցումը, որը չի հասնում իր տվյալների պահոցին, և մեկ շերտի թույլտվության խնդիրը զննարկիչի ներդիրում նման են երևում, իսկ սերվերի մատյանում՝ բոլորովին այլ։ Պահանջեք կոնկրետ գործողությունը, ապա կարդացեք GeoServer-ի սեփական իրադարձությունը նույն ժամանակադրոշմի համար։

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-ը հավաստի պատկերով ապացուցում է, որ տվյալների պահոցը պատասխանել է։ 200-ը ծառայության բացառության փաստաթղթով ապացուցում է, որ չի պատասխանել, և բացառության տեքստը սովորաբար նշում է պահոցը, ոչ թե հաճախորդին։

Կարդացեք տվյալների պահոցը սերվերի կողմից

GeoServer-ի PostGIS տեղեկագիրքը թվարկում է, թե ինչ է պետք պահոցին՝ հոսթ, պորտ, տվյալների բազա և հավատարմագրեր։ Այս ամենը նկարագրում է այն միացումը, որը բացում է GeoServer-ը։ Դրանից ոչինչ չի նկարագրում սեղանադիր հաճախորդի մուտքը։ Այս չորս դաշտերը կարդացեք որպես սերվերի ցանցային համատեքստի մասին պնդում, և «նրանց մոտ աշխատում է» տոմսերի ամբողջ դասը դառնում է լուծելի։

Այդ պատճառով localhost տվյալների պահոցում այդքան տարածված սխալ է։ Դա նշանակում է հենց GeoServer գործընթացի ցանցային համատեքստը։ Եթե GeoServer-ը աշխատում է Docker-ում, մինչ PostGIS-ը աշխատում է հոսթում, localhost ցույց է տալիս կոնտեյների ներսը և ոչինչ չի գտնում, և ոչ մի VPN կարգավորում դա չի փոխում։

Սերվերի վրա ստուգեք երթուղին, լսիչը և նույնականացման քաղաքականությունը այդ հերթականությամբ։ PostgreSQL-ի հոսթի վրա հիմնված նույնականացումը համեմատում է իր տեսած աղբյուրի հասցեն, որը դարպասը կարող է թարգմանել, ուստի HBA ֆայլում հաճախորդի VPN լողավազան ավելացնելը հազվադեպ է ուղղում սերվերի կողմի միացումը։ Փորձարկեք այնպես, ինչպես կաներ սերվերը՝ նույն հոսթ, նույն պորտ, նույն օգտատեր։ Եթե այդ թեստը հաջողվում է, մինչ GeoServer-ը դեռ ձախողվում է, տարբերությունը գործընթացի համատեքստում է, ոչ թե տվյալների բազայում։

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

Լողավազանները և քեշերը պահպանում են վիճակը փոփոխությունների ընթացքում

Տվյալների պահոցի միացումների լողավազանները բաց են պահում սոկետները։ Թունելը, որը բարձրացել է լողավազանի ստեղծումից մեկ ժամ անց, պարտադիր չէ, որ լողավազանին նոր ուղի տա, և անգործ միացումը կարող է մնալ մեռած երթուղու վրա, մինչև վալիդացիան կամ ժամանակի սահմանը այն փակի։ Ստուգեք տեղադրված պահոցի վալիդացիայի կարգավորումները՝ վերականգնում ենթադրելու փոխարեն, և խուսափեք ամբողջ ծառայությունը վերսկսելու գայթակղությունից, մինչև չիմանաք, թե որ շերտն է ձախողվել։

Սալիկների քեշերը ստեղծում են այդ խնդրի հայելային պատկերը՝ նրանք կարող են ճիշտ տեսք ունեցող քարտեզ մատուցել տվյալների բազայի միացումը կտրվելուց շատ ավելի ուշ։ Քեշը դատարկելը՝ «տեսնելու՝ արդյոք օգնում է», ոչնչացնում է միակ ապացույցը, որը ձեզ կասեր, թե որ ուղին էր կենդանի։

Փոխանցեք երկու աղբյուրներն էլ նշելով

Արագ ուղղում ստացող նկարագրությունը նշում է երկու բան՝ հաճախորդի հարցումը, որը հասել է GeoServer-ին, և այն backend գործողությունը, որը GeoServer-ը չի կարողացել ավարտել։ Երկուսով ճիշտ սեփականատերը կարող է վերանորոգել ձախողված ուղին։ Միայն առաջինով բնական ուղղումը տվյալների բազան հրապարակայնորեն բացելն է, ինչը լուծում է տոմսը՝ ստեղծելով ավելի վատ խնդիր։

Նշեք շերտը, պատասխանի կոդը, սերվերի կողմի բացառությունը և այն կոնտեյները կամ հոսթը, որը ստեղծել է այն։ Դա չորս տող է, և դրանք ամբողջությամբ վերացնում են երկիմաստությունը։

Առնչվող հոդվածներ