مصمم ليبقى بلا انقطاع.
كل مكون يعمل بحرارة. تتم مزامنة عُقد قواعد البيانات النشطة والاحتياطية باستمرار. يطفو IP افتراضي فوق العنقود — يراقب keepalived العقدة الأساسية، وفي اللحظة التي تتوقف فيها عن الاستجابة، تنتقل حركة المرور إلى العقدة الاحتياطية قبل أن يلاحظ المشاهد العادي أي توقف. هذا ليس درس Postgres مثبت على SaaS — إنها بنية تحتية من الدرجة الأولى لا يحتاج المشغل أبدًا للتفكير فيها.
ثلاث عُقد، حقيقة واحدة.
زوج DB نشط/احتياطي يتم نسخه على شبكة خاصة. زوج من موازني الحمل nginx يشاركان في VRRP لـ IP افتراضي يطفو بينهما. يقرأ عنقود التطبيق من خلال تجمع اتصالات يفرغ ويعيد المحاولة عند انتقال العقدة الأساسية. كل ارتباط ذو مسار مزدوج.
ماذا يحدث، ثانية بثانية.
عندما تفشل عقدة أساسية، يحدث الاسترداد في 4 خطوات مرتبة. إجراء المشغل: صفر. اضطراب جانب العميل: أقصر من إعادة إرسال TCP.
نبضة القلب فُقدت
يتوقف keepalived العقدة الاحتياطية عن استقبال إعلانات VRRP من العقدة الأساسية. بعد 3 منارات مفقودة (~1.5 ثانية)، تروج العقدة الاحتياطية لنفسها.
الترقية + STONITH
تعزل العقدة الأساسية الجديدة العقدة القديمة — إيقاف التشغيل عبر API السحابة — وتقبل الكتابات. ينعكس اتجاه النسخ؛ ستنضم العقدة المستردة كاحتياطية.
ينتقل IP الافتراضي
ينتقل IP الافتراضي VRRP إلى NIC العقدة الأساسية الجديدة. يتم إفراغ تجمع اتصالات طبقة التطبيق؛ يتم إعادة محاولة الاستعلامات الجارية ضد نقطة النهاية الجديدة.
حالة مستقرة
تمت استعادة الخدمة. العقدة المستردة، عندما تكون قابلة للوصول، تتم مزامنتها وتنضم كعقدة احتياطية دافئة. يتم كتابة إدخالات سجل التدقيق. يتلقى المشغل إشعارًا واحدًا — بعد الحدث.