مقال

النسخ المتماثل لقاعدة البيانات والتوافر العالي

النسخ المتماثل لقاعدة البيانات والتوافر العالي

النسخ المتماثل لقاعدة البيانات هو عملية نسخ بيانات قاعدة البيانات والحفاظ عليها عبر خوادم متعددة. إنه أساس التوفر العالي (HA)، والتعافي من الكوارث (DR)، وقياس القراءة، والتوزيع الجغرافي.

4 دقيقة قراءةاللغة: AR العربيةمجاني0 تصفيقات0 تعليقات
التقنيةمقالات هندسيةDatabaseHighDatabasesTechnologyEngineering ArticlesReplication
خيارات القراءة

مقدمة

النسخ المتماثل لقاعدة البيانات هو عملية نسخ بيانات قاعدة البيانات والحفاظ عليها عبر خوادم متعددة. إنه أساس التوفر العالي (HA)، والتعافي من الكوارث (DR)، وقياس القراءة، والتوزيع الجغرافي.

لا توجد قاعدة بيانات "معملة دائمًا" حقًا - فشل الأجهزة، وتقسيم الشبكات، وتعطل البرامج. يضمن النسخ المتماثل أنه عند فشل مثيل قاعدة بيانات، يمكن لمثيل آخر أن يتولى المهمة بأقل وقت توقف أو بدونه.


لماذا النسخ المتماثل؟

الهدف الوصف نهج النسخ المتماثل
توفر عالي يظل النظام متاحًا بعد الفشل تجاوز الفشل التلقائي للنسخ المتماثل
** التعافي من الكوارث ** البقاء على قيد الحياة انقطاع التيار الكهربائي على مستوى المنطقة النسخ المتماثلة الجغرافية الزائدة عن الحاجة
** قراءة القياس ** التعامل مع المزيد من استعلامات القراءة توزيع القراءات على النسخ المتماثلة
** النسخ الاحتياطي ** نقطة في الوقت المناسب الانتعاش دون تحميل نسخة طبق الأصل تستخدم للنسخ الاحتياطية
** التوزيع الجغرافي ** الكمون المنخفض للمستخدمين العالميين النسخ المتماثلة المحلية في كل منطقة
الصيانة ترقيات التوقف صفر فشل أثناء الصيانة

بنيات النسخ المتماثل

1. قائد واحد (نسخة طبق الأصل)

                    ┌──────────────────┐
                    │   Master Node    │
                    │  (reads + writes)│
                    └────────┬─────────┘
                             │ write-ahead log (WAL)
                             │
         ┌───────────────────┼───────────────────┐
         │                   │                   │
    ┌────▼────┐        ┌────▼────┐        ┌────▼────┐
    │Replica 1│        │Replica 2│        │Replica 3│
    │(read    │        │(read    │        │(read    │
    │ only)   │        │ only)   │        │ only)   │
    └─────────┘        └─────────┘        └─────────┘

الايجابيات:

  • بسيطة لاقامة وفهم.
  • يقرأ متسقة من الماجستير.
  • مدعومة بشكل جيد من قبل جميع قواعد البيانات.

سلبيات:

  • اكتب عنق الزجاجة (سيد واحد).
  • تأخر النسخ المتماثل (غير المتزامن) أو زمن انتقال الكتابة (المزامنة).
  • يلزم تجاوز الفشل يدويًا أو آليًا.
-- PostgreSQL streaming replication setup
-- Primary: postgresql.conf
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1024  -- MB

-- Replica: postgresql.conf
primary_conninfo = 'host=primary.example.com port=5432 user=replicator'

-- Create replication slot on primary
SELECT pg_create_physical_replication_slot('replica_1');

2. القائد المتعدد (نشط-نشط)

┌──────────────┐             ┌──────────────┐
│  Leader A    │◄───────────►│  Leader B    │
│  (US-East)   │  sync WAL   │  (EU-West)   │
└──────┬───────┘             └──────┬───────┘
       │                            │
  ┌────▼────┐                  ┌────▼────┐
  │Replica A│                  │Replica B│
  └─────────┘                  └─────────┘

الايجابيات:

  • يتم قبول الكتابة في مواقع متعددة (زمن وصول أقل).
  • لا توجد نقطة فشل واحدة للكتابة.
  • جيد للتوزيع الجغرافي.

سلبيات:

  • يجب حل تعارضات الكتابة (فوز الكاتب الأخير، CRDTs، منطق التطبيق).
  • حل الصراعات المعقدة.
  • لا تدعم جميع قواعد البيانات القادة المتعددين.
