اذهب إلى المحتوى

شرح التكرار في نظام قواعد البيانات PostgreSQL على توزيعة أوبنتو


أسامة دمراني

PostgreSQL، هو نظام متطور مفتوح المصدر، كائنيّ الارتباط-Object Relational ﻹدارة قواعد البيانات، وهو نظام قابل للتوسع، بمعنى أنه يستطيع معالجة اﻷحمال المختلفة بدءًا من تطبيقات جهاز واحد إلى خدمات الويب التجارية التي تتعامل مع مستخدمين كثر في نفس الوقت. وهذا النظام Transactional أي يعامل النقل المتسلسل للبيانات -مثل تحديث قاعدة البيانات- كوحدة واحدة لضمان سلامتها، ويحقق خصائص ACID (Atomicity – Consistency – Isolation – Durability). وكذلك يدعم قسمًا كبيرًا من معايير SQL.

فائدة: خصائص ACID هي أربعة خصائص يجب توافرها في تعاملات قواعد البيانات، وهي الذرية-Atomicity -أن تُنفَّذ العملية كوحدة واحدة-، والتناسق-Consistency، والعزل-Isolation، والثبات-Durability. ويوفر PostgreSQL العديد من المزايا مثل:

  • الاستعلامات المعقدة-Complex Queries
  • المفاتيح الأجنبية-Foreign Keys
  • المشاهدات القابلة للتحديث-Updatable Views
  •  سلامة عمليات نقل البيانات-Transactional Integrity
  • التحكم في التزامن متعدد الإصدارات-Multiversion Concurrency Control

وذكرنا قبل قليل أنه قابل للتمدد والتوسع بواسطة مستخدميه عبر إضافة دوال-Functions جديدة، ومشغّلات-operators، وأنواع بيانات، وطرق فهرسة، ولغات إجرائية-Procedural Languages. ويقدّم PostgreSQL طرقًا عديدة لتكرار قاعدة بيانات، وسنتعلم في هذا الدليل كيفية إعداد تكرار من نوع (الرئيسي-Master/الثانوي-Slave)، وهي عملية مزامنة بين قاعدتي بيانات من خلال النسخ من قاعدة بيانات على خادم (الرئيسي) إلى قاعدة بيانات أخرى في خادم آخر (الثانوي)، وسننفذ هذه العملية على خادم يعمل بتوزيعة أوبنتو 16.04.

المتطلبات

أن يكون PostgreSQL 9.6 مثبتًا على خادم أوبنتو 16.04

إعداد UFW

  • ثبّت جدار الحماية الناري غير المعقّد-Uncomplicated Firewall على خوادم أوبنتو، وهو أداة ﻹدارة جدار الحماية المعتمِد على iptables. استخدم الأمر التالي في الطرفية:
# apt-get install -y ufw
  • واﻵن، أضف PostgreSQL وخدمة SSH إلى جدار الحماية، عبر تنفيذ اﻷمر التالي:
# ufw allow ssh
# ufw allow postgresql
  • فعّل جدار الحماية:
# ufw enable

إعداد خادم PostgreSQL الرئيسي

سيمتلك الخادم الرئيسي صلاحيات القراءة والكتابة لقاعدة البيانات، وسيكون هو القادر على نقل البيانات إلى الخادم الثانوي. • افتح محررًا نصيًا وعدّل إعدادات PostgreSQL الرئيسية كما يلي: (ملاحظة: استبدل EDITOR$ بالمحرر النصي الذي تفضّله)

