PgBouncer في قاعدة بيانات Azure لـ PostgreSQL - خادم مرن
ينطبق على: قاعدة بيانات Azure ل PostgreSQL - خادم مرن
يوفر خادم Azure Database for PostgreSQL المرن PgBouncer كحل مضمن لتجميع الاتصال. PgBouncer هي ميزة اختيارية يمكنك تمكينها على أساس كل خادم قاعدة بيانات. وهو مدعوم على مستويات الحوسبة للأغراض العامة والذاكرة المحسنة في كل من الوصول العام وشبكات الوصول الخاصة.
يعمل PgBouncer على نفس الجهاز الظاهري (VM) مثل خادم قاعدة البيانات لقاعدة بيانات Azure لخادم PostgreSQL المرن. يستخدم Postgres نموذجا يستند إلى العملية للاتصالات، لذا فإن الحفاظ على العديد من الاتصالات الخاملة مكلف. يتم تشغيل Postgres في قيود الموارد عندما يقوم الخادم بتشغيل أكثر من بضعة آلاف من الاتصالات. الفائدة الأساسية من PgBouncer هي تحسين الاتصالات الخاملة والاتصالات قصيرة الأجل في خادم قاعدة البيانات.
يستخدم PgBouncer نموذجا خفيف الوزن يستخدم الإدخال/الإخراج غير المتزامن. ويستخدم اتصالات Postgres فقط عند الحاجة - أي عندما يكون داخل معاملة مفتوحة أو عندما يكون الاستعلام نشطا. يسمح هذا النموذج بتحجيم ما يصل إلى 10000 اتصال مع حمل منخفض.
يتم تشغيل PgBouncer على المنفذ 6432 على خادم قاعدة البيانات. يمكنك تغيير تكوين اتصال قاعدة بيانات التطبيق الخاص بك لاستخدام نفس اسم المضيف، ولكن تغيير المنفذ إلى 6432 لبدء استخدام PgBouncer والاستفادة من تحسين تحجيم الاتصالات الخاملة.
يدعم PgBouncer في قاعدة بيانات Azure لخادم PostgreSQL المرن مصادقة Microsoft Entra (Azure AD).
تمكين PgBouncer وتكوينه
لتمكين PgBouncer، انتقل إلى جزء Server parameters في مدخل Microsoft Azure، وابحث عن PgBouncer، وغير pgbouncer.enabled
الإعداد إلى true
. ليست هناك حاجة لإعادة تشغيل الخادم.
يمكنك تكوين إعدادات PgBouncer باستخدام هذه المعلمات.
إشعار
تظهر القائمة التالية لمعلمات خادم PgBouncer في جزء معلمات الخادم فقط إذا تم تعيين معلمة pgbouncer.enabled
الخادم إلى true
. وإلا، يتم إخفاؤها عمدا.
اسم المعلمة | الوصف | الإعداد الافتراضي |
---|---|---|
pgbouncer.default_pool_size | تعيين قيمة المعلمة هذه إلى عدد الاتصالات لكل زوج مستخدم/قاعدة بيانات. | 50 |
pgbouncer.ignore_startup_parameters | أدخل قائمة مفصولة بفواصل من المعلمات التي يمكن ل PgBouncer تجاهلها. على سبيل المثال، يمكنك السماح ل PgBouncer بتجاهل المعلمة extra_float_digits . يسمح ببعض المعلمات؛ جميع الآخرين يثيرون خطأ. هذه القدرة مطلوبة للتسامح مع اتصال قاعدة بيانات Java overenthusiastic (JDBC) التي تريد تعيينها extra_float_digits=2 دون شروط في حزم بدء التشغيل. استخدم هذا الخيار إذا كانت المكتبة التي تستخدمها تقوم بتقارير عن أخطاء مثل pq: unsupported startup parameter: extra_float_digits . |
|
pgbouncer.max_client_conn | قم بتعيين قيمة المعلمة هذه إلى أكبر عدد من اتصالات العميل إلى PgBouncer الذي تريد دعمه . | 5000 |
pgbouncer.max_prepared_statements | عند تعيين هذا إلى قيمة غير صفرية يتعقب PgBouncer على مستوى البروتوكول المسمى الأوامر ذات الصلة بالعبارات المعدة المرسلة من قبل العميل في وضع تجميع العمليات والعبارات. | 0 |
pgbouncer.min_pool_size | أضف المزيد من اتصالات الخادم إلى التجمع إذا كان أقل من هذا الرقم. | 0 |
pgbouncer.pool_mode | قم بتعيين قيمة المعلمة هذه إلى TRANSACTION لتجميع المعاملات (وهو الإعداد الموصى به لمعظم أحمال العمل). | المعاملات |
pgbouncer.query_wait_timeout | يسمح لأقصى وقت (بالثواني) بقضاء الاستعلامات في انتظار التنفيذ. إذا لم يتم تعيين الاستعلام إلى خادم خلال ذلك الوقت، فإنه يتم قطع اتصال العميل. | 120 |
pgbouncer.server_idle_timeout | إذا كان اتصال الخادم معلقا أكثر من هذا العدد من الثوان، إسقاطه. إذا كانت 0، تعطيل المهلة. | 600 |
pgbouncer.stats_users | قائمة مفصولة بفاصلة لمستخدمي قاعدة البيانات المسموح لهم بالاتصال وتشغيل استعلامات القراءة فقط على وحدة تحكم pgBouncer. |
لمزيد من المعلومات حول تكوينات PgBouncer، راجع وثائق pgbouncer.ini.
إصدار PgBouncer
حاليا، إصدار PgBouncer المنشور على جميع الإصدارات الرئيسية المدعومة من المحرك (16، 15، 14، 13، 12، 11)، في قاعدة بيانات Azure لخادم PostgreSQL المرن، هو 1.22.1.
المزايا
باستخدام ميزة PgBouncer المضمنة مع قاعدة بيانات Azure لخادم PostgreSQL المرن، يمكنك الحصول على هذه الفوائد:
راحة التكوين المبسط: نظرا لدمج PgBouncer مع قاعدة بيانات Azure لخادم PostgreSQL المرن، ليست هناك حاجة لتثبيت منفصل أو إعداد معقد. يمكنك تكوينه مباشرة من معلمات الخادم.
موثوقية الخدمة المدارة: يوفر PgBouncer مزايا الخدمات المدارة من Azure. على سبيل المثال، يدير Azure تحديثات PgBouncer. تلغي التحديثات التلقائية الحاجة إلى الصيانة اليدوية وتضمن بقاء PgBouncer على اطلاع بأحدث الميزات وتصحيحات الأمان.
دعم أنواع الاتصال المختلفة: يوفر PgBouncer في قاعدة بيانات Azure لخادم PostgreSQL المرن الدعم لكل من الاتصالات العامة والخاصة. يمكنك استخدامه لإنشاء اتصالات آمنة عبر الشبكات الخاصة أو الاتصال خارجيا، اعتمادا على متطلباتك المحددة.
قابلية وصول عالية في سيناريوهات تجاوز الفشل: إذا تمت ترقية خادم الاستعداد إلى الدور الأساسي أثناء تجاوز الفشل، يتم إعادة تشغيل PgBouncer بسلاسة في وضع الاستعداد الذي تمت ترقيته حديثا. لا تحتاج إلى إجراء أي تغييرات على سلسلة الاتصال التطبيق. تساعد هذه القدرة على ضمان التوفر المستمر وتقليل تعطيل تجمع اتصال التطبيق.
مراقبة PgBouncer
المقاييس
يوفر خادم Azure Database for PostgreSQL المرن ستة مقاييس لمراقبة تجميع اتصال PgBouncer:
اسم العرض | معرف القياس | الوحدة | الوصف | البُعد | تمكين افتراضي |
---|---|---|---|---|---|
اتصالات العميل النشطة (معاينة) | client_connections_active |
عدد | الاتصالات من العملاء المقترنة بقاعدة بيانات Azure لاتصال خادم PostgreSQL المرن | DatabaseName |
لا |
انتظار اتصالات العميل (معاينة) | client_connections_waiting |
عدد | الاتصالات من العملاء الذين ينتظرون اتصال خادم مرن لقاعدة بيانات Azure ل PostgreSQL لخدمتهم | DatabaseName |
لا |
اتصالات الخادم النشط (معاينة) | server_connections_active |
عدد | الاتصالات بقاعدة بيانات Azure لخادم PostgreSQL المرن الذي يستخدمه اتصال العميل | DatabaseName |
لا |
اتصالات الخادم الخاملة (معاينة) | server_connections_idle |
عدد | الاتصالات بقاعدة بيانات Azure لخادم PostgreSQL المرن الخامل والجاهز لخدمة اتصال عميل جديد | DatabaseName |
لا |
إجمالي الاتصالات المجمعة (معاينة) | total_pooled_connections |
عدد | العدد الحالي للاتصالات المجمعة | DatabaseName |
لا |
عدد تجمعات الاتصال (معاينة) | num_pools |
عدد | العدد الإجمالي لتجمعات الاتصال | DatabaseName |
لا |
لمعرفة المزيد، راجع مقاييس PgBouncer.
وحدة تحكم المسؤول
يوفر PgBouncer أيضا قاعدة بيانات داخلية تسمى pgbouncer
. عند الاتصال بقاعدة البيانات هذه، يمكنك تشغيل SHOW
الأوامر التي توفر معلومات حول الحالة الحالية ل PgBouncer.
للاتصال بقاعدة pgbouncer
البيانات:
تعيين المعلمة
pgBouncer.stats_users
إلى اسم مستخدم موجود (على سبيل المثال،myUser
)، وتطبيق التغييرات.اتصل بقاعدة
pgbouncer
البيانات مثل هذا المستخدم وضبط المنفذ على6432
:psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=pgbouncer user=myUser password=myPassword sslmode=require"
بعد الاتصال بقاعدة البيانات، استخدم SHOW
الأوامر لعرض إحصائيات PgBouncer:
SHOW HELP
: سرد جميع الأوامر المتوفرةSHOW
.SHOW POOLS
: إظهار عدد الاتصالات في كل حالة لكل تجمع.SHOW DATABASES
: إظهار حدود الاتصال المطبقة الحالية لكل قاعدة بيانات.SHOW STATS
: إظهار الإحصائيات حول الطلبات وحركة المرور لكل قاعدة بيانات.
لمزيد من المعلومات حول أوامر PgBouncer SHOW
، راجع وحدة تحكم المسؤول.
تبديل التطبيق الخاص بك لاستخدام PgBouncer
لبدء استخدام PgBouncer، اتبع الخطوات التالية:
اتصل بخادم قاعدة البيانات، ولكن استخدم المنفذ 6432 بدلا من المنفذ العادي 5432. تحقق من أن هذا الاتصال يعمل.
psql "host=myPgServer.postgres.database.azure.com port=6432 dbname=postgres user=myUser password=myPassword sslmode=require"
اختبر تطبيقك في بيئة QA مقابل PgBouncer، للتأكد من عدم وجود أي مشاكل في التوافق. يوفر مشروع PgBouncer مصفوفة توافق، ونوصي بتجميع المعاملات لمعظم المستخدمين.
قم بتغيير تطبيق الإنتاج للاتصال بالمنفذ 6432 بدلا من 5432. راقب أي أخطاء من جانب التطبيق قد تشير إلى مشكلات التوافق.
PgBouncer في قابلية وصول عالية زائدة عن الحاجة للمنطقة
في خوادم المنطقة المكررة والتوافر العالي (HA)، يقوم الخادم الأساسي بتشغيل PgBouncer. يمكنك الاتصال ب PgBouncer على الخادم الأساسي عبر المنفذ 6432. بعد تجاوز الفشل، تتم إعادة تشغيل PgBouncer في وضع الاستعداد الذي تمت ترقيته حديثا، والذي أصبح الآن الخادم الأساسي. لذلك يظل تطبيقك سلسلة الاتصال كما هو بعد تجاوز الفشل.
استخدام PgBouncer مع تجمعات الاتصال الأخرى
في بعض الحالات، قد يكون لديك بالفعل تجمع اتصال من جانب التطبيق أو تم إعداد PgBouncer على جانب التطبيق الخاص بك (على سبيل المثال، Azure Kubernetes Service sidecar). في هذه الحالات، يمكن أن تظل ميزة PgBouncer المضمنة مفيدة لأنها توفر فوائد تحجيم الاتصال الخامل.
يمكن أن يكون استخدام تجمع من جانب التطبيق مع PgBouncer على خادم قاعدة البيانات مفيدا. هنا، يجلب التجمع من جانب التطبيق فائدة انخفاض زمن انتقال الاتصال الأولي (لأن الجولة لتهيئة الاتصال أسرع بكثير)، ويوفر PgBouncer من جانب قاعدة البيانات تحجيم الاتصال الخامل.
القيود
ميزة PgBouncer غير مدعومة حاليا مع طبقة حساب الخادم القابل للاندفاع. إذا قمت بتغيير طبقة الحوسبة من General Purpose أو Memory Optimized إلى Burstable، فستفقد قدرة PgBouncer المضمنة.
كلما تمت إعادة تشغيل الخادم أثناء عمليات المقياس أو تجاوز فشل قابلية الوصول العالية أو إعادة التشغيل، تتم أيضا إعادة تشغيل PgBouncer والجهاز الظاهري. ثم عليك إعادة إنشاء الاتصالات الموجودة.
لا يعرض المدخل جميع معلمات PgBouncer. بعد تمكين PgBouncer وحفظ المعلمات، يجب إغلاق جزء Server parameters (على سبيل المثال، حدد Overview) ثم العودة إلى جزء Server parameters .
لا يمكنك استخدام أوضاع تجمع العبارات مع العبارات المعدة. أضاف الإصدار الحالي من PgBouncer دعما للبيانات المعدة داخل وضع المعاملة. يمكن تمكين هذا الدعم وتكوينه عبر معلمة max_prepared_statements. سيؤدي تعيين هذه المعلمة فوق القيمة الافتراضية 0 إلى تشغيل دعم العبارات المعدة. ينطبق هذا الدعم فقط على العبارات المعدة على مستوى البروتوكول. بالنسبة لمعظم لغات البرمجة، هذا يعني أننا نستخدم وظيفة libpq PQprepare على العميل، وإرسال أوامر مستوى البروتوكول التي يمكن ل PgBouncer اعتراضها، بدلا من إصدار أمر SQL ديناميكي مشابه لإعداد proc AS، والذي يرسل نصا لن يفسره PgBouncer بشكل صحيح. للتحقق من القيود الأخرى لوضع التجمع الذي اخترته، راجع وثائق PgBouncer.
إذا تم نشر PgBouncer كميزة، يصبح نقطة فشل واحدة محتملة. إذا كانت ميزة PgBouncer معطلة، فقد تؤدي إلى تعطيل تجمع اتصال قاعدة البيانات بالكامل والتسبب في توقف التطبيق. للتخفيف من نقطة الفشل الفردية، يمكنك إعداد مثيلات PgBouncer متعددة خلف موازن تحميل للتوافر العالي على أجهزة Azure الظاهرية.
تقييد حجم الرمز المميز باستخدام مصادقة AAD - لن يتمكن المستخدمون الذين لديهم عدد كبير من عضويات المجموعة من الاتصال من خلال PgBouncer بسبب تقييد حجم الرمز المميز. تعمل التطبيقات والخدمات والمستخدمين الذين لديهم عدد صغير من المجموعات.
PgBouncer هو تطبيق خفيف الوزن يستخدم بنية ذات مؤشر ترابط واحد. هذا التصميم رائع لمعظم أحمال عمل التطبيق. ولكن في التطبيقات التي تنشئ عددا كبيرا من الاتصالات قصيرة الأجل، قد يؤثر هذا التصميم على أداء pgBouncer ويحد من قدرتك على توسيع نطاق تطبيقك. قد تحتاج إلى تجربة أحد هذه الأساليب:
- توزيع تحميل الاتصال عبر مثيلات PgBouncer متعددة على أجهزة Azure الظاهرية.
- ضع في اعتبارك الحلول البديلة، بما في ذلك الحلول متعددة القراءة مثل PgCat، على أجهزة Azure الظاهرية.
هام
تم إهمال المعلمة pgbouncer.client_tls_sslmode
لميزة PgBouncer المضمنة في قاعدة بيانات Azure لخادم PostgreSQL المرن.
عند فرض TLS/SSL للاتصالات بقاعدة بيانات Azure لخادم PostgreSQL المرن عبر تعيين require_secure_transport
معلمة الخادم إلى ON
، يتم فرض TLS/SSL تلقائيا للاتصالات بميزة PgBouncer المضمنة. يكون هذا الإعداد قيد التشغيل بشكل افتراضي عند إنشاء مثيل خادم مرن جديد لقاعدة بيانات Azure ل PostgreSQL وتمكين ميزة PgBouncer المضمنة. لمزيد من المعلومات، راجع نظرة عامة على الشبكات لقاعدة بيانات Azure ل PostgreSQL - خادم مرن مع وصول خاص.
بالنسبة للعملاء الذين يرغبون في إدارة مبسطة، وقابلية وصول عالية مدمجة، والاتصال السهل بالتطبيقات المعبأة في حاويات، والقدرة على استخدام معلمات التكوين الأكثر شيوعا، تعد ميزة PgBouncer المضمنة خيارا جيدا. بالنسبة للعملاء الذين يرغبون في قابلية التوسع متعددة مؤشرات الترابط والتحكم الكامل في جميع المعلمات وتجربة تصحيح الأخطاء، قد يكون إعداد PgBouncer على أجهزة Azure الظاهرية بديلا.
الخطوات التالية
- تعرف على مفاهيم الشبكة.
- احصل على نظرة عامة على قاعدة بيانات Azure لخادم PostgreSQL المرن.