تواجه تحدي الحفاظ على قاعدة بيانات PostgreSQL متينة في المشهد المتغير باستمرار للمتطلبات الرقمية؟ إذا كان مصطلح “Patroni” يتناسب مع تطلعاتك التكنولوجية، فأنت على وشك الوصول إلى حل يرفع PostgreSQL إلى قلعة عالية المتوفرية.
بالتأكيد، ينتظرك تحدي، ولكن لا تخف – أنت في رحلة تحويلية لبناء مجموعة PostgreSQL غير قابلة للتزعزع. تصور مستقبلاً حيث تكون انقطاعات قاعدة البيانات مجرد تقطعات صغيرة، ويكون إعداد PostgreSQL الخاص بك هو مثال الاعتمادية.
استعد لتعزيز بيئة PostgreSQL الخاصة بك لتصبح قلعة لا تُزلزل!
المتطلبات الأساسية
قبل أن تقوم بتنفيذ التوفر العالي لـ PostgreSQL، تأكد من توفر ما يلي:
- خمسة (أو أكثر) خوادم Linux – يستخدم هذا البرنامج التعليمي خوادم Debian 12، ولكل منها مستخدم غير جذري مع امتيازات sudo / المسؤول كما يلي:
Hostname | IP Address | Used as |
---|---|---|
postgres01 | 192.168.5.20 | PostgreSQL Server |
postgres02 | 192.168.5.21 | PostgreSQL Server |
postgres03 | 192.168.5.22 | PostgreSQL Server |
etcd | 192.168.5.15 | Cluster Data Store |
haproxy | 192.168.5.16 | Load Balancer |
- A client machine (Linux, Windows, or MacOS) with a PostgreSQL client installed.
تثبيت خادم PostgreSQL و Patroni
مع توفر جميع المتطلبات الأساسية، تخيل هذه اللحظة كوضع الأساس لبيئة قاعدة بيانات قوية وآمنة من الأعطال. الهدف هو إنشاء تنفيذ لـ PostgreSQL عالي المتوفرية عبر PostgreSQL 15. ولكن أولاً، يجب عليك تثبيت الحزم المطلوبة (خادم PostgreSQL و Patroni) على جميع خوادم PostgreSQL الخاصة بك.
باتروني هو تطبيق مبني على لغة البرمجة بايثون لإنشاء نشر PostgreSQL عالي التوفر في مراكز البيانات الخاصة بك، من الأجهزة المعدنية العارية إلى Kubernetes. باتروني متاح على مستودع PostgreSQL الرسمي ويدعم خوادم PostgreSQL 9.5-16.
لتثبيت خادم PostgreSQL وباتروني، قم باتباع الخطوات التالية:
? ملاحظة: قم بإكمال العمليات التالية على خوادم PostgreSQL. في هذه الحالة،
postgres01
،postgres02
، وpostgres03
.
1. افتح الطرفية وقم بتشغيل الأمر curl
أدناه، الذي لا يوفر إخراجًا ولكن يضيف المفتاح GPG لمستودع PostgreSQL إلى /usr/share/keyrings/pgdg.gpg
.
? تستخدم هذه الدورة التعليمية حساب root لتنفيذ الأوامر لضمان التوافق مع العرض التوضيحي. ولكن تذكر أن استخدام حساب غير root مع امتيازات sudo هو أمر مستحسن للغاية. باستخدام حساب غير root، يجب عليك بادئة الأوامر بـ
sudo
لتعزيز الأمان وأفضل الممارسات.
2. بعد ذلك، قم بتنفيذ الأمر التالي، الذي لا يوفر إخراجًا ولكن يضيف مستودع PostgreSQL إلى قائمة مصادر الحزم في ملف /etc/apt/sources.list.d/pgdg.list
.
3. بمجرد إضافتها، قم بتشغيل الأمر التالي apt update
لتحديث فهرس الحزم الخاص بك واسترداد معلومات الحزم الأحدث.

4. بمجرد التحديث، قم بتنفيذ الأمر التالي لتثبيت الحزم التالية:
postgresql-15
– نظام إدارة قواعد البيانات PostgreSQL الإصدار 15.patroni
– حل مفتوح المصدر للتوفر العالي في PostgreSQL، قالب لعناق PostgreSQL HA يستخدم Python و etcd.python3-etcd
– مكتبة عميل Python للتفاعل مع etcd، مخزن مفتاح قيمة موزع. تتيح هذه المكتبة لتطبيقات Python التواصل مع وإدارة مجموعات etcd.python3-psycopg2
– محول PostgreSQL لـ Python 3، يربط تطبيقات Python وقواعد بيانات PostgreSQL.
أدخل Y للمتابعة مع التثبيت عندما يُطلب منك.

