GeoServer και PostGIS: η διαδρομή VPN που μετράει είναι του διακομιστή
Το ότι το φορητό σας φτάνει στον GeoServer δεν λέει τίποτα για το αν ο GeoServer φτάνει στο PostGIS. Συγκρίνετε τις δύο αφετηρίες, το όριο της κρυφής μνήμης και την ίδια την πηγή του χώρου αποθήκευσης δεδομένων.
Ανοίγετε το επίπεδο στο QGIS και αυτό σχεδιάζεται. Ένας συνάδελφος στο ίδιο VPN παίρνει σφάλμα για το ίδιο επίπεδο. Κάποιος συμπεραίνει ότι το VPN είναι χαλασμένο, και η επόμενη ώρα πάει σε μετακίνηση βάσης δεδομένων ή σε άνοιγμα θύρας που δεν χρειαζόταν κανένα από τα δύο. Το αίτημα από τον υπολογιστή και το ερώτημα που κάνει ο GeoServer στο PostGIS ξεκινούν από διαφορετικές μηχανές, σε διαφορετικούς χώρους ονομάτων δικτύου, με διαφορετικά διαπιστευτήρια. Ο διαχωρισμός αυτών των δύο διαδρομών είναι το μεγαλύτερο μέρος της διάγνωσης.
Δύο συνδέσεις, δύο αφετηρίες
QGIS -> client's permitted path (often the VPN) -> GeoServer listener
GeoServer -> server's permitted path -> PostGIS listener
Το δεύτερο βέλος δεν κληρονομεί τη σήραγγα του πρώτου υπολογιστή. Ένας GeoServer σε container έχει τη στοίβα δικτύου του container, όχι του κεντρικού υπολογιστή, και ένα container σε γεφυρωμένο δίκτυο μπορεί να φτάσει βάση δεδομένων που ο κεντρικός δεν φτάνει, ή το αντίστροφο. Έτσι ο ίδιος χρήστης μπορεί να πετύχει και να αποτύχει στην ίδια συνεδρία, ανάλογα με το αν η απάντηση ήρθε από την κρυφή μνήμη ή από φρέσκο ερώτημα.
| 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 |
Βρείτε το βήμα που πραγματικά απέτυχε
Μια απόρριψη σε επίπεδο υπηρεσίας, ένα αίτημα εικόνας που δεν φτάνει στον χώρο αποθήκευσης δεδομένων του και ένα πρόβλημα δικαιωμάτων σε ένα επίπεδο μοιάζουν σε μια καρτέλα περιηγητή και είναι εντελώς διαφορετικά στο αρχείο καταγραφής του διακομιστή. Ζητήστε τη συγκεκριμένη λειτουργία και μετά διαβάστε το ίδιο το συμβάν του 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 με έγγραφο εξαίρεσης υπηρεσίας αποδεικνύει ότι δεν απάντησε, και το κείμενο της εξαίρεσης συνήθως ονομάζει τον χώρο αποθήκευσης και όχι τον πελάτη.
Διαβάστε τον χώρο αποθήκευσης δεδομένων από την πλευρά του διακομιστή
Η αναφορά PostGIS του GeoServer απαριθμεί τι χρειάζεται ο χώρος αποθήκευσης: κεντρικό υπολογιστή, θύρα, βάση δεδομένων και διαπιστευτήρια. Όλα αυτά περιγράφουν τη σύνδεση που ανοίγει ο GeoServer. Κανένα από αυτά δεν περιγράφει σύνδεση από τον πελάτη της επιφάνειας εργασίας. Διαβάστε αυτά τα τέσσερα πεδία ως δήλωση για το δικτυακό πλαίσιο του διακομιστή, και ολόκληρη η κατηγορία αιτημάτων «σε αυτούς δουλεύει» γίνεται διαχειρίσιμη.
Γι’ αυτό localhost σε έναν χώρο αποθήκευσης δεδομένων είναι τόσο συνηθισμένο λάθος. Σημαίνει το δικτυακό πλαίσιο της ίδιας της διεργασίας GeoServer. Αν ο GeoServer τρέχει σε Docker ενώ το PostGIS τρέχει στον κεντρικό υπολογιστή, localhost δείχνει μέσα στο container και δεν βρίσκει τίποτα, και καμία ρύθμιση VPN δεν το αλλάζει.
Στον διακομιστή, ελέγξτε τη διαδρομή, τον ακροατή και την πολιτική ταυτοποίησης με αυτή τη σειρά. Η ταυτοποίηση του PostgreSQL βάσει κεντρικού υπολογιστή συγκρίνει τη διεύθυνση προέλευσης που βλέπει, την οποία μια πύλη μπορεί να μεταφράσει, οπότε η προσθήκη πισίνας VPN πελατών στο αρχείο HBA σπάνια διορθώνει σύνδεση από την πλευρά του διακομιστή. Δοκιμάστε όπως θα έκανε ο διακομιστής: ίδιος κεντρικός υπολογιστής, ίδια θύρα, ίδιος χρήστης. Αν αυτή η δοκιμή πετύχει ενώ ο 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, και τη λειτουργία υποβάθρου που ο GeoServer δεν μπόρεσε να ολοκληρώσει. Με τα δύο, ο σωστός ιδιοκτήτης μπορεί να επισκευάσει τη διαδρομή που απέτυχε. Με μόνο το πρώτο, η φυσική διόρθωση είναι να εκτεθεί δημόσια η βάση δεδομένων, που λύνει το αίτημα δημιουργώντας χειρότερο πρόβλημα.
Σημειώστε το επίπεδο, τον κωδικό απόκρισης, την εξαίρεση από την πλευρά του διακομιστή και το container ή τον κεντρικό υπολογιστή που την παρήγαγε. Είναι τέσσερις γραμμές, και αφαιρούν εντελώς την ασάφεια.