دیتابیس مدیریت‌شده‌ آروان‌کلاد سرویسی ابری برای ایجاد و مدیریت آسان دیتابیس‌هاست. یکی از کاربردهای مهم این سرویس، استفاده از آن به‌عنوان Replica یا Subscriber برای افزایش پایداری و دسترس‌پذیری داده‌هاست. در این حالت، یک نسخه‌ی فعال و به‌روز از داده‌های دیتابیس اصلی در دیتابیس ابری آروان‌کلاد نگه‌داری می‌شود و هنگام بروز مشکل برای دیتابیس اصلی، امکان استفاده از Replica وجود دارد.

یکی از بهترین حالات استفاده از این قابلیت ایجاد دیتابیس جایگزین در محل جغرافیایی متفاوت و حتا زیرساخت متفاوت از دیتابیس اصلی است تا ریسک بلایای طبیعی یا خطاهای انسانی به حداقل برسد.

در این راهنما با مراحل راه‌اندازی رپلیکای مدیریت‌شده‌ی آروان در هر دو انجین MySQL و PostgreSQL آشنا می‌شوید.

رپلیکیشن MySQL با دیتابیس ابری آروان‌کلاد

در MySQL، قابلیت Replication به شما اجازه می‌دهد داده‌های دیتابیس اصلی (Primary) را روی یک دیتابیس دیگر (Replica) کپی و همگام‌سازی کنید. این روش برای افزایش پایداری و دسترس‌پذیری داده‌ها کاربرد دارد تا هنگام بروز مشکل برای دیتابیس اصلی، بتوان از Replica استفاده کرد.

توجه داشته باشید پیش از اعمال هرگونه تغییر در نود اصلی (Primary)، باید پیامدهای آن را بررسی کنید.

تغییرات در دیتابیس اصلی (Primary)

برای برقراری رپلیکیشن، باید تنظیمات زیر را روی دیتابیس اصلی خود اعمال کنید:

تنظیمات کانفیگ سرور

برای ایجاد رپلیکیشن در MySQL، لازم است برخی متغیرهای اصلی در فایل کانفیگ (my.cnf یا mysqld.cnf) به‌درستی مقداردهی شوند:

  • server-id

    • مقدار این متغیر باید یکتا باشد و با مقدار دیتابیس ساخته‌شده روی آروان متفاوت باشد.

    • در دیتابیس آروان مقدار server_id به‌‌طور تصادفی تنظیم می‌شود. برای مشاهده‌ی آن روی دیتابیس ابری از دستور زیر استفاده کنید:

      mysql> SHOW VARIABLES LIKE 'server_id';
      +---------------+------------+
      | Variable_name | Value      |
      +---------------+------------+
      | server_id     | 1757163088 |
      +---------------+------------+
    • مقدار server_id سرور اصلی خود را باید متفاوت از این مقدار قرار دهید.

    • تغییر این متغیر به‌شکل پویا (dynamic) امکان‌پذیر است، اما برای فعال‌شدن رپلیکیشن باید دیتابیس اصلی ری‌استارت شود.

  • log-bin

    • فعال‌سازی binary logging روی دیتابیس اصلی.

  • gtid_mode

    • باید روی ON تنظیم شود تا از GTID replication استفاده شود.

  • binlog_format

    • باید روی ROW تنظیم شود تا تغییرات سطرها در binlog ثبت شود.

  • binlog_expire_logs_seconds

    • مدت‌زمان نگه‌داری binlogها روی سرور اصلی را مشخص می‌کند.

    • پیشنهاد می‌شود مقداری مثل 86400 (۲۴ ساعت) تعیین شود تا با وجود تأخیر احتمالی، لاگ‌ها هم‌چنان برای ارسال به Replica موجود باشند.

  • binlog_expire_logs_auto_purge

    • مقدار این متغیر را روی ON تنظیم کنید تا binlogهای منقضی‌شده به‌طور خودکار پاک شوند.

نمونه‌ی کانفیگ نهایی:

[mysqld]
binlog_format=ROW
gtid_mode=ON
log_bin
server_id="different_server_id_from_Arvan_DBaaS"
binlog_expire_logs_seconds=86400
binlog_expire_logs_auto_purge=ON

توجه: برای اعمال تغییرات ممکن است نیاز به ری‌استارت سرور اصلی داشته باشید.

ایجاد کاربر مخصوص رپلیکیشن

روی دیتابیس اصلی، یک کاربر با دسترسی REPLICATION ایجاد کنید:

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'SecurePassword123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

توصیه می‌شود این کاربر را به آی‌پی دیتابیس Replica محدود کنید، اما در نظر داشته باشید که در حالت HA یا Failover ممکن است آی‌پی تغییر کند.

بکاپ از دیتابیس اصلی

با استفاده از mysqldump از دیتابیس اصلی بکاپ بگیرید:

mysqldump --single-transaction --master-data=1 --databases db1 db2 > primary-dump.sql

تغییرات در دیتابیس ابری آروان‌کلاد (Replica)

  1. بازیابی بکاپ

    mysql -u base_user -p -h "arvan-dbaas-host" < primary-dump.sql
  2. اتصال Replica به Primary

    CHANGE MASTER TO
      MASTER_HOST = 'Your_Primary_DB_IP',
      MASTER_USER = 'repl_user',
      MASTER_PASSWORD = 'SecurePassword123!',
      MASTER_AUTO_POSITION=1;
  3. شروع رپلیکیشن

    START SLAVE;
  4. بررسی وضعیت

    SHOW SLAVE STATUS\G

    مقادیر زیر باید Yes باشند:

    • Slave_IO_Running

    • Slave_SQL_Running

    هم‌چینین Seconds_Behind_Master: 0 نشان‌دهنده‌ی هم‌گام بودن Replica و دیتابیس اصلی است.

استفاده از Replica آروان‌کلاد به‌عنوان دیتابیس اصلی در مواقع بحرانی

اگر دیتابیس اصلی از دسترس خارج شد، می‌توانید Replica آروان را به Primary تبدیل کنید. برای این کار باید ابتدا فرآیند رپلیکیشن را متوقف کنید:

STOP SLAVE;

سپس اطلاعات مربوط به دیتابیس اصلی را حذف کنید تا از اتصال دوباره‌ی دیتابیس ابری آروان در قالب رپلیکا جلوگیری شود:

RESET SLAVE ALL;

در نهایت با تغییر پارامترهای اتصال اپلیکیشن خود به مقادیر دیتابیس ابری آروان که داخل پنل در اختیار شما قرار داده می‌شود از این دیتابیس به‌عنوان دیتابیس اصلی خود استفاده کنید.

نکات مهم در رپلیکیشن MySQL

  • فایروال: پورت 3306 دیتابیس اصلی باید برای دیتابیس آروان‌کلاد باز باشد.

  • زمان: از هم‌گام بودن زمان سرور اصلی و Replica مطمین شوید.

  • مدیریت لاگ‌ها: سرور اصلی باید binlogها را تا ارسال به Replica نگه‌داری کند.

  • نسخه MySQL: در نسخه‌های جدیدتر از دستورهای STOP REPLICA و START REPLICA به‌جای دستورهای دارای عبارت SLAVE استفاده می‌شود. مستندات MySQL به شما در این مسیر کمک می‌کند.

رپلیکیشن PostgreSQL با دیتابیس ابری آروان‌کلاد (Publisher/Subscriber)

مکانیزم Logical Replication در PostgreSQL این امکان را به شما می‌دهد که اطلاعات را از یک دیتابیس (نود اصلی یا Publisher) به دیتابیس دیگر (نود فرعی یا Subscriber) کپی و همگام‌سازی کنید. این روش برای رپلیکای فقط خواندنی، توسعه و تست، یا بکاپ زنده بسیار کاربردی است.

توجه داشته باشید پیش از اعمال هرگونه تغییر در نود اصلی (Primary)، باید پیامدهای آن را بررسی کنید.