5. بعد تثبيت الحزم، قم بتشغيل كل أمر أدناه، الذي لا يحدث أي إخراج في الطرفية ولكنه يؤدي إلى الآتي:
- إيقاف خدمات
postgresql
وpatroni
. في Debian/Ubuntu، تُبدأ خدماتpostgresql
وpatroni
تلقائيًا بعد التثبيت. - أنشئ رابطًا رمزيًا (symlink) لملفات برنامج PostgreSQL الثنائية إلى دليل /usr/sbin. يتأكد ذلك من قدرة برنامج patroni على تنفيذ ملفات برنامج PostgreSQL الثنائية لإنشاء وإدارة PostgreSQL.
6. في النهاية، قم بتنفيذ الأوامر التالية للتحقق من المسار الثنائي لـ patroni و psql، والإصدار المثبت لـ patroni باستخدام خاصية –version.
فيما يلي المسارات لملفات البرنامج الثنائية patroni (/usr/bin/patroni) و psql (/usr/sbin/psql)؛ الإصدار المثبت لـ Patroni هو 3.2.1.

إعداد وتكوين خادم etcd
الآن بعد تثبيت خادم PostgreSQL وبرنامج Patroni، ستحتاج إلى قاعدة تعزز التنسيق بين خوادم PostgreSQL الخاصة بك لتحقيق توفر عالي بدون انقطاع. ستقوم بإعداد وتكوين خادم etcd، وهو مخزن بيانات مفتاح-قيمة.
هذا المخزن بيانات مفتاح-قيمة هو المهندس الصامت في الخلفية، حيث يضمن تخزين البيانات المتعلقة بتكوين مجموعة خوادم PostgreSQL بأمان وإدارتها بكفاءة.
? ملاحظة: تأكد من تثبيت etcd على خادم منفصل. في هذا المثال، يتم تثبيت etcd على خادم etcd.
لتثبيت وتكوين etcd، اتبع الخطوات التالية:
1. على خادم etcd الخاص بك، قم بتنفيذ الأمر التالي لتحديث فهرس المستودع والحصول على أحدث معلومات الحزمة.

2. قم بتشغيل الأمر التالي لتثبيت etcd على الخادم الخاص بك.

3. بمجرد تثبيت etcd ، قم بفتح تكوين الافتراضي في /etc/default/etcd باستخدام محررك المفضل وأدخل التكوين التالي.
يقوم هذا التكوين بإعداد عنقود واحد من etcd ، لذا تأكد من تغيير عنوان IP 192.168.5.15 بعنوان IP الداخلي الخاص بك.
ETCD_LISTEN_PEER_URLS="<http://192.168.5.15:2380>"
ETCD_LISTEN_CLIENT_URLS="<http://localhost:2379>,<http://192.168.5.15:2379>"
ETCD_INITIAL_ADVERTISE_PEER_URLS="<http://192.168.5.15:2380>"
ETCD_INITIAL_CLUSTER="default=http://192.168.5.15:2380,"
ETCD_ADVERTISE_CLIENT_URLS="<http://192.168.5.15:2379>"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
قم بحفظ التغييرات وإغلاق المحرر.

4. الآن ، قم بتشغيل الأمر systemctl أدناه لإعادة تشغيل etcd وتطبيق التعديلات الخاصة بك.
لا يوجد إخراج لهذا الأمر ، ولكن ستتحقق من التغييرات في الخطوة التالية.
5. بمجرد إعادة تشغيل etcd ، قم بالتحقق من تشغيل خدمة etcd وتمكينها.
إذا كانت خدمة etcd قيد التشغيل ، يجب أن ترى إخراجًا “active (running)”. عند التمكين ، سترى إخراجًا “enabled” ، وهو يعني أيضًا أن etcd سيبدأ تلقائيًا عند التمهيد.

6. أخيرًا ، قم بتشغيل الأمر etcdctl التالي للتحقق من قائمة الخوادم المتاحة في عنقود etcd.
في هذه الحالة ، يعمل etcd كعنقود من نقطة واحدة على عنوان IP محلي http://192.168.5.15:2379/.

