توافر عالي PostgreSQL مع Patroni و HAProxy

تواجه تحدي الحفاظ على قاعدة بيانات 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

تثبيت خادم 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 لتعزيز الأمان وأفضل الممارسات.

curl -fsSL <https://www.postgresql.org/media/keys/ACCC4CF8.asc> | sudo gpg --dearmor -o /usr/share/keyrings/pgdg.gpg

2. بعد ذلك، قم بتنفيذ الأمر التالي، الذي لا يوفر إخراجًا ولكن يضيف مستودع PostgreSQL إلى قائمة مصادر الحزم في ملف /etc/apt/sources.list.d/pgdg.list.

sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/pgdg.gpg] <https://apt.postgresql.org/pub/repos/apt> $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

3. بمجرد إضافتها، قم بتشغيل الأمر التالي apt update لتحديث فهرس الحزم الخاص بك واسترداد معلومات الحزم الأحدث.

apt update
Adding PostgreSQL repository and updating package index

4. بمجرد التحديث، قم بتنفيذ الأمر التالي لتثبيت الحزم التالية:

  • postgresql-15 – نظام إدارة قواعد البيانات PostgreSQL الإصدار 15.
  • patroni – حل مفتوح المصدر للتوفر العالي في PostgreSQL، قالب لعناق PostgreSQL HA يستخدم Python و etcd.
  • python3-etcd – مكتبة عميل Python للتفاعل مع etcd، مخزن مفتاح قيمة موزع. تتيح هذه المكتبة لتطبيقات Python التواصل مع وإدارة مجموعات etcd.
  • python3-psycopg2 – محول PostgreSQL لـ Python 3، يربط تطبيقات Python وقواعد بيانات PostgreSQL.
apt install postgresql-15 postgresql-server-dev-15 patroni python3-etcd python3-psycopg2

أدخل Y للمتابعة مع التثبيت عندما يُطلب منك.

Installing packages including PostgreSQL 15 and Patroni

5. بعد تثبيت الحزم، قم بتشغيل كل أمر أدناه، الذي لا يحدث أي إخراج في الطرفية ولكنه يؤدي إلى الآتي:

  • إيقاف خدمات postgresql و patroni. في Debian/Ubuntu، تُبدأ خدمات postgresql و patroni تلقائيًا بعد التثبيت.
  • أنشئ رابطًا رمزيًا (symlink) لملفات برنامج PostgreSQL الثنائية إلى دليل /usr/sbin. يتأكد ذلك من قدرة برنامج patroni على تنفيذ ملفات برنامج PostgreSQL الثنائية لإنشاء وإدارة PostgreSQL.