تغییرات در دیتابیس اصلی (Publisher)

  1. فعال‌سازی Logical Replication با دسترسی root فایل postgresql.conf را باز و مقدار زیر را تنظیم کنید:

    wal_level = logical

    سپس دیتابیس را ری‌استارت کنید.

    برای بررسی اعمال صحیح این مقدار، دستور زیر را وارد کنید:

    SHOW wal_level;

    خروجی باید logical باشد.

  2. ایجاد Publication برای مشخص کردن تیبل‌های مورد نظر جهت replication این دستور را اجرا کنید:

    CREATE PUBLICATION test_subscription FOR TABLE public.cars;

تغییرات در دیتابیس آروان‌کلاد (Subscriber)

  1. ایجاد دیتابیس و تیبل‌ها ساختار تیبل‌ها در این دیتابیس باید دقیقن مشابه Publisher باشد. برای نمونه، برای رپلیکیشن جدول زیر، باید یک تیبل با همین ساختار در دیتابیس Subscriber نیز وجود داشته باشد:

    CREATE TABLE public.cars (
      id serial PRIMARY KEY,
      brand text,
      model text,
      year int
    );
  2. ایجاد Subscription

    برای اتصال به دیتابیس اصلی و شروع دریافت داده‌ها از دستورهای زیر استفاده کنید:

    CREATE SUBSCRIPTION test_subscription
    CONNECTION 'host=primary-address port=5432 user=your-primary-user password=your-primary-password dbname=default'
    PUBLICATION test_subscription
    WITH (
      copy_data = true,
      create_slot = true,
      enabled = true
    );

    توجه داشته باشید که یوزری که در این CONNECTION استفاده می‌کنید باید روی Publisher به دیتابیس و تیبل‌های مربوطه دسترسی کامل داشته باشد.

  3. بررسی وضعیت Subscription

    SELECT * FROM pg_stat_subscription;
  4. حذف Subscription (هنگام نیاز)

    DROP SUBSCRIPTION test_subscription;

استفاده از Replica آروان‌کلاد به‌عنوان دیتابیس اصلی در مواقع بحرانی

روی نود Subscriber یا رپلیکای آروان فقط محدود به حالت دریافت داده نیستید و می‌توانید از این نود به‌عنوان یک Master جداگانه هم استفاده کنید.

از طریق Connection String که در پنل کاربری آروان‌کلاد به شما داده می‌شود، می‌توانید مستقیم به نود متصل شوید و درخواست‌های خود (Query) را ارسال کنید. این اتصال مشابه یک دیتابیس مستقل عمل می‌کند و می‌توانید دیتاهای خود را روی آن مدیریت کنید.

بکاپ‌گیری از دیتابیس

برای گرفتن بکاپ کامل دیتابیس از نود رپلیکای آروان‌کلاد می‌توانید از دستور زیر استفاده کنید:

pg_dump -h "arvan-host" -p 5432 -U base-user -d "your-database" -F c -f /home/ubuntu/backup.dump

نکات مهم در رپلیکیشن PostgreSQL

  • Schema تیبل‌ها باید قبل از Subscription روی Replica ساخته شده باشد.

  • پیشنهاد می‌شود Publication را در سطح تیبل یا اسکیمای مشخص تعریف کنید.

  • اگر copy_data = true باشد، داده‌های فعلی نیز منتقل می‌شوند.

  • پورت 5432 سرور اصلی باید برای دیتابیس آروان قابل دسترس باشد.

  • در محیط‌های Docker شبکه‌بندی بین کانتینرها را بررسی کنید.

جمع‌بندی

با استفاده از قابلیت رپلیکیشن، می‌توانید دیتابیس ابری آروان‌کلاد را به‌عنوان Replica برای MySQL یا PostgreSQL اصلی خود راه‌اندازی کنید. این روش:

  • ریسک از دست رفتن داده‌ها را کاهش می‌دهد.

  • دسترس‌پذیری سیستم را افزایش می‌دهد.

  • امکان استفاده از دیتابیس پشتیبان به‌عنوان Primary در مواقع بحرانی را فراهم می‌کند.