نحوه ایجاد PostgreSQL replication
PostgreSQL یک پایگاه داده پیشرفته و قدرتمند است که از ساختارهای پیچیده داده ها پشتیبانی میکند و ویژگی ها و امکانات گسترده ای را در اختیار کاربران قرار می دهد. PostgreSQL Replication یک ویژگی قدرتمند است که باعث میشود دادهها بین چندین پایگاه داده همواره هماهنگ و سازگار باشند. با این قابلیت، شما میتوانید دادههای یک پایگاه داده اصلی (Primary) را با یک یا چند پایگاه داده دیگر (Replicas) همگامسازی کنید. این فرآیند برای برنامههایی که نیاز به دسترسی بالا، مقیاسپذیری یا اشتراکگذاری دادهها در محیطهای توزیعشده دارند، بسیار مهم و کاربردی است.
این راهنما انواع مختلف replication در PostgreSQL، مزایای آن و کاربردهای واقعیاش را بررسی کرده و سپس مراحل گام به گام برای راهاندازی logical replication را توضیح میدهد.
فهرست مطالب
- PostgreSQL Replication چیست؟
- کاربردهای عملی PostgreSQL Replication
- تنظیم Logical Replication PostgreSQL
- خلاصه
PostgreSQL Replication چیست؟
Replication در PostgreSQL فرآیندی است که در آن دادههای یک پایگاه داده اصلی (Primary) به یک یا چند پایگاه داده دیگر (Replicas) کپی و همگامسازی میشوند. این کار باعث میشود دادهها در چندین پایگاه داده بهروز و یکسان باقی بمانند.
انواع اصلی Replication در PostgreSQL:
- Physical Replication (همگامسازی فیزیکی): در این روش، تمام دادهها در سطح بلوکهای ذخیرهسازی کپی میشوند. این نوع معمولاً برای دسترسی بالا (High Availability) استفاده میشود، مانند روشی به نام “Streaming Replication”.
- Logical Replication (همگامسازی منطقی): در این روش، تغییرات دادهها در سطح منطقی (مثلاً ردیفهای جداول) همگامسازی میشوند. این روش انعطافپذیرتر است و به شما امکان میدهد فقط بخشهای خاصی از دادهها (مثلاً جداول مشخص) را انتخاب و همگامسازی کنید.
به طور کلی، Logical Replication برای کاربردهایی که نیاز به انتخاب بخشهای خاصی از دادهها دارند، مناسبتر است.
مزایای Logical Replication (همگامسازی منطقی):
- انتخاب بخشهای خاص برای همگامسازی: میتوانید فقط جداول یا ردیفهای خاصی از دادهها را همگامسازی کنید. این کار باعث بهبود عملکرد و صرفهجویی در فضای ذخیرهسازی میشود.
- همگامسازی بین نسخههای مختلف PostgreSQL: این روش امکان همگامسازی دادهها بین نسخههای متفاوت PostgreSQL را فراهم میکند.
- قابلیت تغییر دادهها در حین همگامسازی: میتوانید دادهها را در طول فرآیند همگامسازی تغییر دهید یا اصلاح کنید. این ویژگی باعث میشود همگامسازی کاملاً متناسب با نیازهای شما باشد.
- همگامسازی با سیستمهای دیگر: این روش امکان همگامسازی دادهها با پایگاههای داده دیگر یا حتی برنامههای کاربردی متفاوت را فراهم میکند. این ویژگی باعث تسهیل اشتراکگذاری دادهها بین سیستمهای مختلف میشود.
کاربردهای عملی PostgreSQL Replication
1. نرمافزار مدیریت جمعآوری عوارض
نرمافزار مدیریت عوارضی به نام Scott، در Kalna Bridge استفاده میشود که دارای 8 خط عوارض است. هر خط دارای پایگاه داده محلی خود است و هر باجه بهصورت مستقل کار میکند. اطلاعات تراکنشهای عوارض از هر باجه بهطور آنی و از طریق یک سیستم صف پیام به سرور مرکزی ارسال میشود.
هر باجه اطلاعات خاصی را نگهداری میکند که شامل موارد زیر است:
- کاربران: مدیریت کاربران مختلف.
- جزئیات خط: اطلاعات مربوط به هر خط عوارض.
- مدیریت شیفت: پیگیری اینکه کدام اپراتور در چه شیفتی به کدام خط تخصیص داده شده است.
- سیستم تقویم: مدیریت برنامهها و تخصیصهای اپراتورها.
- نقشهبرداری ETC: مشخص کردن اینکه آیا یک باجه یا خط، برای جمعآوری الکترونیکی عوارض (ETC) آماده است یا خیر.
این اطلاعات در بین تمام خطوط به اشتراک گذاشته میشود و مدیر میتواند از سرور مرکزی تغییرات را اعمال کند. چالش اصلی زمانی رخ میدهد که برخی از اطلاعات تغییر میکند و نیاز است که دادهها بین تمام 8 پایگاه داده باجهها و پایگاه داده سرور مرکزی همگامسازی شود. اکنون سوال این است که چرا از یک پایگاه داده مرکزی برای همه باجهها استفاده نکنیم؟
هر باجه باید بهطور مستقل کار کند تا در صورتی که سرور مرکزی خراب شود یا ارتباط بهدلیل بلایای طبیعی یا مشکلات دیگر ناپایدار شود، همچنان بتواند عملکرد خود را حفظ کند. اگر سرور مرکزی یا ارتباط دچار مشکل شود، باجهها غیرقابل استفاده خواهند شد، در حالی که آنها باید به کار خود ادامه دهند تا خودروها بتوانند عبور کنند.
در اینجا، از همگامسازی منطقی PostgreSQL برای کپی کردن جداول مرتبط از پایگاه داده مرکزی به پایگاه داده هر باجه استفاده میشود. با این کار، هر تغییری که در پایگاه داده مرکزی ایجاد شود، بهطور خودکار با جداول مربوطه در تمام پایگاه دادههای باجهها همگامسازی میشود. این روش به باجهها اجازه میدهد بهصورت مستقل عمل کنند و در عین حال اطمینان حاصل شود که دادهها در تمام سیستمها یکسان باقی بمانند.
2. پلتفرمهای تجارت الکترونیک
یک پلتفرم تجارت الکترونیک از همگامسازی منطقی برای همگامسازی دادهها بین پایگاه داده اصلی (که تراکنشهای مشتری را مدیریت میکند) و یک پایگاه داده جداگانه برای گزارشگیری (که برای تجزیه و تحلیل استفاده میشود) بهره میبرد. این کار تضمین میکند که سیستم میتواند گزارشها و بینشهای آنی تولید کند بدون اینکه بر عملکرد وبسایت یا اپلیکیشن تأثیر بگذارد.
چرا از همگامسازی منطقی استفاده میشود؟
- عملکرد بهتر: با انتقال کارهای گزارشگیری به یک نسخه (رپلیکا)، پایگاه داده اصلی برای انجام تراکنشهای مشتری سریعتر عمل میکند.
- بینشهای آنی: تیمهای کسبوکار دادههای بهروز را برای تصمیمگیری دریافت میکنند، مثل تنظیم موجودی یا برگزاری تبلیغات.
- قابلیت مقیاسپذیری: میتوان به راحتی سیستمها یا ابزارهای گزارشگیری بیشتری اضافه کرد بدون اینکه بر پایگاه داده اصلی تأثیر بگذارد.
- دقت دادهها: همگامسازی تضمین میکند که تمام سیستمها دادههای یکسان و دقیقی دارند.
- دسترسپذیری بالا: اگر پایگاه داده اصلی خراب شود، نسخه رپلیکا میتواند دادههای فقط خواندنی را ارائه دهد و زمان خرابی را کاهش دهد.
- همگامسازی دادههای قابل تنظیم: میتوانید فقط دادههای مورد نیاز را همگامسازی کنید تا گزارشگیری کارآمدتر باشد.
تنظیم Logical Replication PostgreSQL
در این راهنما، مراحل تنظیم Logical Replication PostgreSQL بین دو سرور را بررسی میکنیم: یک سرور اصلی (ناشر) و یک سرور نسخه (مشترک). این تنظیم به سرور مشترک اجازه میدهد تا تغییرات دادهها را بهصورت آنی از سرور اصلی دریافت کند.
1. نصب PostgreSQL
ابتدا باید PostgreSQL را بر روی هر دو سرور اصلی و مشترک نصب کنید. برای نصب آن در اوبونتو، میتوانید دستورات زیر را اجرا کنید:
sudo apt update
sudo apt install postgresql postgresql-contrib
این فرآیند را بر روی هر دو سرور اصلی و مشترک، تکرار کنید.
2. تنظیم پایگاه داده اصلی
- ویرایش فایل postgresql.conf: روی سرور اصلی، شما باید Logical Replication PostgreSQL را فعال کنید. فایل postgresql.conf را باز کنید و تنظیمات زیر را بهروزرسانی کنید:
wal_level = logical
max_replication_slots = 10
max_wal_senders = 10
این تنظیمات اطمینان میدهند که PostgreSQL بتواند تغییرات را به سرور مشترک ارسال کند.
- ویرایش فایل pg_hba.conf: سپس، فایل pg_hba.conf را تنظیم کنید تا سرور مشترک بتواند برای همگامسازی به سرور اصلی متصل شود. خط زیر را به این فایل اضافه کنید:
host replication postgres <replica_db_ip>/32 md5
آدرس <replica_ip>
را با آدرس IP واقعی سرور مشترک جایگزین کنید.
- راهاندازی مجدد PostgreSQL: پس از انجام تغییرات، با اجرای دستور زیر، PostgreSQL را بر روی سرور اصلی مجدداً راهاندازی کنید:
sudo systemctl restart postgresql
3. تنظیم پایگاه داده مشترک
- ویرایش فایل postgresql.conf: روی سرور مشترک، شما باید حالت (hot standby mode) را فعال کنید. فایل postgresql.conf را باز کنید و موارد زیر را اضافه کنید:
hot_standby = on
این تنظیم به سرور مشترک اجازه میدهد که در حین دریافت دادههای همگامسازی شده، درخواستهای خواندن را نیز قبول کند.
- ویرایش فایل pg_hba.conf: در فایل pg_hba.conf روی سرور مشترک، باید اجازه دهید که سرور اصلی برای همگامسازی به آن متصل شود:
host replication postgres <primary_ip>/32 md5
sudo systemctl restart postgresql
این تنظیم به سرور مشترک این امکان را میدهد که در زمانی که دادهها را از سرور اصلی دریافت میکند، بتواند به درخواستهای خواندن (مثل مشاهده اطلاعات) پاسخ دهد.
4. تنظیم Logical Replication PostgreSQL با Docker (اختیاری)
اگر از Docker استفاده میکنید، میتوانید پایگاه دادههای اصلی و مشترک را با استفاده از docker-compose تنظیم کنید.
در زیر یک پیکربندی ساده برای فایل docker-compose.yml آورده شده است:
services:
central_primary_db:
image: postgres:16-bullseye
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 12345
POSTGRES_DB: primary_db
ports:
- "5442:5432"
volumes:
- ./central_primary_db_data:/var/lib/postgresql/data
restart: always
command: [
"postgres",
"-c", "wal_level=logical",
"-c", "max_replication_slots=10",
"-c", "max_wal_senders=10"
]
kamalapur_station_db:
image: postgres:16-bullseye
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 12345
POSTGRES_DB: kamalapur_station_db
ports:
- "5443:5432"
volumes:
- ./kamalapur_station_db_data:/var/lib/postgresql/data
restart: always
airport_station_db:
image: postgres:16-bullseye
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 12345
POSTGRES_DB: airport_station_db
ports:
- "5444:5432"
volumes:
- ./airport_station_db_data:/var/lib/postgresql/data
restart: always
5. ایجاد یک Subscription در پایگاه داده اصلی
در پایگاه داده اصلی، شما باید یک Subscription ایجاد کنید تا مشخص کنید کدام جداول باید همگام شوند. به عنوان مثال، اگر میخواهید جدول کاربران (users) را همگام کنید، از این دستور SQL استفاده کنید:
-- Connect to the primary database
\c central_primary_db
-- Create a publication for the `users` table or multiple table vai comma sepa.
CREATE PUBLICATION central_railway_system_pub
FOR TABLE
users,
train_schedules,
tickets,
payments,
seat_reservations
WITH (publish = 'insert, update, delete');
6. ایجاد یک Subscription در پایگاه داده مشترک
در پایگاه داده مشترک، شما باید یک Subscription ایجاد کنید که به پایگاه داده اصلی متصل شود و تغییرات را دریافت کند. برای این کار از این دستور SQL استفاده کنید:
-- Connect to the replica database
\c replica_db
-- Create a subscription to the primary database
CREATE SUBSCRIPTION central_railway_system_sub
CONNECTION 'host=<primary_ip> port=5432 dbname=primary_db user=replicator_user password=<secure_password> sslmode=require'
PUBLICATION central_railway_system_pub
WITH (
copy_data = true, -- Copy existing data to replica db.
create_slot = true,
enabled = true
);
آدرس <primary_ip> را با آدرس IP پایگاه داده اصلی خود جایگزین کنید.
پس از ایجاد Subscription، سرور مشترک بهطور خودکار شروع به دریافت بهروزرسانیهای لحظهای از پایگاه داده اصلی میکند.
خلاصه
replication منطقی PostgreSQL یک ابزار مهم برای برنامههای مدرن مبتنی بر داده است که انعطافپذیری، عملکرد و دسترسی بالا را ارائه میدهد. با replication انتخابی جداول و ردیفها، replication منطقی به چالشهای خاصی در مواردی مانند مدیریت گیتگذرها و تحلیلهای تجارت الکترونیک پاسخ میدهد. این راهنما یک راهنمای عملی برای راهاندازی replication منطقی ارائه داده و اطمینان میدهد که دادهها بهطور قابل اعتماد و سازگار در سیستمها همگامسازی میشوند. در انتها اگر همچنان در ایجاد replication postgresql مشکل دارید می توانید از خدمات پشتیبانی دیتابیس ما بهره مند شوید.
منبع: dev.to