التوفر العالي · التعافي من الكوارث

مصمم ليبقى بلا انقطاع.

كل مكون يعمل بحرارة. تتم مزامنة عُقد قواعد البيانات النشطة والاحتياطية باستمرار. يطفو IP افتراضي فوق العنقود — يراقب keepalived العقدة الأساسية، وفي اللحظة التي تتوقف فيها عن الاستجابة، تنتقل حركة المرور إلى العقدة الاحتياطية قبل أن يلاحظ المشاهد العادي أي توقف. هذا ليس درس Postgres مثبت على SaaS — إنها بنية تحتية من الدرجة الأولى لا يحتاج المشغل أبدًا للتفكير فيها.

99.999%
هدف مستوى الخدمة
<30s
استرداد التجاوز
3×
أهداف النسخ المتماثل
0
إجراء المشغل المطلوب
§ Aالطوبولوجيا
تشريح العنقود

ثلاث عُقد، حقيقة واحدة.

زوج DB نشط/احتياطي يتم نسخه على شبكة خاصة. زوج من موازني الحمل nginx يشاركان في VRRP لـ IP افتراضي يطفو بينهما. يقرأ عنقود التطبيق من خلال تجمع اتصالات يفرغ ويعيد المحاولة عند انتقال العقدة الأساسية. كل ارتباط ذو مسار مزدوج.

الطوبولوجيا · عنقود-HA-0013 nodes · vrrp v3
VIRTUAL IP10.0.0.100● PRIMARYdb-01writes · accepting○ STANDBYdb-02replicating · warmAPP CLUSTERtuse · ott · prism○ LB-Anginx · keepalivedvrrp master○ LB-Bnginx · keepalivedvrrp backupCLIENT TRAFFIC ↑ 12.4M CCV
§ Bالتجاوز
جولة أقل من 30 ثانية

ماذا يحدث، ثانية بثانية.

عندما تفشل عقدة أساسية، يحدث الاسترداد في 4 خطوات مرتبة. إجراء المشغل: صفر. اضطراب جانب العميل: أقصر من إعادة إرسال TCP.

T+0s

نبضة القلب فُقدت

يتوقف keepalived العقدة الاحتياطية عن استقبال إعلانات VRRP من العقدة الأساسية. بعد 3 منارات مفقودة (~1.5 ثانية)، تروج العقدة الاحتياطية لنفسها.

الكشف · 1.5 ثانية
T+2s

الترقية + STONITH

تعزل العقدة الأساسية الجديدة العقدة القديمة — إيقاف التشغيل عبر API السحابة — وتقبل الكتابات. ينعكس اتجاه النسخ؛ ستنضم العقدة المستردة كاحتياطية.

الترقية · 2 ثانية
T+5s

ينتقل IP الافتراضي

ينتقل IP الافتراضي VRRP إلى NIC العقدة الأساسية الجديدة. يتم إفراغ تجمع اتصالات طبقة التطبيق؛ يتم إعادة محاولة الاستعلامات الجارية ضد نقطة النهاية الجديدة.

ترحيل VIP · 3 ثوان
T+<30s

حالة مستقرة

تمت استعادة الخدمة. العقدة المستردة، عندما تكون قابلة للوصول، تتم مزامنتها وتنضم كعقدة احتياطية دافئة. يتم كتابة إدخالات سجل التدقيق. يتلقى المشغل إشعارًا واحدًا — بعد الحدث.

الاسترداد الكامل · 30 ثانية
§ Cالمصفوفة

ما يتم — وما لا يتم — الحفاظ عليه.

القراءات
مستمرة. تخدم العقدة الاحتياطية نسخ القراءة أثناء التجاوز؛ لا يرى العملاء أبدًا انقطاعًا في حركة القراءة.
الكتابات
معلقة لفترة وجيزة (< 5 ثوان) أثناء الترقية. تتم إعادة محاولة الكتابات الجارية بواسطة تجمع الاتصالات بمفاتيح idempotency.
جلسات المستخدم
قائمة على JWT، عديمة الحالة. تستمر الجلسات خلال التجاوز دون إعادة مصادقة.
المهام الخلفية
طوابير BullMQ مدعومة بـ Redis وتنجو من التجاوز. تكتمل المهام قيد التقدم على العقدة الأساسية الجديدة.
البث المباشر
خوادم الأصل مستقلة عن قاعدة البيانات. لا يتأثر استيعاب البث وتسليم HLS.
لوحة المشغل
تُعرض ضد العقدة الأساسية الجديدة في اللحظة التي ينتقل فيها VIP. يُظهر سجل التدقيق حدث التجاوز.
§ ∞تحدث معنا
تجربة عنقود HA مُدار

وقت تشغيل بمستوى المهندسين.