systemctl stop postgresql patroni
ln -s /usr/lib/postgresql/15/bin/* /usr/sbin/

6. في النهاية، قم بتنفيذ الأوامر التالية للتحقق من المسار الثنائي لـ patroni و psql، والإصدار المثبت لـ patroni باستخدام خاصية –version.

which patroni
which psql
patroni --version

فيما يلي المسارات لملفات البرنامج الثنائية patroni (/usr/bin/patroni) و psql (/usr/sbin/psql)؛ الإصدار المثبت لـ Patroni هو 3.2.1.

Verifying binary paths for Patroni and psql

إعداد وتكوين خادم etcd

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

هذا المخزن بيانات مفتاح-قيمة هو المهندس الصامت في الخلفية، حيث يضمن تخزين البيانات المتعلقة بتكوين مجموعة خوادم PostgreSQL بأمان وإدارتها بكفاءة.

? ملاحظة: تأكد من تثبيت etcd على خادم منفصل. في هذا المثال، يتم تثبيت etcd على خادم etcd.

لتثبيت وتكوين etcd، اتبع الخطوات التالية:

1. على خادم etcd الخاص بك، قم بتنفيذ الأمر التالي لتحديث فهرس المستودع والحصول على أحدث معلومات الحزمة.

apt update
Updating the Debian repository on the etcd server

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

apt install etcd-server
Installing 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" 

قم بحفظ التغييرات وإغلاق المحرر.

Configuring an etcd single cluster mode

4. الآن ، قم بتشغيل الأمر systemctl أدناه لإعادة تشغيل etcd وتطبيق التعديلات الخاصة بك.

لا يوجد إخراج لهذا الأمر ، ولكن ستتحقق من التغييرات في الخطوة التالية.

systemctl restart etcd

5. بمجرد إعادة تشغيل etcd ، قم بالتحقق من تشغيل خدمة etcd وتمكينها.

systemctl is-enabled etcd
systemctl status etcd

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

Checking the etcd service status

6. أخيرًا ، قم بتشغيل الأمر etcdctl التالي للتحقق من قائمة الخوادم المتاحة في عنقود etcd.

etcdctl member list

في هذه الحالة ، يعمل etcd كعنقود من نقطة واحدة على عنوان IP محلي http://192.168.5.15:2379/.

Checking cluster members on etcd

تهيئة عنقود PostgreSQL عبر Patroni

\begin{Arabic}
بعد أن أصبح خادم etcd في مكانه بشكل قوي الآن، تقف على عتبة المرحلة الحاسمة التالية. من خلال بدء عملية التمهيد باستخدام Patroni، ترفع تكوين PostgreSQL الخاص بك إلى مجموعة قوية ومتسامحة مع الأخطاء.

? تأكد من عمل نسخة احتياطية لقاعدة البيانات الخاصة بك أولاً إذا كنت تقوم بنشر مجموعة PostgreSQL على خادم PostgreSQL قائم.

لبدء تشغيل مجموعة PostgreSQL الخاصة بك عبر Patroni، قم بأداء الخطوات التالية على كل خادم PostgreSQL:

1. افتح تكوين Patroni الافتراضي (/etc/patroni/config.yml) في محرر النص الخاص بك، وأضف التكوين التالي.

تأكد من استبدال قيمة خيار name بالاسم الرئيسي لخادم PostgreSQL الخاص بك (أي postgres01)، ولكن لا تقم بإغلاق المحرر بعد الآن.

يقوم هذا التكوين بإعداد مجموعة PostgreSQL الخاصة بك بالاسم postgres.

# نطاق PostgreSQL
scope: postgres
# مساحة الأسماء لقاعدة بيانات PostgreSQL
namespace: /db/
# اسم مثيل PostgreSQL
name: postgres01

2. بعد ذلك، أضف التكوين أدناه لإعداد واجهة برمجة التطبيق (API) الخاصة بـ Patroni لتشغيلها على 192.168.5.20:8008.

يجب عليك التأكد من أن كل خوادم PostgreSQL ضمن المجموعة يمكنها الاتصال عبر واجهة البرمجة. لذلك، قم بتغيير عنوان الـ IP 192.168.5.20 بعنوان IP الخادم الخاص بك.
\end{Arabic}

# تكوين واجهة برمجة تطبيقات Patroni REST
restapi:
    # عنوان IP والمنفذ الذي يجب أن تستمع عليه واجهة برمجة التطبيقات الراحة
    listen: 192.168.5.20:8008

    # عنوان IP والمنفذ الذي يجب على العملاء الاتصال به
    connect_address: 192.168.5.20:8008

3. أضف الضبط أدناه لتمكين التكامل مع etcd. في هذه الحالة، يعمل خادم etcd على عنوان IP 192.168.5.15.

# تكوين Patroni Etcd
etcd3:
    # عنوان الاستضافة والمنفذ لخادم Etcd
    host: 192.168.5.15:2379

4. الآن، أضف الضبط أدناه لبدء تشغيل خادم PostgreSQL عبر initdb.

يقوم هذا التكوين بإعداد القواعد والإعدادات الافتراضية للمصادقة العميل (pg_hba.conf) ومستخدم جديد admin بكلمة المرور admin.

تأكد من إدخال عناوين IP لعقد PostgreSQL في قسم pg_hba وتغيير كلمة مرور admin الافتراضية في قسم users.

# تكوين بدء التشغيل لـ Patroni
bootstrap:
    # معلمات التكوين لمتجر التكوين الموزع (DCS)
    dcs:
        ttl: 30
        loop_wait: 10
        retry_timeout: 10
        maximum_lag_on_failover: 1048576
        postgresql:
            # استخدم pg_rewind أثناء بدء التشغيل
            use_pg_rewind: true

    # تكوين initdb
    initdb:
        - auth: scram-sha-256
        - encoding: UTF8
        - data-checksums

    # إدخال إعدادات pg_hba.conf للتكرار والوصول العام
    pg_hba:
        - host replication replicator 127.0.0.1/32 scram-sha-256
        - host replication replicator 192.168.5.20/0 scram-sha-256
        - host replication replicator 192.168.5.21/0 scram-sha-256
        - host replication replicator 192.168.5.22/0 scram-sha-256
        - host all all 0.0.0.0/0 scram-sha-256

		# إضافة مستخدم إدارة افتراضي يُدعى admin بكلمة مرور admin
		users:
        admin:
            password: admin
            options:
                - createrole
                - createdb

5. بعد تكوين كيفية بدء PostgreSQL، أدخل التكوين التالي لإعداد كيفية تشغيل PostgreSQL على كل خادم.

بالنسبة لخادم postgres01، سيعمل PostgreSQL على عنوان IP 192.168.5.20 بدليل البيانات /var/lib/patroni.

بالإضافة إلى ذلك، يقوم هذا التكوين بإنشاء مستخدم جديد يُدعى replicator لعمليات التكرار، ومستخدم postgres كمستخدم فائق/مسؤول بكلمة المرور (secretpassword).

تأكد من تغيير عنوان IP وكلمة المرور الافتراضية (secretpassword).

# تكوين باتروني لبوستجريسكيو
postgresql:
    # عنوان ومنفذ استماع خادم بوستجريسكيو
    listen: 192.168.5.20:5432
    # عنوان الاتصال لعملاء بوستجريسكيو
    connect_address: 192.168.5.20:5432
    # دليل البيانات لبوستجريسكيو
    data_dir: /var/lib/patroni
    # مسار ملف pgpass
    pgpass: /tmp/pgpass

    # تكوين المصادقة
    authentication:
        # تكرار اعتمادات المستخدم
        replication:
            username: replicator
            password: rep-pass
        # اعتمادات المستخدم الجذر
        superuser:
            username: postgres
            password: secretpassword

    # معلمات بوستجريسكيو الإضافية
    parameters:
        # دليل لمقبس يونكس
        unix_socket_directories: '.'
        # طريقة تشفير كلمة المرور
        password_encryption: 'scram-sha-256'

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

# تكوين الوسوم باتروني
tags:
    # يمنع ترقية العقدة في حالة الفشل
    nofailover: false
    # يمنع موزع الحمل من النظر في هذه العقدة
    noloadbalance: false
    # يمنع إنشاء نسخة من الاستنساخ
    clonefrom: false
    # يمنع فرض التكرار المتزامن
    nosync: false

7. مع الاعدادات المحفوظة، قم بتنفيذ الأوامر أدناه لإعداد دليل بيانات Patroni بشكل جماعي، مضمناً أن يكون مملوكًا ومؤمّنًا بشكل مناسب لاستخدام PostgreSQL.

لا تقدم هذه الأوامر إخراجًا، ولكن هذه الخطوة أمر حاسم في إعداد مجموعة بيانات قاعدة بيانات PostgreSQL بواسطة Patroni لتحقيق التوفر العالي.

# أنشئ دليلًا لبيانات Patroni
mkdir -p /var/lib/patroni

# قم بتعيين ملكية دليل بيانات Patroni لمستخدم PostgreSQL
chown -R postgres:postgres /var/lib/patroni

# قم بتعيين الأذونات على دليل بيانات Patroni للحماية
chmod 700 /var/lib/patroni

8. بعد ذلك، قم بتنفيذ أوامر systemctl أدناه لبدء والتحقق من خدمة patroni.

systemctl start patroni
systemctl status patroni

على الخادم postgres01، يعمل خادم PostgreSQL، وتبدأ المجموعة. أيضًا، يتم اختيار الخادم postgres01 كزعيم للمجموعة.

Checking the Patroni service and verifying PostgreSQL cluster initialization

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

إذا كانت جميع الأمور على ما يرام، سترى الرسالة التالية:

Checking the Patroni service on the postgres02 server

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

Checking the Patroni service on the postgres03 server

9. بعد تهيئة مجموعة بيانات PostgreSQL الخاصة بك، قم بتنفيذ الأمر التالي من patronictl لعرض قائمة من الحالات التي يديرها Patroni.

patronictl -c /etc/patroni/config.yml list

في الناتج التالي، يمكنك رؤية مجموعة بيانات PostgreSQL الخاصة بك (postgres) تعمل.

لاحظ أن مجموعة البيانات الخاصة بك تعمل بثلاثة أعضاء: postgres01 كعضو زعيم في المجموعة، postgres02، و postgres03 كـ متكرر بوضع/حالة تدفق.

Checking the list of servers in the PostgreSQL Cluster

10. في النهاية، قم بتشغيل الأمر التالي لتعطيل بدء تشغيل تلقائي لخدمة postgresql أثناء تشغيل النظام.

لا يوجد ناتج لهذا الأمر في حال نجاحه ولكنه ضروري لأن Patroni يتحكم في الخادم الجديد لمجموعة بيانات PostgreSQL.

sudo systemctl disable --now 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. بعد ذلك، قم بتشغيل الأمر التالي لتحديث فهرس الحزم الخاص بك.

apt update
Updating the repository on the HAProxy server

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

apt install haproxy
Installing HAProxy via APT

4. الآن، قم بتشغيل الأمر التالي لعمل نسخة احتياطية من تكوين HARPOXY الافتراضي إلى مسار /etc/haproxy/haproxy.cfg.orig.

لا يعطي هذا الأمر أي نتائج ولكنه تدبير احترازي قبل إجراء أي تعديلات.

mv /etc/haproxy/haproxy.cfg /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.

systemctl restart haproxy
systemctl status haproxy
Checking the HAProxy service status

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

في الناتج أدناه، يمكنك رؤية ما يلي:

  • البروكسي stats لمراقبة حالة HAProxy.

  • البروكسي postgres هو توازن الحمل لعنقود PostgreSQL. لاحظ أن الخوادم postgres02 و postgres03 معلمة على أنها غير متاحة لأن كلاهما يعمل في وضع streaming.

Checking HAProxy performance and information

اختبار فشل تجمع PostgreSQL

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

لاختبار فشل تجمع PostgreSQL الخاص بك، ستقوم بالاتصال بالتجمع من جهاز العميل الخاص بك والتحقق من عمليات الفشل التالية بالخطوات التالية:

1. قم بتسجيل الدخول إلى جهاز العميل الخاص بك، افتح نافذة الطرفية، وقم بتشغيل الأمر psql أدناه للاتصال بخادم PostgreSQL عبر موزع الأحمال HAProxy.

psql -h 192.168.5.16 -p 5432 -U postgres

أدخل كلمة مرور PostgreSQL الخاصة بك عند الطلب. يمكنك العثور على معلومات كلمة المرور اللازمة في الملف /etc/patroni/config.yml.

Connecting to PostgreSQL cluster via HAProxy load balancer

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

SELECT inet_server_addr() AS hostname;
quit

إذا كان تثبيت PostgreSQL الخاص بك ناجحًا، ستتصل بخادم postgres01.

Checking the IP address of the PostgreSQL server

3. الآن، انتقل إلى خادم postgres01، وقم بتشغيل الأوامر التالية لإيقاف خدمة patroni وعرض حالة تجمعات PostgreSQL.

تسمح لك هذه الخطوة باختبار فشل PostgreSQL.

systemctl stop patroni
patronictl -c /etc/patroni/config.yml list

يمكنك رؤية حالة الخادم postgres01 قد تغيرت إلى توقف، وتم تكليف قائد العنقود الجديد لخادم postgres03.

Stopping the Patroni service to test the failover

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

Verifying the failover works in the HAProxy monitoring stats report

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

patronictl -c /etc/patroni/config.yml list

كما يمكنك رؤية أدناه، أن خادم postgres01 لم يعد جزءًا من المجموعة.

Checking the PostgreSQL Cluster members via patronictl

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

psql -h 192.168.5.16 -p 5432 -U postgres
Connecting to the PostgreSQL server via HAProxy

6. بمجرد الاتصال، قم بتشغيل الاستعلام التالي للتحقق من الخادم الحالي لـ PostgreSQL الذي تم الاتصال به.

SELECT inet_server_addr() AS hostname;
quit

إذا كانت عملية التبديل الآلي ناجحة، ستتم الاتصال بأحد الخوادم العاملة، وفي هذه الحالة هو postgres03.

Checking the PostgreSQL server IP address

الاستنتاج

عندما توجهت في هذه الرحلة، غمرت نفسك في تعقيدات ضمان توفر عالٍ لقاعدة بيانات 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?

Source:
https://adamtheautomator.com/patroni/