تهيئة عنقود PostgreSQL عبر Patroni
\begin{Arabic}
بعد أن أصبح خادم etcd في مكانه بشكل قوي الآن، تقف على عتبة المرحلة الحاسمة التالية. من خلال بدء عملية التمهيد باستخدام Patroni، ترفع تكوين PostgreSQL الخاص بك إلى مجموعة قوية ومتسامحة مع الأخطاء.
? تأكد من عمل نسخة احتياطية لقاعدة البيانات الخاصة بك أولاً إذا كنت تقوم بنشر مجموعة PostgreSQL على خادم PostgreSQL قائم.
لبدء تشغيل مجموعة PostgreSQL الخاصة بك عبر Patroni، قم بأداء الخطوات التالية على كل خادم PostgreSQL:
1. افتح تكوين Patroni الافتراضي (/etc/patroni/config.yml) في محرر النص الخاص بك، وأضف التكوين التالي.
تأكد من استبدال قيمة خيار name
بالاسم الرئيسي لخادم PostgreSQL الخاص بك (أي postgres01
)، ولكن لا تقم بإغلاق المحرر بعد الآن.
يقوم هذا التكوين بإعداد مجموعة PostgreSQL الخاصة بك بالاسم postgres
.
2. بعد ذلك، أضف التكوين أدناه لإعداد واجهة برمجة التطبيق (API) الخاصة بـ Patroni لتشغيلها على 192.168.5.20:8008
.
يجب عليك التأكد من أن كل خوادم PostgreSQL ضمن المجموعة يمكنها الاتصال عبر واجهة البرمجة. لذلك، قم بتغيير عنوان الـ IP 192.168.5.20
بعنوان IP الخادم الخاص بك.
\end{Arabic}
3. أضف الضبط أدناه لتمكين التكامل مع etcd
. في هذه الحالة، يعمل خادم etcd
على عنوان IP 192.168.5.15
.
4. الآن، أضف الضبط أدناه لبدء تشغيل خادم PostgreSQL عبر initdb
.
يقوم هذا التكوين بإعداد القواعد والإعدادات الافتراضية للمصادقة العميل (pg_hba.conf
) ومستخدم جديد admin
بكلمة المرور admin
.
تأكد من إدخال عناوين IP لعقد PostgreSQL في قسم pg_hba
وتغيير كلمة مرور admin
الافتراضية في قسم users
.
5. بعد تكوين كيفية بدء PostgreSQL، أدخل التكوين التالي لإعداد كيفية تشغيل PostgreSQL على كل خادم.
بالنسبة لخادم postgres01
، سيعمل PostgreSQL على عنوان IP 192.168.5.20
بدليل البيانات /var/lib/patroni
.
بالإضافة إلى ذلك، يقوم هذا التكوين بإنشاء مستخدم جديد يُدعى replicator
لعمليات التكرار، ومستخدم postgres
كمستخدم فائق/مسؤول بكلمة المرور (secretpassword
).
تأكد من تغيير عنوان IP وكلمة المرور الافتراضية (secretpassword
).
6. أدرج التكوين التالي لإعداد الوسوم الخاصة بخادم بوستجريسكيو الخاص بك الذي يحدد سلوكه على العنقود، احفظ التغييرات، وأغلق الملف.
7. مع الاعدادات المحفوظة، قم بتنفيذ الأوامر أدناه لإعداد دليل بيانات Patroni بشكل جماعي، مضمناً أن يكون مملوكًا ومؤمّنًا بشكل مناسب لاستخدام PostgreSQL.
لا تقدم هذه الأوامر إخراجًا، ولكن هذه الخطوة أمر حاسم في إعداد مجموعة بيانات قاعدة بيانات PostgreSQL بواسطة Patroni لتحقيق التوفر العالي.
8. بعد ذلك، قم بتنفيذ أوامر systemctl
أدناه لبدء والتحقق من خدمة patroni
.
على الخادم postgres01، يعمل خادم PostgreSQL، وتبدأ المجموعة. أيضًا، يتم اختيار الخادم postgres01 كزعيم للمجموعة.

على الخادم postgres02، يبدأ خادم PostgreSQL عبر Patroni وينضم إلى مجموعة PostgreSQL عبر واجهة REST API.
إذا كانت جميع الأمور على ما يرام، سترى الرسالة التالية:

على الخادم postgres03، يكون الإخراج مشابهًا للخادم postgres02.

9. بعد تهيئة مجموعة بيانات PostgreSQL الخاصة بك، قم بتنفيذ الأمر التالي من patronictl
لعرض قائمة من الحالات التي يديرها Patroni.
في الناتج التالي، يمكنك رؤية مجموعة بيانات PostgreSQL الخاصة بك (postgres) تعمل.
لاحظ أن مجموعة البيانات الخاصة بك تعمل بثلاثة أعضاء: postgres01 كعضو زعيم في المجموعة، postgres02، و postgres03 كـ متكرر بوضع/حالة تدفق.