# $EDITOR /etc/postgresql/9.6/main/postgresql.conf
  • أزل التعليق (#) من سطر listen_addresses وأضف عنوان IP للخادم الرئيسي:
listen_addresses = 'master_server_IP_address'
  • واﻵن، أزل التعليق من سطر wal_level لتغيير قيمته:
wal_level = hot_standby
  • وأزل التعليق من السطر التالي كي تستخدم المزامنة المحلية-Local Syncing لمستوى المزامنة "Synchronization Level"
synchronous_commit = local
  • ثم أزل التعليق من السطرين التاليين، وعدلهما كما يلي، بما أننا نستخدم خادمين:
max_wal_senders = 2
wal_keep_segments = 10

واﻵن احفظ الملف وأغلقه. عدّل ملف pg_hba.conf من أجل إعدادات التوثيق-Authentication، كما يلي:

  • افتح الملف عبر هذا الأمر:
# $EDITOR /etc/postgresql/9.6/main/pg_hba.conf
  • الصق الإعدادات التالية:
# Localhost
host    replication     replica          127.0.0.1/32            md5
 
# PostgreSQL Master IP address
host    replication     replica          master_IP_address/32            md5
 
# PostgreSQL SLave IP address
host    replication     replica          slave_IP_address/32            md5
  • احفظ الملف وأغلقه، ثم أعد تشغيل PostgreSQL باستخدام systemctl
# systemctl restart postgresql

إنشاء مستخدم من أجل التكرار

سننشئ مستخدم PostgreSQL من أجل عملية التكرار، فسجّل الدخول أولًا إلى حساب المستخدم المسمّىpostgres وافتح صدفة PostgreSQL، من خلال الأوامر التالية:

# su - postgres
$ psql

أنشئ مستخدمًا جديدًا:

postgres=# CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'usr_strong_pwd';

أغلق الصَّدَفة، وهكذا تنتهي إعدادات الخادم الرئيسي.

إعداد الخادم الثانوي

لن تكون للخادم الثانوي صلاحيات الكتابة في قاعدة البيانات، وستكون وظيفته الوحيدة هي استقبال البيانات من الخادم الرئيسي، أي ستكون له صلاحية القراءة فقط. • سنوقف أولًا خدمة PostgreSQL:

# systemctl stop postgresql
  • افتح ملف الإعدادات الرئيسية لـ PostgreSQL:
# $EDITOR /etc/postgresql/9.6/main/postgresql.conf
  • أزل التعليق من سطر listen_addresses وغيّر قيمته:
listen_addresses = 'slave_IP_address'
  • أزل التعليق من سطر wal_level وغيّره كما يلي:
wal_level = hot_standby
  • وأزل التعليق أيضًا من سطر synchronous_commit كما في الخادم الرئيسي للاستفادة من المزامنة المحلية-local syncing:
synchronous_commit = local
  • ثم أزل التعليق من السطرين التاليين وغيّر قيمهما كما يلي:
max_wal_senders = 2
wal_keep_segments = 10
  • أزل التعليق من السطر التالي وغيّر قيمته كما يلي من أجل تفعيل hot_standby للخادم الثانوي:
hot_standby = on

احفظ الملف وأغلقه.

نسخ البيانات من الخادم الرئيسي إلى الثانوي

لكي نزامن بيانات الخادم الرئيسي مع الثانوي، فيجب أن يحل المجلد الأساسي “main” في الخادم الرئيسي محل المجلد الرئيسي في الخادم الثانوي، ونفعل هذا كما يلي: • سجل الدخول إلى مستخدم postgres:

# su – postgres
  • خذ نسخة احتياطية من مجلد البيانات الفعلي:
$ cd/var/lib/postgresql/9.6/
$ mv main main_bak
  • أنشئ مجلد أساسيًا جديدًا:
$ mkdir main/
  • غيّر صلاحياته:
$ chmod 700 main
  • وهنا، انسخ المجلد الأساسي من الخادم الرئيسي إلى الخادم الثانوي باستخدام pg_basebackup:
# pg_basebackup -h master_IP_address -U replica -D /var/lib/postgresql/9.6/main /-P –xlog
  • وحين ينتهي النسخ، أنشئ ملف recovery.conf داخل المجلد الأساسي "main” وانسخ المحتوى التالي فيه:
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=usr_strong_pwd'
trigger_file = '/tmp/postgresql.trigger.5432'
  • واﻵن، احفظ الملف وأغلقه، ثم غير صلاحياته كما يلي:
# chmod 600 recovery.conf
  • شغّل خدمة PostgreSQL:
# systemctl start postgresql

وهنا تنتهي إعدادات الخادم الثانوي.

الخلاصة

لقد رأينا في هذا الدليل المبسّط كيفية ضبط تكرار Master/Slave في PostgreSQL عبر استخدام خادمين يعملان بأوبنتو. وهذه الطريقة في التكرار ما هي إﻻ إحدى طرق عديدة يوفرها نظام PostgreSQL لإدارة قواعد البيانات.

ترجمة -بتصرف- لمقال PostgreSQL Replication on Ubuntu Tutorial لصاحبه Giuseppe Molica


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...