مقدمة
يسمح النسخ المتماثل متعدد المصادر لـ MySQL 8.4 لنفس النسخة المتماثلة بتلقي المعاملات من عدة خوادم مصدر بالتوازي. يتم إرفاق كل مصدر بالنسخة المتماثلة عبر قناة نسخ منفصلة.
تستخدم هذه الآلية بشكل أساسي من أجل:
- دمج خوادم متعددة في عقدة واحدة
- التدفقات الإجمالية من عدة دول أو مواقع أو تطبيقات
- مركزية قراءة البيانات
- إعداد عقدة الإبلاغ أو المصالحة
ومن ناحية أخرى، فهي ليست مجموعة كتابة مشتركة. MySQL لا يحل التعارضات بين مصادر متعددة. إذا كتب مصدران نفس الكائنات المنطقية، فيجب مراعاة الاتساق من جانب التطبيق أو من خلال التقسيم الصارم للبيانات.
ما الذي يدعمه MySQL 8.4 فعليًا
في MySQL 8.4:
- نسخة متماثلة متعددة المصادر تفتح قناة واحدة لكل مصدر
- يجب أن تشير كل قناة إلى مصدر مختلف
- يمكن أن يعتمد النسخ المتماثل على مواضع GTID أو binlog
- يمكن تطبيق مرشحات النسخ المتماثل لكل قناة
- يجب أن تكون مستودعات بيانات التعريف المتماثلة في وضع
TABLE، وهو السلوك الافتراضي في الإصدار 8.4
نقاط مهمة:
- يتم استخدام المصادر المتعددة للدمج، وليس لإجراء عمليات أساسية متعددة مع المراجحة
- لا يوجد كشف متكامل للصراع أو حله
- لا يمكن لنفس النسخة المتماثلة فتح عدة قنوات لنفس المصدر
مثال للطوبولوجيا
مثال بسيط مع ثلاثة مصادر ومجمع:
text
production_de ─┐
production_es ─┼──> production_all84
production_it ─┘
في هذا المثال:
production_deيحتوي على قاعدةPRODUCTIONproduction_esيحتوي أيضًا على قاعدةPRODUCTIONproduction_itيحتوي أيضًا على قاعدةPRODUCTIONproduction_all84يستقبل التدفقات الثلاثة لكنه يعيد تعيينها إلى قواعد مختلفة:PRODUCTION_DEPRODUCTION_ESPRODUCTION_IT
تمنع عملية إعادة التعيين هذه التدفقات الثلاثة من الكتابة إلى نفس قاعدة البيانات الموجودة في النسخة المتماثلة.
المتطلبات الأساسية
على كل مصدر:
server-idمنفردة- تمكين السجل الثنائي
- وصول TCP/IP إلى المنفذ MySQL
- مستخدم النسخ المتماثل مخصص
في النسخة المتماثلة متعددة المصادر:
server-idمنفردةrelay_logتم تكوينه- MySQL 8.4
- الاستعادة الأولية للبيانات قبل بدء النسخ
تكوين المصدر النموذجي
مثال على الحد الأدنى من التكوين على المصدر:
[mysqld]
bind-address = 0.0.0.0
server-id = 186
log_bin = mysql-bin
binlog_format = ROW
binlog_row_image = FULL
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
نفس المنطق في المصادر الأخرى، مع server-id مختلف على كل خادم.
التكوين النموذجي للنسخة المتماثلة المجمعة
مثال:
[mysqld]
bind-address = 0.0.0.0
server-id = 189
log_bin = mysql-bin
relay_log = mysql-relay-bin
binlog_format = ROW
binlog_row_image = FULL
skip_replica_start = ON
read_only = ON
super_read_only = ON
`
skip_replica_start=ON` مفيد أثناء مرحلة التجميع أو الصيانة، لأنه يتجنب إعادة التشغيل التلقائي للقنوات قبل التحقق من الصحة.
إنشاء حساب النسخ المتماثل
على كل مصدر:
CREATE USER 'repl'@'10.68.68.%' IDENTIFIED BY 'Repl84Geo2026x';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'10.68.68.%';
يظل الامتياز REPLICATION SLAVE هو الذي تم توثيقه بواسطة MySQL لهذا النوع من التجميع في 8.4.
تحميل البيانات الأولية
قبل إرفاق قناة، يجب عليك تحميل بيانات البداية على النسخة المتماثلة.
مثال مع مقالب مأخوذة من المصادر:
mysqldump --single-transaction --set-gtid-purged=OFF PRODUCTION > PRODUCTION_de.sql
mysqldump --single-transaction --set-gtid-purged=OFF PRODUCTION > PRODUCTION_es.sql
mysqldump --single-transaction --set-gtid-purged=OFF PRODUCTION > PRODUCTION_it.sql
ثم على النسخة المتماثلة:
CREATE DATABASE PRODUCTION_DE;
CREATE DATABASE PRODUCTION_ES;
CREATE DATABASE PRODUCTION_IT;
وقم باستيراد عمليات التفريغ الثلاثة إلى قواعد البيانات المستهدفة الثلاثة المقابلة.
استرجاع إحداثيات binlog
إذا لم نعمل في GTID، فيجب علينا استرجاع كل مصدر:
- اسم ملف binlog
- وضع البداية
مثال:
SHOW BINARY LOG STATUS;
ستبدأ النسخة المتماثلة بعد ذلك من هذه الإحداثيات بـ SOURCE_LOG_FILE وSOURCE_LOG_POS.
إنشاء القنوات
في MySQL 8.4، يتم تكوين كل مصدر باستخدام CHANGE REPLICATION SOURCE TO ... FOR CHANNEL.
مثال للمصدر الألماني:
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='10.68.68.186',
SOURCE_PORT=3306,
SOURCE_USER='repl',
SOURCE_PASSWORD='Repl84Geo2026x',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=158,
SOURCE_AUTO_POSITION=0,
GET_SOURCE_PUBLIC_KEY=1
FOR CHANNEL 'production_de';
نفس المبدأ ل:
production_esproduction_it
مرشحات لكل قناة
تأتي قوة المصادر المتعددة من التصفية لكل قناة على حدة.
إذا كانت المصادر الثلاثة لها قاعدة PRODUCTION، فيمكننا إعادة كتابتها على جانب النسخة المتماثلة:
CHANGE REPLICATION FILTER
REPLICATE_REWRITE_DB=((PRODUCTION,PRODUCTION_DE))
FOR CHANNEL 'production_de';
CHANGE REPLICATION FILTER
REPLICATE_REWRITE_DB=((PRODUCTION,PRODUCTION_ES))
FOR CHANNEL 'production_es';
CHANGE REPLICATION FILTER
REPLICATE_REWRITE_DB=((PRODUCTION,PRODUCTION_IT))
FOR CHANNEL 'production_it';
هذه النقطة مهمة:
- يجب أن تكون القناة موجودة قبل التقديم
CHANGE REPLICATION FILTER ... FOR CHANNEL - إذا لم تكن القناة موجودة بعد، فسيقوم MySQL بإرجاع خطأ
بدء القنوات
START REPLICA FOR CHANNEL 'production_de';
START REPLICA FOR CHANNEL 'production_es';
START REPLICA FOR CHANNEL 'production_it';
وبعد ذلك، إذا ظلت النسخة المتماثلة سلبية:
SET GLOBAL read_only = ON;
SET GLOBAL super_read_only = ON;
التحقق
التحكم في كل قناة على حدة:
SHOW REPLICA STATUS FOR CHANNEL 'production_de'\G
SHOW REPLICA STATUS FOR CHANNEL 'production_es'\G
SHOW REPLICA STATUS FOR CHANNEL 'production_it'\G
المؤشرات المتوقعة:
Replica_IO_Running: YesReplica_SQL_Running: YesSeconds_Behind_Source: 0أو قريب من0Replicate_Rewrite_DBتم تعريفه بشكل صحيح
الفحص الوظيفي:
SELECT * FROM PRODUCTION_DE.germany_feed;
SELECT * FROM PRODUCTION_ES.spain_feed;
SELECT * FROM PRODUCTION_IT.italy_feed;
العمليات الحالية
إيقاف قناة واحدة:
STOP REPLICA FOR CHANNEL 'production_es';
إعادة تشغيل قناة واحدة:
START REPLICA FOR CHANNEL 'production_es';
إعادة ضبط القناة:
RESET REPLICA ALL FOR CHANNEL 'production_es';
إزالة عامل تصفية إعادة الكتابة على القناة:
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=() FOR CHANNEL 'production_es';
ما يجب تجنبه
- تقارب عدة مصادر نحو نفس القاعدة المستهدفة دون تجزيء
- افترض أن MySQL سيحل تعارضات المفاتيح أو الجدولة
- استخدم عدة إصدارات مختلفة من MySQL دون إجراء فحوصات توافق صارمة
- ننسى أن
SOURCE_PASSWORDفيCHANGE REPLICATION SOURCE TOمحدود الطول - تطبيق المرشحات قبل إنشاء القناة
تحديد المواقع الفنية
يعد MySQL 8.4 متعدد المصادر مناسبًا لـ:
- توحيد متعدد البلدان
- التقارير المركزية
- المصالحة
- انتعاش العديد من التدفقات المستقلة
وهو غير مناسب بمفرده لـ:
- سيد متعدد حقيقي للكتابة المتزامنة
- بنية الإجماع
- حل الصراعات تلقائيا
الخلاصة
مع MySQL 8.4، أصبح النسخ المتماثل متعدد المصادر نظيفًا وناضجًا وقابل للاستخدام لتجميع خوادم مصادر متعددة في نسخة متماثلة واحدة.
المخطط الموصى به بسيط:
- قم بالفصل بوضوح بين أدوار المصدر والمجمع
- فرض
server-idواحد في كل مكان - قم بتحميل لقطة أولية
- إنشاء قناة لكل مصدر
- تطبيق مرشحات إعادة الكتابة لكل قناة
- تحقق من كل قناة بشكل مستقل
إذا كانت البيانات المصدر تحتوي على أسماء قاعدة بيانات متطابقة، فإن REPLICATE_REWRITE_DB لكل قناة هي الآلية الأكثر فائدة للحفاظ على النسخة المتماثلة النهائية قابلة للقراءة والاستخدام.
تعليقات (0)
لا توجد تعليقات حتى الآن.
اترك تعليقا