راه‌اندازی Physical Streaming Replication در PostgreSQL 12 روی Ubuntu 20.04

مقدمه

Streaming Replication یکی از محبوب‌ترین روش‌ها برای مقیاس‌پذیری افقی دیتابیس‌های رابطه‌ای است. در این روش، دو یا چند نسخه از یک کلاستر دیتابیس روی ماشین‌های جداگانه اجرا می‌شوند. یکی از این کلاسترها به عنوان Primary شناخته می‌شود و عملیات خواندن و نوشتن را انجام می‌دهد؛ سایر کلاسترها که Replica نام دارند، فقط عملیات خواندن را سرویس‌دهی می‌کنند.

همچنین می‌توانید از Streaming Replication برای افزایش High Availability استفاده کنید. اگر سرور یا کلاستر اصلی به هر دلیلی از دسترس خارج شود، Replicaها می‌توانند همچنان درخواست‌های خواندن را پاسخ دهند یا یکی از Replicaها به Primary جدید تبدیل شود.

PostgreSQL یکی از محبوب‌ترین دیتابیس‌های رابطه‌ای است که از هر دو نوع Replication یعنی Logical و Physical پشتیبانی می‌کند. در Logical Replication تغییرات سطح بالا از Primary به Replica منتقل می‌شوند و حتی می‌توان فقط یک دیتابیس یا جدول خاص را Replicate کرد. اما در Physical Replication، تغییرات فایل WAL یا همان Write-Ahead Logging منتقل می‌شوند و در نتیجه تمام تغییرات کلاستر اصلی روی Replica اعمال خواهد شد.

در این آموزش، نحوه راه‌اندازی Physical Streaming Replication در PostgreSQL 12 روی Ubuntu 20.04 را با استفاده از دو سرور جداگانه یاد می‌گیرید. یکی از سرورها به عنوان Primary و دیگری به عنوان Replica عمل خواهد کرد.


پیش‌نیازها

قبل از شروع این آموزش، موارد زیر باید آماده باشند:

  • دو سرور Ubuntu 20.04 جداگانه
    • یکی به عنوان Primary
    • دیگری به عنوان Replica
  • یک کاربر غیر Root با دسترسی sudo روی هر دو سرور
  • فعال بودن فایروال و باز بودن پورت‌های:
    • HTTP/HTTPS
    • پورت 5432 (پورت پیش‌فرض PostgreSQL)
  • نصب PostgreSQL 12 روی هر دو سرور

مرحله اول — تنظیم Primary برای پذیرش اتصال

به صورت پیش‌فرض PostgreSQL فقط روی localhost یا همان 127.0.0.1 گوش می‌دهد. برای اینکه Replica بتواند به Primary متصل شود، باید تنظیمات listen_addresses را تغییر دهید.

روی سرور Primary فایل تنظیمات PostgreSQL را باز کنید:

sudo nano /etc/postgresql/12/main/postgresql.conf

مقدار listen_addresses را پیدا کرده و آن را از localhost به IP سرور Primary تغییر دهید:

listen_addresses = 'your_primary_IP_address'

همچنین علامت # ابتدای خط را حذف کنید.

فایل را ذخیره کرده و خارج شوید.

اکنون PostgreSQL آماده پذیرش اتصال از سایر ماشین‌ها خواهد بود.


مرحله دوم — ساخت Role مخصوص Replication

در این مرحله باید یک Role مخصوص Replication ایجاد کنید تا Replica با استفاده از آن به Primary متصل شود.

ابتدا وارد محیط PostgreSQL شوید:

sudo -u postgres psql

سپس Role را ایجاد کنید:

CREATE ROLE test WITH REPLICATION PASSWORD 'testpassword' LOGIN;

خروجی:

CREATE ROLE

این دستور یک Role به نام test می‌سازد که مجوز Replication دارد.

اکنون از محیط PostgreSQL خارج شوید:

\q

سپس فایل pg_hba.conf را باز کنید:

sudo nano /etc/postgresql/12/main/pg_hba.conf

این خط را به انتهای فایل اضافه کنید:

host    replication     test    your-replica-IP/32   md5

این تنظیم اجازه می‌دهد Replica با استفاده از Role ساخته‌شده به دیتابیس Replication متصل شود.

در نهایت PostgreSQL را ری‌استارت کنید:

sudo systemctl restart postgresql@12-main

مرحله سوم — گرفتن Backup از Primary روی Replica

در Physical Replication باید یک نسخه کامل از فایل‌های دیتابیس Primary روی Replica کپی شود.

ابتدا محتوای دیتادایرکتوری Replica را حذف کنید:

sudo -u postgres rm -r /var/lib/postgresql/12/main/*

اگر به هر دلیلی خطا دریافت کردید، کل پوشه را حذف و دوباره ایجاد کنید:

sudo -u postgres rm -r /var/lib/postgresql/12/main
sudo -u postgres mkdir /var/lib/postgresql/12/main
sudo -u postgres chmod 700 /var/lib/postgresql/12/main

اکنون با استفاده از pg_basebackup از Primary بکاپ بگیرید:

sudo -u postgres pg_basebackup -h primary-ip-addr -p 5432 -U test -D /var/lib/postgresql/12/main/ -Fp -Xs -R

توضیح پارامترها

  • -h
    آدرس IP سرور Primary
  • -p
    پورت PostgreSQL
  • -U
    نام Role مربوط به Replication
  • -D
    مسیر ذخیره Backup
  • -Fp
    خروجی به صورت Plain Format
  • -Xs
    انتقال WAL همزمان با Backup
  • -R
    قرار دادن Replica در حالت Standby

پس از اجرای دستور، رمز عبور Role را وارد کنید.

بسته به حجم دیتابیس، این فرآیند ممکن است کمی زمان ببرد.


مرحله چهارم — راه‌اندازی Replica و تست Replication

اکنون Replica را ری‌استارت کنید:

sudo systemctl restart postgresql@12-main

اگر همه چیز درست تنظیم شده باشد، Replica به صورت خودکار به Primary متصل می‌شود.

روی سرور Primary وارد PostgreSQL شوید:

sudo -u postgres psql

سپس وضعیت Replication را بررسی کنید:

SELECT client_addr, state FROM pg_stat_replication;

خروجی مشابه زیر خواهد بود:

   client_addr    |  state
------------------+-----------
 your_replica_IP | streaming

اگر وضعیت streaming نمایش داده شود یعنی Replication با موفقیت فعال شده است.


نتیجه‌گیری

اکنون دو سرور Ubuntu 20.04 دارید که روی هرکدام PostgreSQL 12 اجرا شده و بین آن‌ها Physical Streaming Replication برقرار است.

از این پس هر تغییری که روی Primary انجام شود، روی Replica نیز اعمال خواهد شد.

همچنین در صورت نیاز می‌توانید Replicaهای بیشتری به ساختار خود اضافه کنید تا توان پاسخ‌گویی سیستم افزایش پیدا کند.

از همراهی شما با پارمین کلود سپاسگزاریم.
Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *