التكرار في عام 2026: لا يزال هو الركيزة الأساسية
يظل النسخ المتماثل الرئيسي/التابع هو لبنة البناء الأساسية لأي بنية تحتية MariaDB / MySQL في الإنتاج. التوفر العالي، والقراءة الموزعة، والنسخ الاحتياطي السريع - كل هذا يعتمد عليه. ومع ذلك، فإن غالبية حوادث قاعدة البيانات الخطيرة تنطوي على النسخ المتماثل المعطوب أو التأخير غير المكتشف.
تتناول هذه المقالة جانبي النسخ المتماثل: كيفية إعداده بشكل صحيح، ثم كيفية الإشراف عليه في PmaControl حتى لا تتفاجأ أبدًا.
تكوين النسخ المتماثل
المتطلبات الأساسية على الجانب الرئيسي
يجب أن يكون binlog ممكّنًا للسيد وأن يكون server-id فريدًا:
[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin
binlog-format = ROW
gtid_strict_mode = ON # MariaDB
# enforce_gtid_consistency = ON # MySQL
# gtid_mode = ON # MySQL
إنشاء مستخدم النسخ المتماثل:
CREATE USER 'repl'@'10.0.1.%' IDENTIFIED BY 'secret_replication_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.1.%';
المتطلبات الأساسية على الجانب السلافي
يحتاج العبد إلى server-id وسجل الترحيل الخاص به:
[mysqld]
server-id = 2
relay-log = /var/log/mysql/relay-bin
read-only = ON
log-slave-updates = ON
`
log-slave-updates` ضروري إذا كنت تخطط لتقييد العبيد (عبد العبد) أو استخدام Galera.
بدء النسخ المتماثل
مع GTID (مستحسن)
على MariaDB:
CHANGE MASTER TO
MASTER_HOST = '10.0.1.1',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'secret_replication_password',
MASTER_USE_GTID = slave_pos;
START SLAVE;
على MySQL 8.0+:
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '10.0.1.1',
SOURCE_USER = 'repl',
SOURCE_PASSWORD = 'secret_replication_password',
SOURCE_AUTO_POSITION = 1;
START REPLICA;
بدون GTID (الوضع الكلاسيكي)
إذا لم يتم تنشيط GTID، لاحظ موضع binlog الخاص بالسيد:
-- Sur le master
SHOW MASTER STATUS;
-- File: mysql-bin.000042, Position: 154
-- Sur le slave
CHANGE MASTER TO
MASTER_HOST = '10.0.1.1',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'secret_replication_password',
MASTER_LOG_FILE = 'mysql-bin.000042',
MASTER_LOG_POS = 154;
START SLAVE;
تأكد من أنه يعمل
SHOW SLAVE STATUS\G
المؤشران الرئيسيان:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
إذا كان Slave_IO_Running هو No، فلن يتمكن العبد من الاتصال بالرئيس (الشبكة، بيانات الاعتماد، جدار الحماية). إذا كان Slave_SQL_Running هو No، فلن يتمكن العبد من تطبيق الأحداث (خطأ SQL، تم انتهاك القيد).
إضافة خوادم إلى PmaControl
عبر واجهة الويب
- انتقل إلى الخوادم → إضافة خادم
- أدخل بيانات اعتماد IP والمنفذ (3306) وSSH وMySQL
- PmaControl يكتشف تلقائيًا الدور (السيد أو العبد) بعد دورة التجميع الأولى
عبر API REST
# Ajouter le master
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"ip": "10.0.1.1", "port": 3306, "name": "db-prod-master", "ssh_key_id": 1}' \
https://pmacontrol.example.com/api/v1/servers
# Ajouter le slave
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"ip": "10.0.1.2", "port": 3306, "name": "db-prod-slave-01", "ssh_key_id": 1}' \
https://pmacontrol.example.com/api/v1/servers
PmaControl يبدأ دورة التجميع خلال دقيقة واحدة. يظهر العبد بعد ذلك بشارة "التابع" في لوحة القيادة.
الصفحة التابعة في PmaControl
يمكن الوصول إلى مراقبة النسخ المتماثل عبر المسار:
/{lang}/slave/show/{id}/{name}/
على سبيل المثال: /fr/slave/show/42/db-prod-slave-01/
تعرض وحدة التحكم Slave.php إجراءين رئيسيين:
show(): الصفحة الرئيسية التي تحتوي على الحالة الحالية والرسم البياني للتأخرshowGraphDay(): بيانات AJAX لتحميل يوم إضافي للرسم البياني
المتغيرات المراقبة
PmaControl يجمع كل المتغيرات من SHOW SLAVE STATUS ويخزنها في جداول السلاسل الزمنية. الأكثر أهمية:
| يختلف | معنى |
|---|---|
Slave_IO_Running |
هل مؤشر ترابط الإدخال والإخراج نشط (الاتصال بالرئيسي) |
Slave_SQL_Running |
هل الموضوع SQL نشط (تطبيق الأحداث) |
Seconds_Behind_Master |
تأخر في ثواني |
Using_Gtid |
وضع GTID المستخدم (MariaDB) |
Auto_Position |
الموضع التلقائي لمعرف GTID (MySQL) |
Last_SQL_Error |
تمت مواجهة الخطأ الأخير SQL |
Relay_Log_Space |
حجم سجل التتابع الحالي |
بالنسبة إلى MySQL 8.0+، يدير PmaControl أيضًا المعادلات المُعاد تسميتها:
| المتغير القديم | متغير جديد (MySQL 8.0+) |
|---|---|
Slave_IO_Running |
Replica_IO_Running |
Slave_SQL_Running |
Replica_SQL_Running |
Seconds_Behind_Master |
Seconds_Behind_Source |
PmaControl يقوم تلقائيًا بتطبيع الاسمين داخليًا.
الرسم البياني للتأخر
الرسم البياني المتأخر هو قلب الصفحة التابعة. يعرض آخر 5 أيام من Seconds_Behind_Master كمنحنى Chart.js.
الميزات:
- الدقة: نقطة واحدة في الدقيقة (1440 نقطة في اليوم)
- التحميل التدريجي: يتم تحميل اليوم الحالي على الفور، والأيام السابقة عبر AJAX "تحميل اليوم السابق"
- القياس التلقائي: يتكيف المحور Y مع الحد الأقصى للتأخر الملحوظ
- المنطقة الخضراء: < 10 ثوانٍ، تشغيل عادي
- المنطقة الكهرمانية: 10-60 ثانية، تأخر متوسط
- المنطقة الحمراء: > 60 ثانية، تأخر حرج
القطاع الصحي
يوجد فوق الرسم البياني شريط أفقي يلخص حالة كل دقيقة على مدار 24 ساعة مع رمز اللون:
| اللون | الحالة |
|---|---|
| الأخضر | تشغيل IO + SQL تشغيل + تأخر <60 ثانية |
| العنبر | تشغيل IO + SQL تشغيل + تأخر > 60 ثانية |
| أحمر | تم إيقاف الإدخال/الإخراج أو SQL، أو خطأ فادح |
إنه مؤشر بصري فوري: نظرة واحدة تكفي لمعرفة ما إذا كان اليوم الأخير مستقرًا أم فوضويًا.
الإجراءات التصحيحية منذ PmaControl
الصفحة السلافية لا تقتصر على الملاحظة. PmaControl يسمح لك بالتصرف مباشرة عند النسخ المتماثل.
ابدأ / أوقف العبيد
زرين لبدء النسخ المتماثل أو إيقافه. STOP SLAVE مفيد لـ:
- إجراء الصيانة على العبد (جدول ALTER الثقيل)
- أخذ نسخة احتياطية متسقة (لقطة مع توقف النسخ المتماثل)
- تشخيص مشكلة التأخر (توقف لفحص السجل)
خطأ في التخطي
عندما يتوقف النسخ المتماثل عند حدوث خطأ SQL (قيد مكرر، جدول مفقود)، يقترح PmaControl تخطي الحدث:
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
تنبيه: يتطلب هذا الإجراء تأكيدًا صريحًا. تخطي حدث يعني قبول التناقض بين السيد والعبد. PmaControl يسجل الإجراء مع المستخدم والتاريخ والخطأ الذي تم تخطيه لإمكانية التتبع.
العمال المتوازيين (النسخ المتوازي)
يقدم PmaControl شريط تمرير لضبط عدد عمال النسخ المتماثل المتوازي:
- الحد الأدنى: 1 (النسخ المتسلسل الكلاسيكي)
- الحد الأقصى: 50 أو وحدة المعالجة المركزية × 2 (أيهما أصغر)
STOP SLAVE;
SET GLOBAL slave_parallel_workers = 8;
START SLAVE;
تتيح لك زيادة عدد العمال اللحاق بالتأخير بسرعة أكبر، لأنه يتم تطبيق العديد من المعاملات بالتوازي. لكن كن حذرًا: هذا يعمل بشكل جيد فقط مع النسخ المتماثل المتوازي بواسطة LOGICAL_CLOCK (MariaDB) أو WRITESET (MySQL 8.0+).
خوارزمية اللحاق بـ ETA
عندما يتأخر العبد، يكون السؤال المباشر هو: كم من الوقت يجب اللحاق به؟
PmaControl يحسب التقدير (ETA) بناءً على:
- التأخر الحالي بالثواني
- سرعة اللحاق الملحوظة (التباين في التأخر خلال الدقائق العشر الأخيرة)
- الاستقراء الخطي
Si le lag passe de 3600s à 3000s en 10 minutes :
Vitesse = 600s rattrapées / 10min = 60s/min
ETA = 3000s / 60s/min = 50 minutes
يتم عرض ETA في أعلى الصفحة التابعة مع شريط التقدم. إذا كانت سرعة اللحاق صفرًا أو سالبة (يزداد التأخر)، يعرض PmaControl "ETA: Divergent" باللون الأحمر - إشارة إلى ضرورة التدخل.
دعم GTID
يكتشف PmaControl وضع GTID تلقائيًا:
- MariaDB: قراءة
Using_GtidفيSHOW SLAVE STATUS. القيم المحتملة:No،Slave_Pos،Current_Pos - MySQL: قراءة
Auto_PositionفيSHOW SLAVE STATUS. القيم المحتملة:0،1
عندما يكون GTID نشطًا، يعرض PmaControl معلومات إضافية:
- مجموعة GTID للنسخة الرئيسية (
Gtid_Slave_PosأوExecuted_Gtid_Set) - مجموعة GTID للعبد
- الدلتا بين الاثنين (عدد المعاملات المتأخرة)
غالبًا ما تكون دلتا GTID أكثر أهمية من Seconds_Behind_Master: فهي توفر العدد الدقيق للمعاملات المطلوب اللحاق بها، بغض النظر عن مدة كل معاملة.
أفضل الممارسات
1. استخدم دائمًا GTID
وضع موضع Binlog (ملف + موضع) هش: تتم إزالة الملف مبكرًا جدًا، وتجاوز الفشل، وتعطل النسخ المتماثل. GTID غير فعال وينجو من حالات الفشل.
2. تفعيل read_only على العبيد
SET GLOBAL read_only = ON;
SET GLOBAL super_read_only = ON; -- MySQL 5.7.8+ / MariaDB 10.3.16+
بدون read_only، تؤدي الكتابة غير المقصودة إلى العبد إلى حدوث انحراف صامت.
3. مراقبة التأخر، وليس الحالة فقط
Slave_IO_Running: Yes وSlave_SQL_Running: Yes ليسا كافيين. يمكن أن يكون العبد "قيد التشغيل" ولكن بفارق ساعتين. PmaControl يراقب كلا من: الحالة والتأخر.
4. تكوين التنبيهات
في PmaControl، قم بتكوين حدود التنبيه:
- تحذير: تأخر > 60 ثانية لمدة 5 دقائق
- حرج: تأخر > 300 ثانية أو توقف الإدخال/الإخراج/SQL
يتم إرسال التنبيهات عبر Telegram مع اسم الخادم والتأخير الحالي والرابط المباشر للصفحة التابعة.
5. خطط للعلاجات الرئيسية
يؤدي ALTER TABLE على الطاولات الكبيرة إلى حدوث ارتفاع مؤقت في التأخر. استخدم pt-online-schema-change أو gh-ost لـ DDLs في الإنتاج، وقم بإخطار PmaControl بوضع التابع في الصيانة لتجنب الإيجابيات الكاذبة.
الخلاصة
من السهل تكوين النسخ المتماثل MariaDB / MySQL ولكن من الصعب صيانته بمرور الوقت. PmaControl يسد الفجوة بين "النسخ المتماثل قيد التشغيل" و"النسخ المتماثل سليم" من خلال توفير:
- عرض في الوقت الحقيقي للتأخر مع تاريخ 5 أيام
- الإجراءات التصحيحية المتكاملة (البدء/الإيقاف، التخطي، العمال الموازيين)
- تقدير اللحاق بالركب (ETA) للتوقع
- الكشف التلقائي عن GTID
- تنبيهات استباقية عبر تيليجرام
الهدف ليس استبدال مسؤول قواعد البيانات، بل منحهم الأدوات اللازمة للاستجابة في دقائق بدلاً من ساعات.
تعليقات (0)
لا توجد تعليقات حتى الآن.
اترك تعليقا