GeoServer وPostGIS: مسار الـVPN المهم هو مسار الخادم
وصول حاسوبك المحمول إلى GeoServer لا يقول شيئًا عن وصول GeoServer إلى PostGIS. قارن بين المصدرين وحدّ الذاكرة المؤقتة ومصدر مخزن البيانات نفسه.
تفتح الطبقة في QGIS فتُرسم. ويحصل زميل على الشبكة الخاصة الافتراضية نفسها على خطأ في الطبقة نفسها. يستنتج أحدهم أن الشبكة معطلة، وتُصرف الساعة التالية في نقل قاعدة بيانات أو كشف منفذ لم يكن بحاجة إلى أي منهما. يخرج الطلب من سطح المكتب والاستعلام الذي يرسله GeoServer إلى PostGIS من جهازين مختلفين، وفي نطاقي أسماء شبكة مختلفين، وباعتمادين مختلفين. فصل هذين المسارين هو معظم التشخيص.
اتصالان، مصدران
QGIS -> client's permitted path (often the VPN) -> GeoServer listener
GeoServer -> server's permitted path -> PostGIS listener
السهم الثاني لا يرث نفق الحاسوب الأول. فخادم يعمل داخل حاوية يملك مكدس شبكة الحاوية لا مكدس المضيف، وحاوية على شبكة جسرية قد تصل إلى قاعدة بيانات لا يصل إليها المضيف، أو العكس. لذلك قد ينجح المستخدم نفسه ويفشل في الجلسة نفسها، بحسب ما إذا جاء الجواب من الذاكرة المؤقتة أم من استعلام جديد.
| 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 |
ابحث عن الخطوة التي فشلت فعلاً
رفض على مستوى الخدمة، وطلب صورة لا يصل إلى مخزن بياناته، ومشكلة صلاحيات في طبقة واحدة تبدو متشابهة في لسان المتصفح ومختلفة تمامًا في سجل الخادم. اطلب العملية المحددة، ثم اقرأ حدث الخادم نفسه في الطابع الزمني ذاته.
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 يشير إلى داخل الحاوية فلا يجد شيئًا، ولا يغيّر أي إعداد للشبكة الخاصة الافتراضية ذلك.
على الخادم، افحص المسار والمستمع وسياسة المصادقة بهذا الترتيب. فمصادقة PostgreSQL المعتمدة على المضيف تقارن عنوان المصدر الذي تراه، وقد تعيد بوابة ترجمته، لذا فإن إضافة تجمّع شبكة افتراضية للعملاء إلى ملف 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 إكمالها. وبوجودهما يستطيع المالك الصحيح إصلاح المسار الذي فشل. وبوجود الأول وحده يكون الإصلاح الطبيعي كشف قاعدة البيانات للعموم، وهذا يحل التذكرة بخلق مشكلة أسوأ.
دوّن الطبقة ورمز الاستجابة والاستثناء من جهة الخادم والحاوية أو المضيف الذي أنتجها. هذه أربعة أسطر، وهي تزيل الالتباس كليًا.