التكرار في نظام قواعد البيانات PostgreSQL على توزيعة أوبنتو
يعتبر التكرار أو الـ Replication في قواعد البيانات من الأمور الحاسمة التي تضمن توافر البيانات وسلامتها في الأنظمة الموزعة. في هذا المقال، سنتناول بالتفصيل مفهوم التكرار في PostgreSQL على توزيعة أوبنتو، مع التركيز على أنماط التكرار المختلفة، آلية العمل، وأفضل الممارسات لتنفيذه بشكل صحيح وفعال.
1. مقدمة عن التكرار في PostgreSQL
التكرار في PostgreSQL هو آلية تتيح نسخ البيانات بين قاعدة بيانات رئيسية (Master) وأخرى فرعية (Replica). الفكرة الأساسية وراء التكرار هي تحسين التوافر العالي (High Availability) وتقليل فترة التوقف عن العمل (Downtime)، كما يساعد في تحسين أداء النظام عبر توزيع الحمل على الخوادم.
يعتمد التكرار على مبدأ إرسال التحديثات التي تحدث على قاعدة البيانات الرئيسية إلى القواعد الفرعية. وبهذا الشكل، إذا تعرضت القاعدة الرئيسية لمشاكل أو تعطل، يمكن استخدام النسخة الفرعية كقاعدة بديلة للقراءة أو حتى الكتابة في بعض الحالات المتقدمة.
2. أنماط التكرار في PostgreSQL
هناك عدة أنماط للتكرار في PostgreSQL، سنناقش أهمها في هذا المقال:
2.1 التكرار النصي (Streaming Replication)
يعد التكرار النصي من أكثر أنواع التكرار شيوعًا في PostgreSQL. يعتمد هذا النوع على إرسال التحديثات بشكل مستمر من القاعدة الرئيسية إلى القاعدة الفرعية باستخدام بروتوكولات TCP/IP. التحديثات يتم إرسالها في شكل سجلات المعاملات (WAL Logs)، مما يضمن مزامنة دائمة بين القاعدتين.
مزايا التكرار النصي:
-
تحسين التوافر العالي.
-
يقلل من خطر فقدان البيانات.
-
يسمح بالقراءة من القواعد الفرعية لتخفيف الضغط عن القاعدة الرئيسية.
العيوب:
-
يحتاج إلى تكوين دقيق.
-
يتطلب إدارة ومراقبة دورية للتأكد من أن عملية التكرار تعمل بشكل صحيح.
2.2 التكرار القائم على النقاط (Point-in-Time Replication)
في هذا النوع من التكرار، يمكن للمستخدم استعادة قاعدة البيانات إلى حالة معينة في الزمن باستخدام سجلات المعاملات (WAL Logs) التي تم تسجيلها منذ لحظة معينة. هذا النوع مناسب للأنظمة التي تحتاج إلى إمكانية العودة إلى نقطة معينة في الزمن لإصلاح الأخطاء أو استعادة البيانات المفقودة.
2.3 التكرار المتماثل (Synchronous Replication)
يتم في التكرار المتماثل التأكد من أن البيانات قد تم نسخها إلى القاعدة الفرعية قبل أن يتم إتمام المعاملة في القاعدة الرئيسية. هذا النوع من التكرار يضمن أن البيانات موجودة في القاعدتين قبل أن يُسمح للمستخدم بالتفاعل مع النظام، مما يعزز أمان البيانات في حالة حدوث أي خلل في القاعدة الرئيسية.
2.4 التكرار اللامتماثل (Asynchronous Replication)
في التكرار اللامتماثل، يتم إرسال التحديثات إلى القاعدة الفرعية لكن دون تأكيد بأن البيانات قد تم استلامها بشكل صحيح من القاعدة الفرعية قبل إتمام المعاملة في القاعدة الرئيسية. هذا النوع من التكرار يكون أسرع لكنه قد يؤدي إلى فقدان بيانات في حالة حدوث مشاكل في القاعدة الرئيسية قبل أن يتم نقل البيانات إلى القاعدة الفرعية.
3. كيفية تنفيذ التكرار في PostgreSQL على توزيعة أوبنتو
إعداد التكرار في PostgreSQL على توزيعة أوبنتو يتطلب عدة خطوات من الإعداد الأولي، التكوين، والإدارة. سنقوم بتوضيح كيفية تنفيذ التكرار النصي بين قاعدة بيانات رئيسية ونسخة فرعية على أوبنتو.
3.1 إعداد القاعدة الرئيسية
-
تثبيت PostgreSQL:
أولاً، يجب التأكد من أن PostgreSQL مثبت على الخادم الرئيسي. يمكن تثبيت PostgreSQL باستخدام الأمر التالي:bashsudo apt update sudo apt install postgresql postgresql-contrib -
تعديل ملف التكوين:
بعد تثبيت PostgreSQL، يجب تعديل ملف التكوينpostgresql.confلتفعيل التكرار. يتم تعديل الإعدادات التالية:-
تعديل
listen_addressesليشمل عنوان الخادم:bashlisten_addresses = '*' -
تفعيل التكرار النصي عبر
wal_level:bashwal_level = replica -
تحديد الحد الأقصى للاتصالات المتزامنة:
bashmax_wal_senders = 3 -
تفعيل التكرار من خلال
hot_standby:bashhot_standby = on
-
-
إعداد صلاحيات الوصول:
يجب تعديل ملفpg_hba.confللسماح للقاعدة الفرعية بالاتصال بالقاعدة الرئيسية. يتم ذلك بإضافة السطر التالي إلى الملف:bashhost replication all 192.168.1.0/24 md5 -
إعادة تشغيل خدمة PostgreSQL:
بعد التعديلات، يجب إعادة تشغيل خدمة PostgreSQL لتطبيق التغييرات:bashsudo systemctl restart postgresql
3.2 إعداد القاعدة الفرعية
-
تثبيت PostgreSQL على الخادم الفرعي:
يجب تثبيت PostgreSQL على الخادم الفرعي بنفس الطريقة التي تم بها على الخادم الرئيسي. -
إعداد نسخة احتياطية:
لإنشاء نسخة من قاعدة البيانات الرئيسية على الخادم الفرعي، يجب أخذ نسخة احتياطية باستخدام أداةpg_basebackup:bashpg_basebackup -h-D /var/lib/postgresql/12/main -U replicator -v -P --wal-method=stream حيث
هو عنوان الـ IP الخاص بالخادم الرئيسي، وreplicatorهو المستخدم الذي لديه صلاحية التكرار. -
إعداد التكوين على الخادم الفرعي:
في ملفpostgresql.confعلى الخادم الفرعي، يجب تعديل الإعدادات التالية:-
تحديد الخادم الرئيسي:
bashprimary_conninfo = 'host=port=5432 user=replicator password=your_password' -
تعيين
hot_standbyإلى “on”:bashhot_standby = on
-
-
إعادة تشغيل خدمة PostgreSQL على الخادم الفرعي:
bashsudo systemctl restart postgresql
3.3 التحقق من التكرار
بعد إتمام الإعدادات على الخادم الرئيسي والخادم الفرعي، يمكن التحقق من حالة التكرار باستخدام الأوامر التالية على الخادم الفرعي:
-
للتحقق من حالة التكرار:
bashpg_stat_replicationسيعرض هذا الأمر حالة الاتصال بالتكرار ومعلومات حول عملية التكرار.
-
للتحقق من حالة القراءة من القاعدة الفرعية:
يمكن التحقق من استعلامات القراءة على الخادم الفرعي باستخدام
SELECT:sqlSELECT * FROM pg_stat_activity;
4. إدارة التكرار في PostgreSQL
إدارة التكرار في PostgreSQL تتطلب مراقبة منتظمة للتأكد من استمرارية العملية بشكل فعال. يمكن استخدام أدوات مثل pg_stat_replication لمراقبة حالة التكرار. كما يجب التأكد من أن الخوادم الفرعية يمكنها الاستجابة للطلبات في حالة حدوث فشل في الخادم الرئيسي.
من المهم أيضًا أن يتم إجراء اختبارات دورية لضمان أن النسخ الاحتياطية تعمل بشكل صحيح وأن بيانات التكرار متزامنة بين القاعدة الرئيسية والفرعية.
5. التكرار في بيئات الإنتاج
عند استخدام التكرار في بيئات الإنتاج، يجب أخذ بعض الاعتبارات في الحسبان مثل التأكد من توفر التكرار المتزامن (Synchronous Replication) في حالة الحاجة إلى ضمان عدم فقدان أي بيانات. بالإضافة إلى ذلك، يجب أن يتم تأمين الاتصال بين الخوادم باستخدام بروتوكولات الأمان المناسبة.
6. الخاتمة
يعد التكرار في PostgreSQL أداة قوية لضمان التوافر العالي وتحسين أداء النظام. من خلال فهم كيفية تنفيذ التكرار على توزيعة أوبنتو، يمكن للمطورين ومسؤولي النظام تنفيذ حلول تكرار فعالة تضمن استمرارية عمل الأنظمة والتطبيقات دون التأثر بتعطلات الخوادم.