# Multi-leader with conflict resolution (CouchDB, PostgreSQL BDR)
conflict_resolution:
  strategy: "last_writer_wins"  # Default — may lose data
  # or: "application_merge"     # Application handles conflicts
  # or: "crdt"                  # Automatic conflict-free merging

3. بلا قيادة (على أساس النصاب القانوني)

Client ──► Write to all 3 nodes (W=2, R=2)

  ┌────────┐    ┌────────┐    ┌────────┐
  │ Node 1 │    │ Node 2 │    │ Node 3 │
  └────────┘    └────────┘    └────────┘
      │             │             │
      └─────────────┼─────────────┘
                    │
Client ◄────── Read from 2 nodes, compare versions (R=2)

نموذج أمازون DynamoDB/كاساندرا:

  • يمكن لأي عقدة قبول القراءة أو الكتابة.
  • W + R > N (إجمالي العقد) يضمن الاتساق.
  • يستخدم الساعات المتجهة لتتبع الإصدار.

الايجابيات:

  • لا توجد نقطة واحدة من الفشل.
  • توافر عالية للغاية.
  • قابلية التوسع الخطية.

سلبيات:

  • الاتساق النهائي بشكل افتراضي.
  • حل الصراعات المعقدة (الساعات المتجهة).
  • غير مناسب للبيانات العلائقية ذات المفاتيح الخارجية.

النسخ المتزامن مقابل النسخ المتزامن غير المتزامن

الجانب متزامن غير متزامن
** فقدان البيانات عند تجاوز الفشل ** صفر (RPO = 0) فقدان بعض البيانات (RPO > 0)
اكتب الكمون أعلى (انتظر النسخة المتماثلة ACK) أقل (الاعتراف على الفور)
** اتساق القراءة بعد الكتابة ** مضمون ربما قديمة يقرأ من النسخة المتماثلة
** متطلبات الشبكة ** الكمون المنخفض، موثوقة يتحمل الكمون العالي
تأثير النسخ يكتب كتل فشل النسخة المتماثلة فشل النسخة المتماثلة ليس له أي تأثير
-- PostgreSQL: synchronous replication
-- primary.conf
synchronous_standby_names = 'FIRST 1 (replica_1, replica_2)'

-- Now every write waits for at least one synchronous replica
-- Acknowledgment before returning COMMIT to client

استراتيجيات تجاوز الفشل

تجاوز الفشل اليدوي

# PostgreSQL manual failover
# On replica:
pg_ctl promote -D /var/lib/postgresql/data

# Update application connection string
# point at new primary

وقت التوقف عن العمل: من دقائق إلى ساعات (زمن الاستجابة البشرية).

تجاوز الفشل التلقائي (أدوات HA)

# Patroni — PostgreSQL HA
scope: production
namespace: /db/

consul:
  host: consul.example.com:8500

postgresql:
  use_pg_rewind: true
  parameters:
    max_connections: 200

# On primary failure:
# 1. Patroni detects primary is down
# 2. Promotes most up-to-date replica
# 3. Updates Consul with new primary address
# 4. All clients automatically reconnect
أداة قاعدة البيانات آلية وقت تجاوز الفشل
** باتروني ** PostgreSQL القنصل/etcd + REST API 10-30 ثانية
المنسق ماي إس كيو إل على أساس الطوافة 5-15 ثانية
** ريديس الحارس ** ريديس بروتوكول القيل والقال 10-30 ثانية
** مجموعة النسخ المتماثلة MongoDB ** MongoDB الانتخابات الداخلية <10 ثانية
** مشغل Kubernetes ** مختلف K8s-native يعتمد على التحقيق

تجاوز فشل VIP / DNS

# Keepalived — Virtual IP failover
vrrp_instance VI_1 {
    interface eth0
    state BACKUP
    virtual_router_id 51
    priority 100
    advert_int 1

    virtual_ipaddress {
        10.0.0.100/24  # Floating IP
    }

    track_script {
        chk_postgres
    }
}

تأخر النسخ المتماثل والاتساق

أسباب تأخر النسخ المتماثل

السبب الوصف التخفيف
كمون الشبكة المسافة بين العقد تحديد موقع أو استخدام تحسين WAN
المعاملات الكبيرة بطيء في التطبيق على النسخة المتماثلة اقتحام المعاملات الصغيرة
** تشبع وحدة المعالجة المركزية ** النسخة المتماثلة لا يمكن مواكبة مقياس الأجهزة المتماثلة
** استعلامات طويلة الأمد ** أقفال على النسخة المتماثلة قم بتعيين البيان_timeout
عمليات DDL يغير المخطط جداول القفل استخدم DDL المتزامن