10. في النهاية، قم بتشغيل الأمر التالي لتعطيل بدء تشغيل تلقائي لخدمة postgresql
أثناء تشغيل النظام.
لا يوجد ناتج لهذا الأمر في حال نجاحه ولكنه ضروري لأن Patroni يتحكم في الخادم الجديد لمجموعة بيانات PostgreSQL.
تثبيت وتكوين HAProxy كموزع أحمال
بعد نشر مجموعة بيانات PostgreSQL الخاصة بك، كيف يمكنك جعلها متاحة للعملاء وتمكين التحويل عند حدوث مشكلة؟ الحل هو استخدام HAProxy كموزع أحمال قبل مجموعة بيانات PostgreSQL الخاصة بك.
HAProxy هو مفتاحك الذي يمكن مجموعة بيانات PostgreSQL الخاصة بك من التعامل مع الأعباء المتغيرة، وتوزيع الطلبات بذكاء، والحفاظ على التوافر العالي.
? ملاحظة: قم بتثبيت HAProxy على خادم منفصل. في هذه الحالة، يتم تثبيت خادم HAProxy على خادم haproxy بعنوان IP 192.168.5.16.
لتثبيت وتكوين HAProxy كموزع أحمال لمجموعة بيانات PostgreSQL، قم باتباع هذه الخطوات:
1. افتح ملف /etc/hosts باستخدام محرر النص الذي تفضله، قم بإدخال عناوين IP وأسماء المضيف لخوادم PostgreSQL الخاصة بك، قم بحفظ التغييرات وأغلق الملف.
192.168.5.20 postgres01
192.168.5.21 postgres02
192.168.5.22 postgres03
2. بعد ذلك، قم بتشغيل الأمر التالي لتحديث فهرس الحزم الخاص بك.

3. بمجرد التحديث، قم بتنفيذ الأمر التالي لـ تثبيت
حزمة haproxy
على نظامك.

4. الآن، قم بتشغيل الأمر التالي لعمل نسخة احتياطية من تكوين HARPOXY الافتراضي إلى مسار /etc/haproxy/haproxy.cfg.orig
.
لا يعطي هذا الأمر أي نتائج ولكنه تدبير احترازي قبل إجراء أي تعديلات.
5. بعد ذلك، قم بإنشاء ملف جديد يسمى /etc/haproxy/haproxy.cfg باستخدام المحرر الذي تفضله، وقم بإدخال التكوين التالي. تأكد من استبدال عناوين IP لكل خادم PostgreSQL بعناوينك، قم بحفظ الملف وأغلق المحرر.
يقوم هذا التكوين لـ HAProxy بإعداد HAProxy كموزع حمولة لعنقودة PostgreSQL الخاصة بك بوجود اثنين من الوكلاء، على النحو التالي:
stats
– يعمل هذا الكتلة على المنفذ8080
ويقوم بمراقبة أداء خادم HAProxy والخوادم الخلفية.postgres
– يعتبر هذا الكتلة تكوين موزع الحمولة لعنقودة PostgreSQL.
# إعدادات التكوين العالمية
global
# الحد الأقصى للاتصالات على المستوى العالمي
maxconn 100
# إعدادات التسجيل
log 127.0.0.1 local2
# الإعدادات الافتراضية
defaults
# تكوين سجل عالمي
log global
# تعيين الوضع إلى TCP
mode tcp
# عدد محاولات إعادة الاتصال
retries 2
# مهلة العميل
timeout client 30m
# مهلة الاتصال
timeout connect 4s
# مهلة الخادم
timeout server 30m
# مهلة التحقق
timeout check 5s
# تكوين الإحصاءات
listen stats
# تعيين الوضع إلى HTTP
mode http
# ربط بالمنفذ 8080
bind *:8080
# تمكين الإحصاءات
stats enable
# معرف الإحصاءات
stats uri /
# تكوين PostgreSQL
listen postgres
# ربط بالمنفذ 5432
bind *:5432
# تمكين التحقق HTTP
option httpchk
# توقع حالة 200
http-check expect status 200
# إعدادات الخادم
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
# تعريف خوادم PostgreSQL
server postgres01 192.168.5.20:5432 maxconn 100 check port 8008
server postgres02 192.168.5.21:5432 maxconn 100 check port 8008
server postgres03 192.168.5.22:5432 maxconn 100 check port 8008
6. بعد تكوين HAProxy، قم بتشغيل الأوامر التالية باستخدام الأمر systemctl
لإعادة تشغيل والتحقق (status
) من خدمة haproxy
.

