تقدم PostgreSQL 17 قنوات التحويل التي تعزز إعدادات التوافر العالي. تضمن قناة النسخ المتماثل أن تظل البيانات موثوقة ومتسقة بين العقد أثناء النسخ المتماثل، بينما تضمن قناة التحويل التناسق بين العقد، تحديدًا أثناء وبعد حدوث التحويل.
تعتبر قنوات التحويل ميزة قوية تضمن استمرار النسخ المتماثل المنطقي بسلاسة، حتى بعد التحويل إلى خادم احتياطي. باستخدام قنوات التحويل، يمكن مزامنة قنوات النسخ المتماثل المنطقي تلقائيًا عبر العقد الرئيسية والاحتياطية، مما يقلل بشكل كبير من الوقت الضائع والحاجة إلى التدخل اليدوي أثناء التحويل.
ستوجهك هذه الدليل خلال إعداد مجموعة توافر عالي PostgreSQL باستخدام ميزة قنوات التحويل الجديدة. بنهاية هذا الدليل، سيكون لديك إعداد نسخ متماثل قوي قادر على التعامل مع التحويل بسلاسة.
لماذا تعتبر قنوات التحويل مهمة من منظور تاريخي
التحديات في PostgreSQL 15
- قنوات النسخ المتماثل مرتبطة بالعقدة الرئيسية: في PostgreSQL 15، كانت قنوات النسخ المتماثل تُنشأ فقط على الخادم الرئيسي. تم فقدان جميع قنوات النسخ المتماثل المنطقي إذا فشل الخادم الرئيسي، مما أدى إلى تأخيرات كبيرة في النسخ المتماثل وفقدان البيانات.
- إدارة التحويل اليدوي: خلال سيناريوهات التحويل، كان المسؤولون يعيدون إنشاء قنوات النسخ المتماثل يدويًا على الخادم الرئيسي الجديد، مما زاد من التعقيد، وأدخل أخطاء، وأطال من الوقت الضائع.
- عدم تزامن الفتحة: لم يكن لدى خوادم الاحتياطي طريقة لمعرفة الفتحات للنسخ الأساسية. هذا النقص في التزامن أدى إلى إعادة تعيين كاملة لتيارات النسخ إذا حدث فشل في التحويل.
تحسينات في بوستجريسكيول 16
فكرة الترميز المنطقي الحدى
بوستجريسكيول 16 قدم ميزة تُدعى الترميز المنطقي الحدى على الخوادم الاحتياطيه:
- الترميز الحدى على الخادم الاحتياطي: هذا السمح لخوادم الاحتياطي بترميز سجلات WAL للتحضير للنسخ الأساسية، مما يمكن من استخدام فتحات مسخنة مسبقًا في حالة حدوث فشل في التحويل.
- تحويل أسرع: من خلال ترميز تغييرات WAL مسبقًا على الخادم الاحتياطي، كان من الممكن تقليل تأخير النسخ عند ترقية الخادم الاحتياطي إلى الأساسي. ومع ذلك، كان لا يزال هذا يتطلب بعض التكوين اليدوي لضمان تحقيق التحويل بسلاسة.
بوستجريسكيول 17: محدد القواعد – فتحات التحويل
- فتحات التحويل: تقديم فتحات التحويل في بوستجريسكيول 17 يقضي على حاجة التدخل اليدوي عن طريق مزامنة فتحات النسخ المنطقية تلقائيًا بين الخوادم الأساسية والاحتياطية.
- التزامن التلقائي: يضمن عامل التزامن الجديد للفتحات الممكنة للتحويل (تحويل = صحيح) دائمًا تزامنها، حتى عندما تكون العقدة الأساسية نشطة.
- انتقال سلس: عند الانتقال التلقائي، يمكن للخادم الاحتياطي أن يتولى السيطرة كرئيسي دون فقدان أي فتحات تكرار، مما يضمن عدم فقدان البيانات والاستمرار في عملية التكرار.
ميزة |
PostgreSQL 15 |
PostgreSQL 16 |
PostgreSQL 17 |
---|---|---|---|
التكرار المنطقي |
نعم |
نعم |
نعم |
تزامن الفتحات التلقائي |
لا |
فك ترميز منطقي أدنى على الخادم الاحتياطي |
فتحات الانتقال الكاملة |
معالجة الانتقال التلقائي |
الحاجة إلى تدخل يدوي |
فتحات مُحضّرة مُسبقًا على الخادم الاحتياطي |
فتحات الانتقال التلقائية |
مزامنة الفتحات مع الخادم الاحتياطي |
غير مدعوم |
الحد الأدنى، يتطلب تكوين |
تلقائي مع عامل slotsync |
توفر الاتساق العالي للتكرار المنطقي |
محدود |
محسن بفك التشفير الأدنى |
سلس مع فتح الفجوات التلقائي |
إنشاء مجموعة عالية التوفر مع فتح الفجوات
سيتم في هذا القسم إرشادك خلال إنشاء مجموعة عالية التوفر في PostgreSQL مع فتح الفجوات. في المثال الخاص بنا، سنستخدم العقدات التالية:
- العقدة أ (الخادم الأساسي)
- العقدة ب (الاحتياطي الفعلي)
- العقدة ج (المشترك المنطقي)
المتطلبات
قبل أن نبدأ، تأكد أن لديك:
- تم تثبيت PostgreSQL 17 على العقدات الثلاثة.
- وصول SSH بدون كلمة مرور بين كل عقدة وأخرى.
- فهم أساسي لـ PostgreSQL، تكرار PostgreSQL، وملفات تكوين PostgreSQL .
الخطوة 1: تكوين العقدة الأساسية (العقدة أ)
1.1 قم بتهيئة العنقود على NodeA
بعد تثبيت PostgreSQL على العقدة الرئيسية، قم بتهيئة العنقود؛ يمكنك استخدام الأوامر التالية:
mkdir -p /home/pgedge/nodeA
initdb -D /home/pgedge/nodeA --no-locale -E UTF8
pg_ctl -D /home/pgedge/nodeA -l /home/pgedge/logs/nodeA.log start
1.2 قم بتكوين النسخ المتماثل في ملف postgresql.conf
بعد تهيئة العنقود، قم بتحرير ملف postgresql.conf
، الموجود بشكل افتراضي في /home/pgedge/nodeA/postgresql.conf
. اضبط قيم المعلمات التالية:
wal_level = logical
max_replication_slots = 10
max_wal_senders = 10
synchronous_standby_names = '*'
synchronized_standby_slots = 'sb1_slot'
port = 5432
1.3 تحديث ملف pg_hba.conf للسماح بالوصول للنسخ المتماثل
يدير ملف pg_hba.conf مصادقة العملاء لخادم PostgreSQL. أضف الإدخال التالي إلى /home/pgedge/nodeA/pg_hba.conf
لضمان الوصول لمستخدم النسخ المتماثل:
host replication replicator 127.0.0.1/32 md5
ثم، قم بإعادة تحميل التكوين:
pg_ctl -D /home/pgedge/nodeA reload
1.4 إنشاء مستخدم نسخ متماثل
ثم، قم بتسجيل الدخول إلى PostgreSQL وأنشئ مستخدم النسخ المتماثل:
psql -d postgres -p 5432
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicator_password';
1.5 إنشاء جدول وإعداد نشر
بعد ذلك، ستحتاج إلى إنشاء جدول وإنشاء نشر مرتبط:
CREATE TABLE foo (c1 INT PRIMARY KEY);
GRANT SELECT ON foo TO replicator;
CREATE PUBLICATION mypub FOR TABLE foo;
الخطوة 2: تكوين النسخة الاحتياطية الفعلية (NodeB)
2.1 تهيئة NodeB
بعد تثبيت PostgreSQL، قم بتهيئة NodeB:
mkdir -p /home/pgedge/nodeB
initdb -D /home/pgedge/nodeB --no-locale -E UTF8
pg_ctl -D /home/pgedge/nodeB -l /home/pgedge/logs/nodeB.log start
2.1 إنشاء نسخة احتياطية أساسية
ثم، استخدم pg_basebackup لأخذ نسخة احتياطية من العنقود:
mkdir -p /home/pgedge/nodeB
pg_basebackup -D /home/pgedge/nodeB -R -X stream -P -h localhost -p 5432 -U replicator
2.2 تكوين postgresql.conf على Node-B
قم بتعديل ملف postgresql.conf
(الموجود في /home/pgedge/nodeB/postgresql.conf
)، ضبط:
port = 5433
primary_conninfo = 'host=localhost port=5432 user=replicator password=replicator_password dbname=postgres application_name=sb1_slot'
primary_slot_name = 'sb1_slot'
hot_standby_feedback = on
sync_replication_slots = on
2.3 تمكين مزامنة فتحات الفشل
استخدم عميل psql لتسجيل الدخول إلى NodeB:
psql -d postgres -p 5433
ثم، استخدم البيانات التالية لتكوين التكرار لـ NodeB:
ALTER SYSTEM SET sync_replication_slots = on;
ALTER SYSTEM SET hot_standby_feedback = on;
ALTER SYSTEM SET synchronized_standby_slots = 'sb1_slot';
اخرج من عميل psql
وأعد تشغيل NodeB:
pg_ctl -D /home/pgedge/nodeB restart
2.4 التحقق من مزامنة الفتحات
ثم، أعد الاتصال بـ NodeB باستخدام psql
وتحقق من أن الفتحات متزامنة:
SELECT slot_name, failover, synced FROM pg_replication_slots;
الخطوة 3: إعداد المشترك المنطقي (NodeC)
3.1 تهيئة العنقود وتكوين NodeC
بعد تثبيت PostgreSQL، قم بتهيئة العنقود؛ يمكنك استخدام الأوامر التالية:
mkdir -p /home/pgedge/nodeC
initdb -D /home/pgedge/nodeC --no-locale -E UTF8
ثم، عدل ملف /home/pgedge/nodeC/postgresql.conf
، وضبط قيم المعلمات التالية:
wal_level = logical
max_replication_slots = 10
max_wal_senders = 10
sync_replication_slots = on
port = 5444
After editing the configuration file, start NodeC:
pg_ctl -D /home/pgedge/nodeC -l /home/pgedge/logs/nodeC.log start
3.2 إنشاء اشتراك على NodeC
استخدم الأمر التالي لإنشاء اشتراك على NodeC:
CREATE SUBSCRIPTION foosub CONNECTION 'dbname=postgres host=localhost port=5432 user=replicator password=replicator_password' PUBLICATION mypub WITH (failover = true);
الخطوة 4: محاكاة الفشل وضمان الاستمرارية
يمكنك استخدام الأوامر التالية لمحاكاة فشل النقل والتأكد من استمرارية التكرار وحفظ سلامة البيانات.
4.1 محاكاة الفشل
استخدم الأوامر التالية لمحاكاة فشل NodeA، تليها الترقية من الوضع الاحتياطي إلى الأساسي لـ NodeB:
pg_ctl -D /home/pgedge/nodeA stop
pg_ctl -D /home/pgedge/nodeB promote
4.2 تحديث الاشتراك على NodeC
بعد الترويج لـ nodeB، قم بتسجيل الدخول إلى NodeC وقم بتحديث الاتصال ليعكس أن NodeB الآن هو العقدة الأساسية:
ALTER SUBSCRIPTION foosub DISABLE;
ALTER SUBSCRIPTION foosub CONNECTION 'dbname=postgres host=localhost port=5433 user=replicator password=replicator_password';
ALTER SUBSCRIPTION foosub ENABLE;
4.3 التحقق من استمرارية البيانات
لاختبار النسخ، استخدم psql
لتسجيل الدخول إلى Node-B (الآن هو الأساسي):
INSERT INTO foo VALUES (3), (4);
تحقق من النسخ على Node-C:
SELECT * FROM foo;
الاستنتاج
ميزة الفتح الاحتياطي في PostgreSQL 17 تتيح الفتح الاحتياطي بسلاسة في بيئات النسخ اللوجي. من خلال اتباع الخطوات الموضحة في هذا الدليل، يمكنك إنشاء مجموعة متوفرة بشكل كبير تضمن تدفق البيانات بشكل غير منقطع، حتى خلال فشل الخادم الأساسي.
من خلال تحسين التكوينات واستغلال إمكانيات PostgreSQL 17 الجديدة، يمكنك إنشاء بنية بيانات قاعدة بيانات قوية وفعالة لتطبيقاتك الحيوية.
Source:
https://dzone.com/articles/setting-up-failover-slots-in-postgresql-17