النسخ المتماثل PostgreSQL: دليل شامل
نشرت: 2022-08-11كما سيخبرك أي مالك موقع ، يمكن أن يكون فقدان البيانات ووقت التوقف عن العمل ، حتى في الحد الأدنى من الجرعات ، كارثيًا. يمكن أن تصل إلى غير المستعدين في أي وقت ، مما يؤدي إلى انخفاض الإنتاجية وإمكانية الوصول وثقة المنتج.
لحماية سلامة موقعك ، من الضروري بناء ضمانات ضد احتمال حدوث تعطل أو فقدان البيانات.
هذا هو المكان الذي يأتي فيه تكرار البيانات.
نسخ البيانات هو عملية نسخ احتياطي آلية يتم فيها نسخ بياناتك بشكل متكرر من قاعدة البيانات الرئيسية إلى موقع آخر بعيد لحفظها. إنها تقنية متكاملة لأي موقع أو تطبيق يقوم بتشغيل خادم قاعدة بيانات. يمكنك أيضًا الاستفادة من قاعدة البيانات المنسوخة لمعالجة SQL للقراءة فقط ، مما يسمح بتشغيل المزيد من العمليات داخل النظام.
يوفر إعداد النسخ المتماثل بين قاعدتي بيانات التسامح مع الأخطاء غير المتوقعة. تعتبر أفضل استراتيجية لتحقيق توافر عالي أثناء الكوارث.
في هذه المقالة ، سنتعمق في الاستراتيجيات المختلفة التي يمكن لمطوري الواجهة الخلفية تنفيذها من أجل النسخ المتماثل السلس لـ PostgreSQL.
ما هو النسخ المتماثل PostgreSQL؟
يُعرَّف النسخ المتماثل لـ PostgreSQL بأنه عملية نسخ البيانات من خادم قاعدة بيانات PostgreSQL إلى خادم آخر. يُعرف خادم قاعدة البيانات المصدر أيضًا باسم الخادم "الأساسي" ، بينما يُعرف خادم قاعدة البيانات الذي يتلقى البيانات المنسوخة باسم خادم "النسخة المتماثلة".
تتبع قاعدة بيانات PostgreSQL نموذجًا مباشرًا للنسخ المتماثل ، حيث تنتقل جميع عمليات الكتابة إلى عقدة أساسية. يمكن للعقدة الأساسية بعد ذلك تطبيق هذه التغييرات وبثها إلى العقد الثانوية.
ما هو تجاوز الفشل التلقائي؟
بمجرد تكوين النسخ المتماثل للدفق الفعلي في PostgreSQL ، يمكن أن يحدث تجاوز الفشل إذا فشل الخادم الأساسي لقاعدة البيانات. يتم استخدام تجاوز الفشل لتحديد عملية الاسترداد ، والتي قد تستغرق بعض الوقت ، لأنها لا توفر أدوات مضمنة لتحديد نطاق فشل الخادم.
ليس عليك الاعتماد على PostgreSQL لتجاوز الفشل. هناك أدوات مخصصة تتيح تجاوز الفشل التلقائي والتبديل التلقائي إلى وضع الاستعداد ، مما يقلل من وقت تعطل قاعدة البيانات.
من خلال إعداد النسخ المتماثل لتجاوز الفشل ، فإنك تضمن توفرًا عاليًا من خلال ضمان توفر أنظمة الاستعداد في حالة انهيار الخادم الأساسي على الإطلاق.
فوائد استخدام النسخ المتماثل PostgreSQL
فيما يلي بعض الفوائد الرئيسية للاستفادة من نسخ PostgreSQL:
- ترحيل البيانات : يمكنك الاستفادة من النسخ المتماثل PostgreSQL لترحيل البيانات إما من خلال تغيير أجهزة خادم قاعدة البيانات أو من خلال نشر النظام.
- تحمل الخطأ : في حالة فشل الخادم الأساسي ، يمكن أن يعمل الخادم البديل كخادم لأن البيانات المضمنة لكل من الخوادم الأساسية والخوادم الاحتياطية هي نفسها.
- أداء معالجة المعاملات عبر الإنترنت (OLTP) : يمكنك تحسين وقت معالجة المعاملات ووقت الاستعلام لنظام OLTP عن طريق إزالة تحميل استعلام التقارير. وقت معالجة المعاملة هو المدة التي يستغرقها تنفيذ استعلام معين قبل إنهاء المعاملة.
- اختبار النظام بالتوازي : أثناء ترقية نظام جديد ، تحتاج إلى التأكد من أن النظام يعمل بشكل جيد مع البيانات الموجودة ، ومن ثم الحاجة إلى الاختبار بنسخة قاعدة بيانات الإنتاج قبل النشر.
كيف يعمل النسخ المتماثل PostgreSQL
بشكل عام ، يعتقد الناس أنه عندما تتعامل مع بنية أساسية وثانوية ، هناك طريقة واحدة فقط لإعداد النسخ الاحتياطية والنسخ المتماثل ، لكن عمليات نشر PostgreSQL تتبع أحد الأساليب الثلاثة التالية:
- النسخ المتماثل لمستوى الصوت للنسخ المتماثل في طبقة التخزين من العقدة الأولية إلى العقدة الثانوية ، متبوعًا بدعمها حتى تخزين blob / S3.
- تكرار تدفق PostgreSQL لنسخ البيانات من العقدة الأولية إلى العقدة الثانوية ، متبوعًا بنسخها احتياطيًا إلى تخزين blob / S3.
- أخذ نسخ احتياطية تزايدي من العقدة الأساسية إلى S3 أثناء إعادة بناء عقدة ثانوية جديدة من S3. عندما تكون العقدة الثانوية بالقرب من العقدة الأساسية ، يمكنك بدء البث من العقدة الأساسية.
الأسلوب 1: البث
يمكن إعداد النسخ المتماثل لبث PostgreSQL المعروف أيضًا باسم النسخ المتماثل WAL بسلاسة بعد تثبيت PostgreSQL على جميع الخوادم. يعتمد أسلوب النسخ المتماثل هذا على نقل ملفات WAL من قاعدة البيانات الأساسية إلى قاعدة البيانات الهدف.
يمكنك تنفيذ النسخ المتماثل للدفق PostgreSQL باستخدام تكوين أساسي-ثانوي. الخادم الأساسي هو المثيل الرئيسي الذي يعالج قاعدة البيانات الأساسية وجميع عملياتها. يعمل الخادم الثانوي كمثيل إضافي وينفذ جميع التغييرات التي تم إجراؤها على قاعدة البيانات الأساسية على نفسه ، مما يؤدي إلى إنشاء نسخة متطابقة في العملية. الأساسي هو خادم القراءة / الكتابة بينما الخادم الثانوي للقراءة فقط.
لهذا الأسلوب ، تحتاج إلى تكوين كل من العقدة الأساسية والعقدة الاحتياطية. ستوضح الأقسام التالية الخطوات المتضمنة في تكوينها بسهولة.
تكوين العقدة الأساسية
يمكنك تكوين العقدة الأساسية لتدفق النسخ المتماثل من خلال تنفيذ الخطوات التالية:
الخطوة 1: تهيئة قاعدة البيانات
لتهيئة قاعدة البيانات ، يمكنك الاستفادة من أمر initidb utility
. بعد ذلك ، يمكنك إنشاء مستخدم جديد بامتيازات النسخ باستخدام الأمر التالي:
CREATE USER REPLICATION LOGIN ENCRYPTED PASSWORD '';
سيتعين على المستخدم تقديم كلمة مرور واسم مستخدم للاستعلام المحدد. يتم استخدام الكلمة الأساسية للنسخ المتماثل لمنح المستخدم الامتيازات المطلوبة. قد يبدو طلب البحث كمثال على النحو التالي:
CREATE USER rep_user REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_pass'
الخطوة 2: تكوين خصائص التدفق
بعد ذلك ، يمكنك ضبط خصائص البث باستخدام ملف تكوين PostgreSQL ( postgresql.conf ) الذي يمكن تعديله على النحو التالي:
wal_level = logical wal_log_hints = on max_wal_senders = 8 max_wal_size = 1GB hot_standby = on
فيما يلي خلفية صغيرة حول المعلمات المستخدمة في المقتطف السابق:
-
wal_log_hints
: هذه المعلمة مطلوبةpg_rewind
التي تكون مفيدة عندما يكون الخادم البديل غير متزامن مع الخادم الأساسي. -
wal_level
: يمكنك استخدام هذه المعلمة لتمكين النسخ المتماثل المتدفق لـ PostgreSQL ، مع القيم المحتملة بما في ذلكminimal
أوreplica
أوlogical
. -
max_wal_size
: يمكن استخدام هذا لتحديد حجم ملفات WAL التي يمكن الاحتفاظ بها في ملفات السجل. -
hot_standby
: يمكنك الاستفادة من هذه المعلمة لاتصال قراءة مع الثانوي عند ضبطه على ON. -
max_wal_senders
: يمكنك استخدامmax_wal_senders
لتحديد أقصى عدد من الاتصالات المتزامنة التي يمكن إنشاؤها مع الخوادم الاحتياطية.
الخطوة 3: إنشاء إدخال جديد
بعد تعديل المعلمات في ملف postgresql.conf ، يمكن أن يسمح إدخال النسخ المتماثل الجديد في ملف pg_hba.conf للخوادم بإنشاء اتصال مع بعضها البعض للنسخ المتماثل.
يمكنك عادةً العثور على هذا الملف في دليل البيانات في PostgreSQL. يمكنك استخدام مقتطف الشفرة التالي لنفسه:
host replication rep_user IPaddress md5
بمجرد تنفيذ مقتطف الشفرة ، يسمح الخادم الأساسي لمستخدم يسمى rep_user
بالاتصال والعمل كخادم احتياطي باستخدام عنوان IP المحدد للنسخ المتماثل. على سبيل المثال:
host replication rep_user 192.168.0.22/32 md5
تكوين العقدة الاحتياطية
لتكوين عقدة الاستعداد لتدفق النسخ المتماثل ، اتبع الخطوات التالية:
الخطوة 1: عمل نسخة احتياطية من العقدة الأساسية
لتكوين العقدة الاحتياطية ، استفد من الأداة المساعدة pg_basebackup
لإنشاء نسخة احتياطية من العقدة الأساسية. سيكون هذا بمثابة نقطة انطلاق لعقدة الاستعداد. يمكنك استخدام هذه الأداة مع بناء الجملة التالي:
pg_basebackp -D -h -X stream -c fast -U rep_user -W
المعلمات المستخدمة في بناء الجملة المذكورة أعلاه هي كما يلي:
-
-h
: يمكنك استخدام هذا للإشارة إلى المضيف الأساسي. -
-D
: تشير هذه المعلمة إلى الدليل الذي تعمل عليه حاليًا. -
-C
: يمكنك استخدام هذا لضبط نقاط التفتيش. -
-X
: يمكن استخدام هذه المعلمة لتضمين ملفات سجل المعاملات الضرورية. -
-W
: يمكنك استخدام هذه المعلمة لمطالبة المستخدم بكلمة مرور قبل الارتباط بقاعدة البيانات.
الخطوة 2: إعداد ملف تكوين النسخ المتماثل
بعد ذلك ، تحتاج إلى التحقق من وجود ملف تكوين النسخ المتماثل. إذا لم يحدث ذلك ، يمكنك إنشاء ملف تكوين النسخ المتماثل كـ recovery.conf.
يجب عليك إنشاء هذا الملف في دليل البيانات الخاص بتثبيت PostgreSQL. يمكنك إنشاؤه تلقائيًا باستخدام الخيار -R
داخل الأداة المساعدة pg_basebackup
.
يجب أن يحتوي ملف recovery.conf على الأوامر التالية:
وضع الاستعداد = 'تشغيل'
Primary_conninfo = 'host = <master_host> المنفذ = <postgres_port> user = <replication_user> password = <password> application_name = ”host_name”'
Recovery_target_timeline = "الأحدث"
المعلمات المستخدمة في الأوامر المذكورة أعلاه هي كما يلي:
-
primary_conninfo
: يمكنك استخدام هذا لإجراء اتصال بين الخوادم الأساسية والثانوية من خلال الاستفادة من سلسلة الاتصال. -
standby_mode
: يمكن أن يتسبب هذا المعامل في بدء تشغيل الخادم الأساسي كخادم الاستعداد عند التبديل إلى وضع التشغيل. -
recovery_target_timeline
: يمكنك استخدام هذا لتعيين وقت الاسترداد.
لإعداد اتصال ، تحتاج إلى توفير اسم المستخدم وعنوان IP وكلمة المرور كقيم للمعلمة basic_conninfo. على سبيل المثال:
primary_conninfo = 'host=192.168.0.26 port=5432 user=rep_user password=rep_pass'
الخطوة 3: أعد تشغيل الخادم الثانوي
أخيرًا ، يمكنك إعادة تشغيل الخادم الثانوي لإكمال عملية التكوين.
ومع ذلك ، يأتي النسخ المتماثل للدفق مع العديد من التحديات ، مثل:
- يتحدث العديد من عملاء PostgreSQL (المكتوبة بلغات برمجة مختلفة) بنقطة نهاية واحدة. عندما تفشل العقدة الأساسية ، سيستمر هؤلاء العملاء في إعادة محاولة نفس اسم DNS أو IP. هذا يجعل تجاوز الفشل مرئيًا للتطبيق.
- لا يأتي النسخ المتماثل PostgreSQL مع تجاوز الفشل والمراقبة المضمنين. عندما تفشل العقدة الأساسية ، تحتاج إلى ترقية عقدة ثانوية لتكون العقدة الأساسية الجديدة. يجب تنفيذ هذا الترويج بطريقة يكتب فيها العملاء إلى عقدة أساسية واحدة فقط ، ولا يلاحظون تناقضات البيانات.
- تكرر PostgreSQL حالتها بالكامل. عندما تحتاج إلى تطوير عقدة ثانوية جديدة ، يحتاج الثانوي إلى تلخيص التاريخ الكامل لتغير الحالة من العقدة الأساسية ، والتي تتطلب موارد كثيرة وتجعل إزالة العقد في الرأس وإنشاء أخرى جديدة مكلفًا.
الطريقة 2: جهاز الحظر المتماثل
يعتمد أسلوب جهاز الكتل المنسوخ على النسخ المتطابق للقرص (المعروف أيضًا باسم النسخ المتماثل لوحدة التخزين). في هذا النهج ، تتم كتابة التغييرات على وحدة تخزين ثابتة يتم عكسها بشكل متزامن إلى وحدة تخزين أخرى.
الميزة الإضافية لهذا النهج هي توافقه وقوة تحمل البيانات في البيئات السحابية مع جميع قواعد البيانات العلائقية ، بما في ذلك PostgreSQL و MySQL و SQL Server ، على سبيل المثال لا الحصر.
ومع ذلك ، فإن أسلوب عكس القرص في النسخ المتماثل PostgreSQL يحتاج إلى نسخ كل من سجل WAL وبيانات الجدول. نظرًا لأن كل عملية كتابة في قاعدة البيانات تحتاج الآن إلى الانتقال عبر الشبكة بشكل متزامن ، فلا يمكنك تحمل خسارة بايت واحد ، لأن ذلك قد يترك قاعدة البيانات الخاصة بك في حالة فاسدة.
يتم الاستفادة من هذا الأسلوب عادةً باستخدام Azure PostgreSQL و Amazon RDS.
النهج 3: WAL
يتكون WAL من ملفات مقطعية (16 ميغا بايت بشكل افتراضي). يحتوي كل مقطع على سجل واحد أو أكثر. سجل تسلسل السجل (LSN) هو مؤشر إلى سجل في WAL ، يتيح لك معرفة الموقع / الموقع حيث تم حفظ السجل في ملف السجل.
يستفيد الخادم الاحتياطي من مقاطع WAL - المعروفة أيضًا باسم XLOGS في مصطلحات PostgreSQL - لتكرار التغييرات باستمرار من الخادم الأساسي. يمكنك استخدام التسجيل المسبق للكتابة لمنح المتانة والذرة في نظام إدارة قواعد البيانات عن طريق تسلسل أجزاء من بيانات مصفوفة البايت (كل منها مع LSN فريد) إلى تخزين مستقر قبل تطبيقها على قاعدة بيانات.
قد يؤدي تطبيق طفرة على قاعدة بيانات إلى عمليات مختلفة لنظام الملفات. السؤال المناسب الذي يطرح نفسه هو كيف يمكن لقاعدة البيانات ضمان الذرية في حالة فشل الخادم بسبب انقطاع التيار الكهربائي أثناء وجوده في منتصف تحديث نظام الملفات. عند بدء تشغيل قاعدة البيانات ، تبدأ عملية بدء التشغيل أو إعادة التشغيل التي يمكنها قراءة مقاطع WAL المتاحة ومقارنتها بـ LSN المخزنة في كل صفحة بيانات (يتم تمييز كل صفحة بيانات بـ LSN لأحدث سجل WAL الذي يؤثر على الصفحة).
تسجيل النسخ المتماثل المستند إلى الشحن (مستوى الحظر)
يعمل النسخ المتماثل المتدفق على تحسين عملية شحن السجل. على عكس انتظار مفتاح WAL ، يتم إرسال السجلات بمجرد إنشائها ، وبالتالي تقليل تأخير النسخ المتماثل.
يتفوق النسخ المتماثل المتدفق أيضًا على شحن السجل لأن الخادم الاحتياطي يرتبط بالخادم الأساسي عبر الشبكة عن طريق الاستفادة من بروتوكول النسخ المتماثل. يمكن للخادم الأساسي بعد ذلك إرسال سجلات WAL مباشرة عبر هذا الاتصال دون الحاجة إلى الاعتماد على البرامج النصية التي يوفرها المستخدم النهائي.
تسجيل النسخ المتماثل المستند إلى الشحن (مستوى الملف)
يتم تعريف شحن السجل على أنه نسخ ملفات السجل إلى خادم PostgreSQL آخر لإنشاء خادم احتياطي آخر عن طريق إعادة تشغيل ملفات WAL. تم تكوين هذا الخادم للعمل في وضع الاسترداد ، والغرض الوحيد منه هو تطبيق أي ملفات WAL جديدة عند ظهورها.
يصبح هذا الخادم الثانوي بعد ذلك نسخة احتياطية دافئة لخادم PostgreSQL الأساسي. يمكن أيضًا تكوينه ليكون نسخة متماثلة للقراءة ، حيث يمكنه تقديم استعلامات للقراءة فقط ، والتي يشار إليها أيضًا باسم الاستعداد السريع.
أرشفة WAL المستمرة
يُعرف تكرار ملفات WAL أثناء إنشائها في أي مكان آخر غير الدليل الفرعي pg_wal
باسم أرشفة WAL. سوف تستدعي PostgreSQL نصًا قدمه المستخدم للأرشفة ، في كل مرة يتم فيها إنشاء ملف WAL.
يمكن للبرنامج النصي الاستفادة من الأمر scp
لتكرار الملف إلى موقع واحد أو أكثر مثل NFS mount. بمجرد أرشفتها ، يمكن الاستفادة من ملفات مقطع WAL لاستعادة قاعدة البيانات في أي وقت معين.
تتضمن التكوينات الأخرى المستندة إلى السجل ما يلي:
- النسخ المتماثل المتزامن : قبل الالتزام بكل معاملة نسخ متزامن ، ينتظر الخادم الأساسي حتى تؤكد أنظمة الاستعداد أنها حصلت على البيانات. تكمن فائدة هذا التكوين في عدم حدوث أي تعارضات بسبب عمليات الكتابة المتوازية.
- النسخ المتماثل متعدد الأقطاب المتزامن : هنا ، يمكن لكل خادم قبول طلبات الكتابة ، ويتم نقل البيانات المعدلة من الخادم الأصلي إلى كل خادم آخر قبل تنفيذ كل معاملة. إنها تعزز بروتوكول 2PC وتلتزم بقاعدة الكل أو لا شيء.
تفاصيل بروتوكول WAL الجري
تعمل العملية المعروفة باسم مستقبل WAL ، والتي تعمل على الخادم الاحتياطي ، على تعزيز تفاصيل الاتصال المتوفرة في معلمة primary_conninfo
الخاصة بـ recovery.conf وتتصل بالخادم الأساسي عن طريق الاستفادة من اتصال TCP / IP.
لبدء النسخ المتماثل المتدفق ، يمكن للواجهة الأمامية إرسال معلمة النسخ المتماثل داخل رسالة بدء التشغيل. تتيح القيمة المنطقية لـ true ، أو نعم ، أو 1 ، أو ON للواجهة الخلفية معرفة أنها بحاجة إلى الانتقال إلى وضع النسخ المتماثل المادي.
مرسل WAL هو عملية أخرى يتم تشغيلها على الخادم الأساسي وهي مسؤولة عن إرسال سجلات WAL إلى الخادم البديل عند إنشائها. يحفظ جهاز استقبال WAL سجلات WAL في WAL كما لو تم إنشاؤها بواسطة نشاط العميل للعملاء المتصلين محليًا.
بمجرد وصول سجلات WAL إلى ملفات مقطع WAL ، يواصل الخادم الاحتياطي إعادة تشغيل WAL باستمرار بحيث يتم تحديث البيانات الأساسية والاحتياطية.
عناصر النسخ المتماثل PostgreSQL
في هذا القسم ، ستكتسب فهمًا أعمق للنماذج شائعة الاستخدام (النسخ المتماثل الرئيسي الفردي والمتعدد الرئيسي) ، والأنواع (النسخ المتماثل المادي والمنطقي) ، والأوضاع (المتزامنة وغير المتزامنة) للنسخ المتماثل PostgreSQL.
نماذج نسخ قاعدة بيانات PostgreSQL
تعني قابلية التوسع إضافة المزيد من الموارد / الأجهزة إلى العقد الحالية لتعزيز قدرة قاعدة البيانات على تخزين ومعالجة المزيد من البيانات التي يمكن تحقيقها أفقيًا وعموديًا. يعد تكرار PostgreSQL مثالاً على قابلية التوسع الأفقي التي يصعب تنفيذها أكثر من قابلية التوسع الرأسي. يمكننا تحقيق قابلية التوسع الأفقي بشكل أساسي عن طريق النسخ المتماثل الرئيسي الفردي (SMR) والنسخ متعدد الشرائح الرئيسية (MMR).
يسمح النسخ المتماثل الرئيسي الفردي بتعديل البيانات فقط على عقدة واحدة ، ويتم نسخ هذه التعديلات إلى عقد واحد أو أكثر. لا يُسمح للجداول المنسوخة في قاعدة بيانات النسخة المتماثلة بقبول أي تغييرات ، باستثناء تلك من الخادم الأساسي. حتى لو فعلوا ذلك ، فلن يتم نسخ التغييرات مرة أخرى إلى الخادم الأساسي.
في معظم الأحيان ، يعد SMR كافيًا للتطبيق لأنه أقل تعقيدًا في التكوين والإدارة مع عدم وجود فرص للتعارض. يعد النسخ المتماثل الرئيسي الفردي أيضًا أحادي الاتجاه ، نظرًا لأن بيانات النسخ المتماثل تتدفق في اتجاه واحد بشكل أساسي ، من قاعدة البيانات الأساسية إلى قاعدة البيانات المتماثلة.
في بعض الحالات ، قد لا تكون SMR وحدها كافية ، وقد تحتاج إلى تطبيق MMR. يسمح MMR لأكثر من عقدة بالعمل كعقدة أساسية. يتم نسخ التغييرات التي تم إجراؤها على صفوف الجدول في أكثر من قاعدة بيانات أساسية معينة إلى الجداول المقابلة لها في كل قاعدة بيانات أساسية أخرى. في هذا النموذج ، غالبًا ما يتم استخدام مخططات حل النزاعات لتجنب مشاكل مثل تكرار المفاتيح الأساسية.
هناك بعض المزايا لاستخدام MMR ، وهي:
- في حالة فشل المضيف ، لا يزال بإمكان المضيفين الآخرين تقديم خدمات التحديث والإدراج.
- تنتشر العقد الأولية في عدة مواقع مختلفة ، لذا فإن فرصة فشل جميع العقد الأولية صغيرة جدًا.
- القدرة على استخدام شبكة واسعة النطاق (WAN) لقواعد البيانات الأولية التي يمكن أن تكون قريبة جغرافياً من مجموعات العملاء ، مع الحفاظ على اتساق البيانات عبر الشبكة.
ومع ذلك ، فإن الجانب السلبي لتطبيق MMR هو التعقيد وصعوبة حل النزاعات.
توفر العديد من الفروع والتطبيقات حلول MMR لأن PostgreSQL لا تدعمها محليًا. قد تكون هذه الحلول مفتوحة المصدر أو مجانية أو مدفوعة. أحد هذه الامتدادات هو النسخ المتماثل ثنائي الاتجاه (BDR) وهو غير متزامن ويعتمد على وظيفة فك التشفير المنطقية PostgreSQL.
نظرًا لأن تطبيق BDR يعيد تشغيل المعاملات على العقد الأخرى ، فقد تفشل عملية إعادة التشغيل إذا كان هناك تعارض بين المعاملة التي يتم تطبيقها والمعاملة التي تم تنفيذها على العقدة المستقبلة.
أنواع النسخ المتماثل PostgreSQL
هناك نوعان من النسخ المتماثل PostgreSQL: النسخ المتماثل المنطقي والمادي.
إن العملية المنطقية البسيطة "initdb" ستنفذ العملية المادية لإنشاء دليل أساسي للعنقود. وبالمثل ، فإن العملية المنطقية البسيطة "إنشاء قاعدة بيانات" ستنفذ العملية المادية لإنشاء دليل فرعي في الدليل الأساسي.
عادة ما يتعامل النسخ الفعلي مع الملفات والأدلة. لا يعرف ما تمثله هذه الملفات والأدلة. تُستخدم هذه الطرق للاحتفاظ بنسخة كاملة من البيانات الكاملة لمجموعة واحدة ، عادةً على جهاز آخر ، ويتم إجراؤها على مستوى نظام الملفات أو مستوى القرص واستخدام عناوين الكتلة الدقيقة.
النسخ المنطقي هو طريقة لإعادة إنتاج كيانات البيانات وتعديلاتها ، بناءً على هوية النسخ المتماثل (عادةً ما يكون مفتاحًا أساسيًا). على عكس النسخ المتماثل المادي ، فإنه يتعامل مع قواعد البيانات والجداول وعمليات DML ويتم إجراؤه على مستوى كتلة قاعدة البيانات. يستخدم نموذج النشر والاشتراك حيث يشترك مشترك واحد أو أكثر في منشور واحد أو أكثر على عقدة الناشر .
تبدأ عملية النسخ المتماثل بأخذ لقطة من البيانات الموجودة في قاعدة بيانات الناشر ثم نسخها إلى المشترك. يسحب المشتركون البيانات من المنشورات التي يشتركون فيها وقد يعيدون نشر البيانات لاحقًا للسماح بالتكرار المتتالي أو التكوينات الأكثر تعقيدًا. يقوم المشترك بتطبيق البيانات بنفس ترتيب الناشر بحيث يتم ضمان تناسق المعاملات للمنشورات ضمن اشتراك واحد يُعرف أيضًا باسم النسخ المتماثل للمعاملات.
حالات الاستخدام النموذجية للنسخ المنطقي هي:
- إرسال تغييرات تدريجية في قاعدة بيانات واحدة (أو مجموعة فرعية من قاعدة بيانات) إلى المشتركين فور حدوثها.
- مشاركة مجموعة فرعية من قاعدة البيانات بين قواعد بيانات متعددة.
- التسبب في إطلاق التغييرات الفردية فور وصولها إلى المشترك.
- دمج قواعد البيانات المتعددة في واحد.
- توفير الوصول إلى البيانات المكررة لمجموعات مختلفة من المستخدمين.
تتصرف قاعدة بيانات المشتركين بنفس الطريقة التي تتصرف بها أي نسخة PostgreSQL أخرى ويمكن استخدامها كناشر لقواعد بيانات أخرى من خلال تحديد منشوراتها.
عندما يتم التعامل مع المشترك على أنه للقراءة فقط من خلال التطبيق ، فلن يكون هناك أي تعارضات من اشتراك واحد. من ناحية أخرى ، إذا كانت هناك عمليات كتابة أخرى تم إجراؤها إما بواسطة تطبيق أو بواسطة مشتركين آخرين في نفس مجموعة الجداول ، فقد تنشأ تعارضات.
تدعم PostgreSQL كلا الآليتين بشكل متزامن. يسمح النسخ المنطقي بالتحكم الدقيق في كل من نسخ البيانات وأمانها.
أوضاع النسخ المتماثل
يوجد نمطان أساسيان لنسخ PostgreSQL: متزامن وغير متزامن. يسمح النسخ المتزامن المتزامن بكتابة البيانات إلى كل من الخادم الأساسي والثانوي في نفس الوقت ، بينما يضمن النسخ المتماثل غير المتزامن كتابة البيانات أولاً إلى المضيف ثم نسخها إلى الخادم الثانوي.
في النسخ المتماثل للوضع المتزامن ، تعتبر المعاملات في قاعدة البيانات الأساسية مكتملة فقط عندما يتم نسخ هذه التغييرات إلى كافة النسخ المتماثلة. يجب أن تكون جميع خوادم النسخ المتماثلة متاحة طوال الوقت حتى تكتمل المعاملات على المستوى الأساسي. يتم استخدام الوضع المتزامن للنسخ المتماثل في بيئات المعاملات المتطورة مع متطلبات تجاوز الفشل الفورية.
في الوضع غير المتزامن ، يمكن إعلان اكتمال المعاملات على الخادم الأساسي عند إجراء التغييرات على الخادم الأساسي فقط. ثم يتم نسخ هذه التغييرات في النسخ المتماثلة لاحقًا في الوقت المناسب. يمكن أن تظل خوادم النسخ المتماثلة غير متزامنة لمدة معينة ، تسمى تأخر النسخ المتماثل. في حالة حدوث عطل ، قد يحدث فقدان للبيانات ، لكن الحمل الزائد الذي يوفره النسخ المتماثل غير المتزامن صغير ، لذا فهو مقبول في معظم الحالات (لا يثقل كاهل المضيف). يستغرق تجاوز الفشل من قاعدة البيانات الأساسية إلى قاعدة البيانات الثانوية وقتًا أطول من النسخ المتماثل المتزامن.
كيفية إعداد النسخ المتماثل PostgreSQL
في هذا القسم ، سنشرح كيفية إعداد عملية النسخ المتماثل PostgreSQL على نظام تشغيل Linux. في هذا المثال ، سنستخدم Ubuntu 18.04 LTS و PostgreSQL 10.
دعونا نحفر!
تثبيت
ستبدأ بتثبيت PostgreSQL على Linux باتباع الخطوات التالية:
- أولاً ، يجب عليك استيراد مفتاح توقيع PostgreSQL عن طريق كتابة الأمر أدناه في الجهاز:
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O- | sudo apt-key add -
- بعد ذلك ، أضف مستودع PostgreSQL عن طريق كتابة الأمر أدناه في المحطة:
echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
- قم بتحديث فهرس المستودع عن طريق كتابة الأمر التالي في الجهاز:
sudo apt-get update
- ثبّت حزمة PostgreSQL باستخدام الأمر apt:
sudo apt-get install -y postgresql-10
- أخيرًا ، قم بتعيين كلمة المرور لمستخدم PostgreSQL باستخدام الأمر التالي:
sudo passwd postgres
يعد تثبيت PostgreSQL إلزاميًا لكل من الخادم الأساسي والخادم الثانوي قبل بدء عملية النسخ المتماثل PostgreSQL.
بمجرد إعداد PostgreSQL لكلا الخادمين ، يمكنك الانتقال إلى إعداد النسخ المتماثل للخادم الأساسي والثانوي.
إعداد النسخ المتماثل في الخادم الأساسي
نفذ هذه الخطوات بمجرد تثبيت PostgreSQL على الخوادم الأساسية والثانوية.
- أولاً ، قم بتسجيل الدخول إلى قاعدة بيانات PostgreSQL باستخدام الأمر التالي:
su - postgres
- قم بإنشاء مستخدم النسخ المتماثل بالأمر التالي:
psql -c "CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'YOUR_PASSWORD';"
- قم بتحرير pg_hba.cnf باستخدام أي تطبيق nano في Ubuntu وإضافة التكوين التالي: أمر تحرير الملف
nano /etc/postgresql/10/main/pg_hba.conf
لتكوين الملف ، استخدم الأمر التالي:
host replication replication MasterIP/24 md5
- قم بفتح وتعديل postgresql.conf ووضع التكوين التالي في الخادم الأساسي:
nano /etc/postgresql/10/main/postgresql.conf
استخدم إعدادات التكوين التالية:
listen_addresses = 'localhost,MasterIP'
wal_level = replica
wal_keep_segments = 64
max_wal_senders = 10
- أخيرًا ، أعد تشغيل PostgreSQL في الخادم الرئيسي الأساسي:
systemctl restart postgresql
لقد أكملت الآن الإعداد في الخادم الأساسي.
إعداد النسخ المتماثل في الخادم الثانوي
اتبع هذه الخطوات لإعداد النسخ المتماثل في الخادم الثانوي:
- قم بتسجيل الدخول إلى PostgreSQL RDMS باستخدام الأمر أدناه:
su - postgres
- أوقف خدمة PostgreSQL عن العمل لتمكيننا من العمل عليها باستخدام الأمر أدناه:
systemctl stop postgresql
- قم بتحرير ملف pg_hba.conf باستخدام هذا الأمر وإضافة التكوين التالي:
أمر التحريرnano /etc/postgresql/10/main/pg_hba.conf
ترتيب
host replication replication MasterIP/24 md5
- افتح وعدل postgresql.conf في الخادم الثانوي وقم بوضع التكوين التالي أو uncomment إذا تم التعليق عليه: تحرير الأمر
ترتيبnano /etc/postgresql/10/main/postgresql.conf
listen_addresses = 'localhost,SecondaryIP'
wal_keep_segments = 64
wal_level = replica
hot_standby = on
max_wal_senders = 10
عنوان IP الثانوي هو عنوان الخادم الثانوي
- قم بالوصول إلى دليل بيانات PostgreSQL في الخادم الثانوي وقم بإزالة كل شيء:
cd /var/lib/postgresql/10/main
rm -rfv *
- انسخ ملفات دليل بيانات الخادم الأساسي PostgreSQL إلى دليل بيانات الخادم الثانوي PostgreSQL واكتب هذا الأمر في الخادم الثانوي:
pg_basebackup -h MasterIP -D /var/lib/postgresql/11/main/ -P -U
replication --wal-method=fetch
- أدخل كلمة مرور خادم PostgreSQL الأساسي واضغط على إدخال. بعد ذلك ، أضف الأمر التالي لتكوين الاسترداد: تحرير الأمر
nano /var/lib/postgresql/10/main/recovery.conf
ترتيب
standby_mode = 'on' primary_conninfo = 'host=MasterIP port=5432 user=replication password=YOUR_PASSWORD' trigger_file = '/tmp/MasterNow'
هنا ، YOUR_PASSWORD هي كلمة المرور لمستخدم النسخ المتماثل في الخادم الأساسي الذي تم إنشاؤه بواسطة PostgreSQL
- بمجرد تعيين كلمة المرور ، سيتعين عليك إعادة تشغيل قاعدة بيانات PostgreSQL الثانوية حيث تم إيقافها:
systemctl start postgresql
اختبار الإعداد الخاص بك
الآن بعد أن قمنا بتنفيذ الخطوات ، دعنا نختبر عملية النسخ المتماثل ونراقب قاعدة بيانات الخادم الثانوي. لهذا ، نقوم بإنشاء جدول في الخادم الأساسي ونلاحظ ما إذا كان نفس الشيء ينعكس على الخادم الثانوي.
دعنا نذهب اليها.
- نظرًا لأننا نقوم بإنشاء الجدول في الخادم الأساسي ، فستحتاج إلى تسجيل الدخول إلى الخادم الأساسي:
su - postgres psql
- نقوم الآن بإنشاء جدول بسيط باسم "testtable" وإدخال البيانات إلى الجدول عن طريق تشغيل استعلامات PostgreSQL التالية في المحطة الطرفية:
CREATE TABLE testtable (websites varchar(100)); INSERT INTO testtable VALUES ('section.com'); INSERT INTO testtable VALUES ('google.com'); INSERT INTO testtable VALUES ('github.com');
- راقب قاعدة بيانات الخادم الثانوي PostgreSQL عن طريق تسجيل الدخول إلى الخادم الثانوي:
su - postgres psql
- الآن ، نتحقق مما إذا كان الجدول "testtable" موجودًا ، ويمكننا إرجاع البيانات عن طريق تشغيل استعلامات PostgreSQL التالية في المحطة. يعرض هذا الأمر الجدول بأكمله بشكل أساسي.
select * from testtable;
هذا هو ناتج جدول الاختبار:
| websites | ------------------- | section.com | | google.com | | github.com | --------------------
يجب أن تكون قادرًا على مراقبة نفس البيانات الموجودة في الخادم الأساسي.
إذا رأيت ما سبق ، فهذا يعني أنك قد نفذت عملية النسخ المتماثل بنجاح!
ما هي خطوات تجاوز الفشل اليدوية PostgreSQL؟
لنستعرض خطوات تجاوز الفشل اليدوي لـ PostgreSQL:
- تعطل الخادم الأساسي.
- قم بترقية الخادم الاحتياطي عن طريق تشغيل الأمر التالي على الخادم الاحتياطي:
./pg_ctl promote -D ../sb_data/ server promoting
- قم بالاتصال بخادم الاستعداد الذي تمت ترقيته وقم بإدخال صف:
-bash-4.2$ ./edb-psql -p 5432 edb Password: psql.bin (10.7) Type "help" for help. edb=# insert into abc values (4,'Four');
إذا كان الإدراج يعمل بشكل جيد ، فإن الاستعداد ، الذي كان سابقًا خادم للقراءة فقط ، قد تمت ترقيته كخادم أساسي جديد.
كيفية أتمتة تجاوز الفشل في PostgreSQL
يعد إعداد تجاوز الفشل التلقائي أمرًا سهلاً.
ستحتاج إلى مدير EDB PostgreSQL تجاوز الفشل (EFM). بعد تنزيل EFM وتثبيته على كل عقدة أساسية وبديلة ، يمكنك إنشاء EFM Cluster ، والتي تتكون من عقدة أساسية ، وعقد استعداد واحد أو أكثر ، وعقدة شاهد اختيارية تؤكد التأكيدات في حالة الفشل.
تراقب EFM باستمرار صحة النظام وترسل تنبيهات بالبريد الإلكتروني بناءً على أحداث النظام. عند حدوث فشل ، فإنه ينتقل تلقائيًا إلى أحدث وضع في وضع الاستعداد ويعيد تكوين جميع الخوادم الاحتياطية الأخرى للتعرف على العقدة الأساسية الجديدة.
كما أنه يعيد تكوين موازنات التحميل (مثل pgPool) ويمنع حدوث "تقسيم الدماغ" (عندما تعتقد كل عقدتين أنهما أساسيان) من الحدوث.
ملخص
نظرًا للكميات الكبيرة من البيانات ، أصبحت قابلية التوسع والأمان من أهم المعايير في إدارة قواعد البيانات ، خاصة في بيئة المعاملات. بينما يمكننا تحسين قابلية التوسع عموديًا عن طريق إضافة المزيد من الموارد / الأجهزة إلى العقد الحالية ، إلا أنه ليس ممكنًا دائمًا ، غالبًا بسبب التكلفة أو القيود المفروضة على إضافة أجهزة جديدة.
ومن ثم ، فإن قابلية التوسع الأفقي مطلوبة ، مما يعني إضافة المزيد من العقد إلى عقد الشبكة الحالية بدلاً من تحسين وظائف العقد الحالية. هذا هو المكان الذي يظهر فيه نسخ PostgreSQL في الصورة.
في هذه المقالة ، ناقشنا أنواع مكررات PostgreSQL والفوائد وأنماط النسخ المتماثل والتثبيت وتجاوز فشل PostgreSQL بين SMR و MMR. الآن دعنا نسمع منك.
أي واحد تقوم بتنفيذه عادة؟ ما هي ميزة قاعدة البيانات الأكثر أهمية بالنسبة لك ولماذا؟ نحب قراءة أفكارك! شاركهم في قسم التعليقات ادناه.