7. في النهاية، قم بفتح متصفح الويب المفضل لديك وقم بزيارة عنوان IP لـ HAProxy مع المنفذ 8080 (على سبيل المثال: http://192.168.5.16:8080/). في الناتج أدناه، يمكنك رؤية ما يلي:
في الناتج أدناه، يمكنك رؤية ما يلي:
-
البروكسي stats لمراقبة حالة HAProxy.
-
البروكسي postgres هو توازن الحمل لعنقود PostgreSQL. لاحظ أن الخوادم postgres02 و postgres03 معلمة على أنها غير متاحة لأن كلاهما يعمل في وضع streaming.

اختبار فشل تجمع PostgreSQL
بعد إعداد HAProxy كموزع أحمال موثوق به، حان الوقت الآن لاختبار تجمع PostgreSQL الخاص بك. هذه الخطوة الحاسمة ستكشف عن مدى صلابة إعداد الخدمة الفعّالة الخاصة بك. يجب عليك التأكد من أن تجمع PostgreSQL الخاص بك يظل قويًا ومستجيبًا حتى في وجه الفشل المحتمل.
لاختبار فشل تجمع PostgreSQL الخاص بك، ستقوم بالاتصال بالتجمع من جهاز العميل الخاص بك والتحقق من عمليات الفشل التالية بالخطوات التالية:
1. قم بتسجيل الدخول إلى جهاز العميل الخاص بك، افتح نافذة الطرفية، وقم بتشغيل الأمر psql
أدناه للاتصال بخادم PostgreSQL عبر موزع الأحمال HAProxy.
أدخل كلمة مرور PostgreSQL الخاصة بك عند الطلب. يمكنك العثور على معلومات كلمة المرور اللازمة في الملف /etc/patroni/config.yml.

2. بمجرد الاتصال، قم بتشغيل الاستعلام التالي لمعرفة إلى أي خادم PostgreSQL أنت متصل، ثم استخدم
جلسة PostgreSQL الحالية.
إذا كان تثبيت PostgreSQL الخاص بك ناجحًا، ستتصل بخادم postgres01.

3. الآن، انتقل إلى خادم postgres01، وقم بتشغيل الأوامر التالية لإيقاف خدمة patroni
وعرض
حالة تجمعات PostgreSQL.
تسمح لك هذه الخطوة باختبار فشل PostgreSQL.
يمكنك رؤية حالة الخادم postgres01 قد تغيرت إلى توقف، وتم تكليف قائد العنقود الجديد لخادم postgres03.

4. قم بالعودة إلى إحصاءات رصد HAProxy، وسترى أن خادم postgres01 غير متصل، بينما postgres03 الآن يعمل بحالة P.

بدلاً من ذلك، قم بتشغيل الأمر patronictl
التالي للتحقق من حالة مجموعة بيانات PostgreSQL.
كما يمكنك رؤية أدناه، أن خادم postgres01 لم يعد جزءًا من المجموعة.

5. انتقل إلى جهاز العميل وقم بتشغيل الأمر psql
التالي للاتصال بخادم PostgreSQL عبر HAProxy.

6. بمجرد الاتصال، قم بتشغيل الاستعلام التالي للتحقق من الخادم الحالي لـ PostgreSQL الذي تم الاتصال به.
إذا كانت عملية التبديل الآلي ناجحة، ستتم الاتصال بأحد الخوادم العاملة، وفي هذه الحالة هو postgres03.

الاستنتاج
عندما توجهت في هذه الرحلة، غمرت نفسك في تعقيدات ضمان توفر عالٍ لقاعدة بيانات PostgreSQL الخاصة بك، واستخدمت التوافق القوي بين Patroni و HAProxy. بالتنقل بسهولة خلال مراحل إعداد PostgreSQL و Patroni، تعاملت ببراعة مع تفاصيل تكوين خادم etcd.
ظهرت مهاراتك في التنظيم عندما قمت ببناء مجموعة بيانات PostgreSQL قوية مع Patroni وضبط الفن في توازن الأحمال باستخدام HAProxy. وكانت ذروة هذه المغامرة الهامة اختبار قدرات تبديل الخدمة التلقائي في مجموعة بيانات PostgreSQL الخاصة بك.
Considere ampliar su experiencia mientras reflexiona sobre sus logros en el establecimiento de un entorno PostgreSQL robusto y tolerante a fallos. ¿Por qué no explorar la implementación de Patroni con Kubernetes para un entorno más dinámico? ¿O adentrarse en las complejidades de configurar la Alta Disponibilidad de PostgreSQL en múltiples centros de datos?