مراقبة تأخر النسخ المتماثل

-- PostgreSQL lag monitoring
SELECT application_name,
       pg_size_pretty(pg_wal_lsn_diff(
           pg_current_wal_lsn(), replay_lsn
       )) as lag_bytes,
       ROUND(EXTRACT(EPOCH FROM NOW() - pg_last_xact_replay_timestamp()))
       as lag_seconds
FROM pg_stat_replication;

-- Expected: < 1 second (async), < 10ms (sync)

التعامل مع القراءات التي لا معنى لها

# Application pattern: "read-your-writes" consistency
class ConsistentDBClient:
    def __init__(self, master, replica):
        self.master = master
        self.replica = replica

    def write(self, key, value):
        # Write to master, record timestamp
        result = self.master.execute("INSERT ...")
        self._last_write_timestamp = time.time()
        return result

    def read(self, key):
        # Read from replica, but verify freshness
        data = self.replica.execute(f"SELECT * FROM ... WHERE id='{key}'")

        # Check if we just wrote this record
        stale_time = time.time() - self._last_write_timestamp
        if stale_time < 1.0:  # Within last second
            # This is a recent write — read from master for consistency
            if data is None:
                data = self.master.execute(f"SELECT ... WHERE id='{key}'")

        return data

النسخ الاحتياطي والتعافي من الكوارث

استراتيجيات النسخ الاحتياطي

استراتيجية RPO RTO التخزين التكلفة
** النسخ الاحتياطي الكامل اليومي ** 24 ساعة ساعات عالية منخفض
** أرشفة وول ** دقائق متغير متوسط منخفض
** أرشفة مستمرة ** < 1 دقيقة دقائق عالية متوسط
نسخة احتياطية ثواني سريع عالية متوسط
Multi-region replica < 1 ثانية الأسرع عالية جدا عالية
# PostgreSQL continuous archiving
archive_mode = on
archive_command = 'pgbackrest --stanza=prod archive-push %p'

# Point-in-time recovery
pgbackrest --stanza=prod --type=time \
  --target="2026-05-24 14:30:00+00" \
  --target-action=promote restore

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

RPO: Recovery Point Objective (how much data can you lose)
RTO: Recovery Time Objective (how fast must you recover)

Tier 1 (Mission Critical): RPO < 1 minute, RTO < 5 minutes
  Multi-region synchronous replication
  Automatic failover
  Regularly tested

Tier 2 (Business Critical): RPO < 1 hour, RTO < 30 minutes
  Async replication to DR region
  Semi-automated failover
  Quarterly tests

Tier 3 (Standard): RPO < 24 hours, RTO < 4 hours
  Daily backups + WAL archiving
  Manual restore
  Annual tests

قراءة القياس مع النسخ المتماثلة

قراءات موازنة التحميل

import random
from itertools import cycle

class ReadLoadBalancer:
    def __init__(self, replicas: list[str]):
        self.replicas = cycle(replicas)

    def get_reader(self) -> str:
        return next(self.replicas)

    def execute_query(self, query: str, is_read: bool = True):
        if is_read:
            conn = self.get_reader()
        else:
            conn = "master"

        return execute_on(conn, query)

موازنة التحميل المستندة إلى الوكيل

# PgBouncer or HAProxy configuration
# Routes reads to replicas, writes to master
listen pg_cluster
  bind *:5432
  mode tcp

  acl is_write method POST
  acl is_write query ^(INSERT|UPDATE|DELETE)

  use_backend master if is_write
  default_backend replicas

backend master
  server pg-master 10.0.0.1:5432 check

backend replicas
  server pg-replica1 10.0.0.2:5432 check
  server pg-replica2 10.0.0.3:5432 check
  server pg-replica3 10.0.0.4:5432 check

النسخ المتماثل لقاعدة البيانات المحددة

PostgreSQL

ميزة الوصف
** تدفق النسخ المتماثل ** تدفق WAL الفعلي إلى النسخ المتماثلة
النسخ المنطقي النسخ المتماثل على مستوى الجدول (PostgreSQL 10+)
** النسخ المتماثل ** يمكن أن تخدم النسخة المتماثلة النسخ المتماثلة الأخرى
** النسخ المتزامن ** مزامنة قابلة للتكوين لكل معاملة
صفحة_ترجيع إعادة المزامنة السريعة بعد انقسام الدماغ

