دسترسپذیری بالا تضمین میکنه که سیستم پایگاه داده حتی در زمان خرابیها، عملیاتی باقی میمونه و زمان پایین بودن و از دست دادن دادهها رو کاهش میده.
PostgreSQL High Availability
کلمات کلیدی برای PostgreSQL HA
مفهوم Replication: یعنی یک نسخه اضافه از دادهها رو روی یک نود دیگه نگهداریم. به دو روش اصلی میتونیم این کار رو انجام بدیم: تکثیر همزمان Synchronous Replication: اطمینان میده که دادهها قبل از تایید تراکنش (commit) توی سرور اصلی و سرورهای ثانویه نوشته شده. این روش اطمینان خوبی ارائه میده اما ممکنه باعث ایجاد تاخیر (lag) شود. تکثیر غیرهمزمان Asynchronous Replication: دادهها رو ابتدا توی سرور اصلی مینویسه و بعدش به صورت غیرهمزمان به سرورهای ثانویه منتقل میکنه. این روش سریعتره اما در صورت به مشکلخوردن، احتمال از دست دادن دادهها وجود داره.
مفهوم Quorum Commit: حدنصابی که برای تایید نوشته شدن در نودهای ثانویه نیازه تا بگیم موفقیتآمیز بوده. این روش بین سرعت و اطمینان تعادل ایجاد میکنه. مثلا اگر سه سرور داریم، حدنصاب مناسب میتونه ۲ باشه، یعنی اگر ۲ سرور تایید بدن که نوشتن انجام شده، نوشتن رو موفق در نظر میگیریم.
مفهوم Failover: به فرایندی میگیم که، موقع به مشکل خوردن سرور اصلی، یک سرور آماده جایگزین سرور اصلی بشه که سیستم به مشکل نخوره. این فرایند میتواند: انتقال دستی Manual Failover: نیاز به مداخله انسانی داره. انتقال خودکار Automatic Failover: به طور اتومات توسط ابزارهایی مانند repmgr، Patroni یا pg_auto_failover مدیریت میشه.
مفهوم (Load Balancing): درخواستهای خوندن را بین سرورهای آماده توزیع میکند تا عملکرد بهبود پیدا کنه و بار سرور اصلی کاهش بیابه.
مفهوم Connection Pooling: ابزارهایی مانند PgBouncer یا Pgpool-II که کانکشنهای پایگاه داده رو مدیریت میکنن که، به طوری که یکسری کانکشن باز و آماده رو مدیریت میکنن تا حجم زیاد درخواستها رو بتونن از طریق اونها مدیریت کنن و مساله کمبود کانکشن رو تا حدی مدیریت کنن.
مفهوم Single Point of Failure: در واقع وقتی سیستم وابسته به یک سرویس در یک نقطه باشه، در صورتی که اون نود یا سرویس با مشکل روبرو بشه و جایگزینی براش نباشه، اون رو یک نقطه شکست میگیم که کل سیستم رو میتونه دچار مشکل کنه.
پیادهسازی PostgreSQL HA روی سه نود
نمای کلی تنظیمات
سرور اصلی: سرور اصلی که تمام عملیات نوشتن را مدیریت میکند.
سرورهای رپلیکا: دو نسخه فقط خواندنی از سرور اصلی.
ابزار Docker: برای کانتینری کردن PostgreSQL و اطمینان از قابلیت حمل.
ابزار Repmgr: ابزاری محبوب برای مدیریت تکثیر و انتقال وظایف در PostgreSQL.
نحوه عملکرد
نود اصلی: نوشتنها رو قبول میکنه و دادهها را به نودهای آماده (replica - secondary) منتقل میکنه.
نودهای ثانویه: عملیات خوندن میتونه از روی اینا انجام بشه.
اگر نود اصلی خراب بشه،repmgr به طور خودکار یکی از نودهای آماده رو به عنوان نود اصلی ارتقا میده.
پیکربندی Docker Compose
این داکر کامپوز رو روی سه سرور بالا میاریم، توجه داشته باشیم که متغیرهای env هر سرور متفاوت هستن و باید فایل .env در کنار فایل داکر کامپوز هر یک از این سه سرور موجود باشه: