MariaDB / المتقدم: الأدلة والتشغيل الموثوق / الدرس 15
المزامنة وGTID ومفاهيم Galera
قارن المزامنة غير المتزامنة بتصديق Galera وفسر سلامة النسخة التابعة، وحدد متطلبات الاتساق والتحويل قبل اختيار البنية.
في هذه الصفحة
أهداف الدرس
- فصل جلب الأحداث عن تطبيقها.
- شرح GTID في MariaDB وتعارضات Galera دون ضمان فقد صفري.
تستقبل النسخة التاريخ ثم تطبقه
في المزامنة غير المتزامنة يكتب الأصل أحداث السجل، وتجلبها النسخة إلى سجل وسيط ثم يطبقها المنفذ. الاستلام غير التطبيق؛ فقد يصح الاتصال ويتوقف التطبيق أو يتأخر رغم عمله. لذلك قد تعيد القراءة من النسخة بعد كتابة الأصل بيانات أقدم. حدد سماح الوجهة بالقدم وكيف يختار طلب قراءة كتابته خادماً مناسباً أو ينتظر وصوله.
اقرأ مساري المزامنة
تعد SHOW REPLICA STATUS اسماً حديثاً وتوفر الإصدارات الأقدم SHOW SLAVE STATUS. قد تبقى أسماء الحقول التاريخية. افحص Slave_IO_Running وSlave_SQL_Running والخطأين والمواضع معاً. Seconds_Behind_Master إشارة واحدة وقد تكون NULL أو مضللة في حالات، فلا تثبت الحداثة برقم واحد. تختلف الصلاحيات واختيار القناة حسب الإصدار؛ خطأ الصلاحية لا يثبت توقف المزامنة.
SHOW REPLICA STATUS;
SELECT @@global.gtid_slave_pos, @@global.gtid_binlog_pos;
أمثلة مراقبة للقراءة؛ الحالة تعتمد على البيئة ولا نختلق نتيجة سليمة.
لـ GTID في MariaDB معنى خاص
يتكون GTID في MariaDB من مجال وخادم وتسلسل مثل 0-17-42. يحدد مجموعة أحداث في التاريخ وليس قابلاً للاستبدال بصيغة MySQL أو معناها. تحتاج المجالات المتعددة تفسيراً واعياً بالبنية لا مقارنة أكبر رقم. قد تربك كتابات محلية على النسخة افتراضات current_pos الذي يجمع التاريخ بطريقة تختلف عن slave_pos. يحتاج تغيير المصدر والترقية خطة مراجعة وتاريخاً متسقاً ومنع الكاتب القديم.
ينقل التصديق التعارض إلى الحفظ
تستخدم Galera مزامنة مجموعات كتابة افتراضية التزامن مع التصديق. تنفذ المعاملة محلياً ثم تفحص مجموعتها وفق ترتيب عالمي، وقد تُجهض المتعارضة، فتظل إعادة المحاولة لازمة. لا يعني قبول كتابة في عقدة أن كل قراءة عادية في أخرى شهدت تطبيقها؛ تؤثر إعدادات القراءة السببية والتوجيه. النصاب ونقل الحالة متطلبات تشغيلية، وتعدد الأصول لا يضمن توسع كتابة غير محدود.
SHOW GLOBAL STATUS LIKE 'wsrep_cluster_status';
SHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';
SHOW GLOBAL STATUS LIKE 'wsrep_flow_control_paused';
تفيد هذه المتغيرات في نشر مفعّل لـ Galera؛ ويحتاج غياب النتائج إلى سياق.
اختر التعافي والاتساق بوضوح
قد يتحمل تصميم Galera بثلاث عقد بعض الأعطال عند تحقق النصاب والاتصال، لكن DELETE منطقية قد تنتشر للجميع. توسع النسخة غير المتزامنة القراءة ولا تضمن وحدها تحويلاً بلا فقد. احمِ نسخاً مستقلة في كلتا البنيتين. حدد سلطة الترقية والتوجيه وحدود التأخر وإعادة المحاولة ومنع الانقسام قبل العطل، وتحقق من إصدارات MariaDB والمزود لأن التوافق ليس عاماً.
الأخطاء الشائعة وإصلاحها
تقرأ النسخة بيانات قديمة رغم عمل المسارين
- لماذا يحدث؟
- عمل المسارين لا يثبت تطبيق جميع أحداث الأصل.
- كيف تصلحه؟
- قارن التقدم ومتطلبات الحداثة ثم وجه الطلب وفقهما.
- كيف تتجنب تكراره؟
- طبق سياسة موثقة للقراءة القديمة أو قراءة آخر كتابة.
يخفي تجاوز خطأ المزامنة اختلاف البيانات
- لماذا يحدث؟
- تُجاوز الحدث الفاشل دون فهم التاريخ.
- كيف تصلحه؟
- احفظ التشخيص وافحص التعارض أو أعد البناء من مصدر متسق معروف.
- كيف تتجنب تكراره؟
- تجنب الكتابة المحلية وتدرب على التعافي بدلاً من تخطي الأحداث عشوائياً.
تفشل معاملات Galera مع التحديث المتزامن
- لماذا يحدث؟
- رفض التصديق مجموعات كتابة متعارضة.
- كيف تصلحه؟
- تراجع وأعد العملية كاملة ضمن حد ومنع تكرار الأثر.
- كيف تتجنب تكراره؟
- قلل التنافس على الصفوف الساخنة واختبر فشل التصديق ضمن السعة.
اختبر فهمك
1. مسار I/O يعمل وSQL متوقف ويذكر Last_SQL_Error مفتاحاً مكرراً. هل تبدأ بإعادة الشبكة؟
اعرض الحل المشروح
لا؛ الجلب يعمل والتطبيق فشل. احفظ سياق الحدث وافحص اختلاف البيانات أو الكتابة المحلية أو المخطط بإجراء مصرح. لا تحل إعادة الشبكة تعارض المفتاح، ولا تتخط الحدث لمجرد تحسين الحالة؛ حدد تعافياً متسقاً أو إعادة بناء.
2. لماذا لا تعوض ثلاث عقد Galera نسخة مستقلة بعد حذف جدول عرضي؟
اعرض الحل المشروح
قد ينتشر التغيير المحفوظ إلى كل العقد فتحمل جميع النسخ الخطأ نفسه بأمانة. استعد من نسخة أسبق محمية وأعد سلسلة موثقة حتى الحد السليم فقط. يعالج التوافر استمرار الخدمة، بينما يحتاج التعافي التاريخي تاريخاً مستقلاً محفوظاً.
أهم ما تعلمته
- سلامة الاتصال وتقدم التطبيق وحداثة القراءة حقائق منفصلة.
- تحتاج GTID وGalera استدلالاً تشغيلياً خاصاً بالبنية.