ماي إس كيو إل

ميزة الوصف
** النسخ المتماثل للمجموعة ** متعددة الماجستير، وعضوية المجموعة المضمنة
** مجموعة InnoDB ** حل HA كامل مع MySQL Router
** النسخ المتماثل شبه المتزامن ** تعترف نسخة واحدة على الأقل
** النسخ المتماثل المستند إلى GTID ** معرفات المعاملات العالمية للسلامة

MongoDB

ميزة الوصف
** مجموعة النسخ ** انتخاب تلقائي، يصل إلى 50 عضوا
اكتب القلق مستوى الاعتراف شكلي
قراءة التفضيل يقرأ الطريق إلى أقرب نسخة متماثلة
** تغيير التدفقات ** في الوقت الحقيقي CDC من oplog

مشكلة انقسام الدماغ

يحدث انقسام الدماغ عندما يتسبب قسم الشبكة في اعتقاد كلا العقدتين بأنهما العقدة الرئيسية:

Before partition:
  Master A  ◄──►  Replica B

After partition:
  Master A       |X|       Replica B (promoted to master)
  (believes it   |X|   (believes it is master)
      is master) |X|
  
When partition heals: two masters, inconsistent data

الوقاية:

  • نصاب الأغلبية — يمكن فقط للجانب الذي لديه عقدة > N/2 أن يكون رئيسيًا.
  • ستونيث (أطلق النار على العقدة الأخرى في الرأس) — اقتل السيد العجوز.
  • المبارزة — إلغاء الوصول إلى مساحة التخزين المشتركة.
  • مستند إلى عقد الإيجار — ينتهي عقد الإيجار ويجب تجديده.

الاستنتاج

يعد النسخ المتماثل لقاعدة البيانات أمرًا ضروريًا لأنظمة الإنتاج التي تتطلب التوفر والمتانة والأداء:

مقياس النهج
صغيرة (عقدة واحدة) النسخ الاحتياطي اليومي إلى S3
متوسط (من 1 إلى 10 ملايين مستخدم) رئيسي واحد + 1-2 نسخ متماثلة، تجاوز الفشل تلقائيًا
كبير (10-100 مليون مستخدم) متعدد القادة أو مجزأ وموزع جغرافيًا
عالمي (أكثر من 100 مليون مستخدم) نشط متعدد المناطق، أو CRDTs أو فوز الكاتب الأخير

المبادئ الأساسية:

  1. اختبار تجاوز الفشل — إذا لم تقم باختباره، فهو لن يعمل.
  2. تأخر المراقبة — يعد تأخير النسخ المتماثل المصدر الأكثر شيوعًا لعدم تناسق البيانات.
  3. خطة للدماغ المنقسم — ضع استراتيجية قبل حدوثها.
  4. مطابقة RPO/RTO مع احتياجات العمل — لا يحتاج كل نظام إلى فقدان البيانات تمامًا.
  5. أتمتة كل شيء — يؤدي الاسترداد اليدوي إلى حدوث أخطاء وتوقف عن العمل.

لا يعد النسخ المتماثل ميزة الضبط والنسيان، بل يتطلب مراقبة واختبارًا وتحسينًا مستمرًا.

مقالات مختارة

50 مهارة من Claude تستحق البناء في 2026
تحريريAR
10 دمجاني

50 مهارة من Claude تستحق البناء في 2026

التقنيةAIAi GuidesAI Agents
0 تصفيقات
قراءة
ابن مساعد ملاحظات خاص بالذكاء الاصطناعي
مميزAR
9 دمجاني

ابن مساعد ملاحظات خاص بالذكاء الاصطناعي

حوّل مجلد ملاحظات Markdown إلى مساعد بحث دون كشف المسودات الخاصة.

التقنيةأدلة المنصةالكتابة بالذكاء الاصطناعيAIAutomationData
0 تصفيقات
قراءة
أتمتة استخراج بيانات الفواتير باستخدام OCR
تحريريAR
8 دمجاني

أتمتة استخراج بيانات الفواتير باستخدام OCR

ابن خط معالجة يقرأ الفواتير ويستخرج الحقول ويعلّم القيم غير المؤكدة للمراجعة.

التقنيةمقالات هندسيةالكتابة بالذكاء الاصطناعيAIAutomationData
0 تصفيقات
قراءة

التعليقات

0 تعليقات

لا توجد تعليقات معتمدة بعد. قد تنتظر الردود الجديدة المراجعة.